diff --git a/3rdparty/ippicv/.gitignore b/3rdparty/ippicv/.gitignore new file mode 100644 index 000000000..ea720dd57 --- /dev/null +++ b/3rdparty/ippicv/.gitignore @@ -0,0 +1,2 @@ +downloads/ +unpack/ diff --git a/3rdparty/ippicv/downloader.cmake b/3rdparty/ippicv/downloader.cmake new file mode 100644 index 000000000..371521446 --- /dev/null +++ b/3rdparty/ippicv/downloader.cmake @@ -0,0 +1,108 @@ +# +# The script downloads ICV package +# +# On return this will define: +# OPENCV_ICV_PATH - path to unpacked downloaded package +# + +function(_icv_downloader) + # Define actual ICV versions + if(APPLE) + set(OPENCV_ICV_PACKAGE_NAME "ippicv_macosx_20140429.tgz") + set(OPENCV_ICV_PACKAGE_HASH "f2195a60829899983acd4a45794e1717") + set(OPENCV_ICV_PLATFORM "macosx") + set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_osx") + elseif(UNIX) + if(ANDROID AND (NOT ANDROID_ABI STREQUAL x86)) + return() + endif() + set(OPENCV_ICV_PACKAGE_NAME "ippicv_linux_20140513.tgz") + set(OPENCV_ICV_PACKAGE_HASH "d80cb24f3a565113a9d6dc56344142f6") + set(OPENCV_ICV_PLATFORM "linux") + set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_lnx") + elseif(WIN32 AND NOT ARM) + set(OPENCV_ICV_PACKAGE_NAME "ippicv_windows_20140429.zip") + set(OPENCV_ICV_PACKAGE_HASH "b5028a92224ec1fbc554010c52eb3ec8") + set(OPENCV_ICV_PLATFORM "windows") + set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_win") + else() + return() # Not supported + endif() + + set(OPENCV_ICV_UNPACK_PATH "${CMAKE_CURRENT_LIST_DIR}/unpack") + set(OPENCV_ICV_PATH "${OPENCV_ICV_UNPACK_PATH}${OPENCV_ICV_PACKAGE_SUBDIR}") + + if(DEFINED OPENCV_ICV_PACKAGE_DOWNLOADED + AND OPENCV_ICV_PACKAGE_DOWNLOADED STREQUAL OPENCV_ICV_PACKAGE_HASH + AND EXISTS ${OPENCV_ICV_PATH}) + # Package has been downloaded and checked by the previous build + set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE) + return() + else() + if(EXISTS ${OPENCV_ICV_UNPACK_PATH}) + message(STATUS "ICV: Removing previous unpacked package: ${OPENCV_ICV_UNPACK_PATH}") + file(REMOVE_RECURSE ${OPENCV_ICV_UNPACK_PATH}) + endif() + endif() + unset(OPENCV_ICV_PACKAGE_DOWNLOADED CACHE) + + set(OPENCV_ICV_PACKAGE_ARCHIVE "${CMAKE_CURRENT_LIST_DIR}/downloads/${OPENCV_ICV_PLATFORM}-${OPENCV_ICV_PACKAGE_HASH}/${OPENCV_ICV_PACKAGE_NAME}") + get_filename_component(OPENCV_ICV_PACKAGE_ARCHIVE_DIR "${OPENCV_ICV_PACKAGE_ARCHIVE}" PATH) + if(EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}") + file(MD5 "${OPENCV_ICV_PACKAGE_ARCHIVE}" archive_md5) + if(NOT archive_md5 STREQUAL OPENCV_ICV_PACKAGE_HASH) + message(WARNING "ICV: Local copy of ICV package has invalid MD5 hash: ${archive_md5} (expected: ${OPENCV_ICV_PACKAGE_HASH})") + file(REMOVE "${OPENCV_ICV_PACKAGE_ARCHIVE}") + file(REMOVE_RECURSE "${OPENCV_ICV_PACKAGE_ARCHIVE_DIR}") + endif() + endif() + + if(NOT EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}") + if(NOT DEFINED OPENCV_ICV_URL) + if(DEFINED ENV{OPENCV_ICV_URL}) + set(OPENCV_ICV_URL $ENV{OPENCV_ICV_URL}) + else() + set(OPENCV_ICV_URL "http://sourceforge.net/projects/opencvlibrary/files/3rdparty/ippicv") + endif() + endif() + + file(MAKE_DIRECTORY ${OPENCV_ICV_PACKAGE_ARCHIVE_DIR}) + message(STATUS "ICV: Downloading ${OPENCV_ICV_PACKAGE_NAME}...") + file(DOWNLOAD "${OPENCV_ICV_URL}/${OPENCV_ICV_PACKAGE_NAME}" "${OPENCV_ICV_PACKAGE_ARCHIVE}" + TIMEOUT 600 STATUS __status + EXPECTED_MD5 ${OPENCV_ICV_PACKAGE_HASH}) + if(NOT __status EQUAL 0) + message(FATAL_ERROR "ICV: Failed to download ICV package: ${OPENCV_ICV_PACKAGE_NAME}. Status=${__status}") + else() + # Don't remove this code, because EXPECTED_MD5 parameter doesn't fail "file(DOWNLOAD)" step + # on wrong hash + file(MD5 "${OPENCV_ICV_PACKAGE_ARCHIVE}" archive_md5) + if(NOT archive_md5 STREQUAL OPENCV_ICV_PACKAGE_HASH) + message(FATAL_ERROR "ICV: Downloaded copy of ICV package has invalid MD5 hash: ${archive_md5} (expected: ${OPENCV_ICV_PACKAGE_HASH})") + endif() + endif() + endif() + + ocv_assert(EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}") + ocv_assert(NOT EXISTS "${OPENCV_ICV_UNPACK_PATH}") + file(MAKE_DIRECTORY ${OPENCV_ICV_UNPACK_PATH}) + ocv_assert(EXISTS "${OPENCV_ICV_UNPACK_PATH}") + + message(STATUS "ICV: Unpacking ${OPENCV_ICV_PACKAGE_NAME} to ${OPENCV_ICV_UNPACK_PATH}...") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xz "${OPENCV_ICV_PACKAGE_ARCHIVE}" + WORKING_DIRECTORY "${OPENCV_ICV_UNPACK_PATH}" + RESULT_VARIABLE __result) + + if(NOT __result EQUAL 0) + message(FATAL_ERROR "ICV: Failed to unpack ICV package from ${OPENCV_ICV_PACKAGE_ARCHIVE} to ${OPENCV_ICV_UNPACK_PATH} with error ${__result}") + endif() + + ocv_assert(EXISTS "${OPENCV_ICV_PATH}") + + set(OPENCV_ICV_PACKAGE_DOWNLOADED "${OPENCV_ICV_PACKAGE_HASH}" CACHE INTERNAL "ICV package hash") + + message(STATUS "ICV: Package successfully downloaded") + set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE) +endfunction() + +_icv_downloader() diff --git a/CMakeLists.txt b/CMakeLists.txt index c1e4e7c1a..5abf44980 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,6 +127,7 @@ OCV_OPTION(WITH_FFMPEG "Include FFMPEG support" ON OCV_OPTION(WITH_GSTREAMER "Include Gstreamer support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) ) OCV_OPTION(WITH_GSTREAMER_0_10 "Enable Gstreamer 0.10 support (instead of 1.x)" OFF ) OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) ) +OCV_OPTION(WITH_GTK_2_X "Use GTK version 2" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) ) OCV_OPTION(WITH_IPP "Include Intel IPP support" ON IF (NOT IOS) ) OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) ) OCV_OPTION(WITH_JPEG "Include JPEG support" ON) @@ -174,6 +175,7 @@ OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for sta OCV_OPTION(BUILD_FAT_JAVA_LIB "Create fat java wrapper containing the whole OpenCV library" ON IF NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX ) OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_SOURCE_TREE ) OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID ) +OCV_OPTION(BUILD_CUDA_STUBS "Build CUDA modules stubs when no CUDA SDK" OFF IF (NOT IOS) ) # 3rd party libs OCV_OPTION(BUILD_ZLIB "Build zlib from source" WIN32 OR APPLE ) @@ -215,6 +217,7 @@ OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too no OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF ) OCV_OPTION(ENABLE_WINRT_MODE "Build with Windows Runtime support" OFF IF WIN32 ) OCV_OPTION(ENABLE_WINRT_MODE_NATIVE "Build with Windows Runtime native C++ support" OFF IF WIN32 ) +OCV_OPTION(ANDROID_EXAMPLES_WITH_LIBS "Build binaries of Android examples with native libraries" OFF IF ANDROID ) # ---------------------------------------------------------------------------- @@ -747,8 +750,14 @@ else() status(" Cocoa:" YES) endif() else() - status(" GTK+ 2.x:" HAVE_GTK THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})" ELSE NO) - status(" GThread :" HAVE_GTHREAD THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})" ELSE NO) + if(HAVE_GTK3) + status(" GTK+ 3.x:" HAVE_GTK THEN "YES (ver ${ALIASOF_gtk+-3.0_VERSION})" ELSE NO) + elseif(HAVE_GTK) + status(" GTK+ 2.x:" HAVE_GTK THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})" ELSE NO) + else() + status(" GTK+:" NO) + endif() + status(" GThread :" HAVE_GTHREAD THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})" ELSE NO) status(" GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO) endif() endif() diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index b1d7f4205..1814efb2e 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -1,6 +1,4 @@ add_definitions(-D__OPENCV_BUILD=1) link_libraries(${OPENCV_LINKER_LIBS}) -add_subdirectory(haartraining) add_subdirectory(traincascade) -add_subdirectory(sft) diff --git a/apps/haartraining/CMakeLists.txt b/apps/haartraining/CMakeLists.txt deleted file mode 100644 index 63bbff635..000000000 --- a/apps/haartraining/CMakeLists.txt +++ /dev/null @@ -1,89 +0,0 @@ -SET(OPENCV_HAARTRAINING_DEPS opencv_core opencv_imgproc opencv_photo opencv_ml opencv_highgui opencv_objdetect opencv_calib3d opencv_video opencv_features2d opencv_flann opencv_legacy) -ocv_check_dependencies(${OPENCV_HAARTRAINING_DEPS}) - -if(NOT OCV_DEPENDENCIES_FOUND) - return() -endif() - -project(haartraining) - -ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}" "${OpenCV_SOURCE_DIR}/include/opencv") -ocv_include_modules(${OPENCV_HAARTRAINING_DEPS}) - -if(WIN32) - link_directories(${CMAKE_CURRENT_BINARY_DIR}) -endif() - -link_libraries(${OPENCV_HAARTRAINING_DEPS} opencv_haartraining_engine) - -# ----------------------------------------------------------- -# Library -# ----------------------------------------------------------- -set(cvhaartraining_lib_src - _cvcommon.h - cvclassifier.h - _cvhaartraining.h - cvhaartraining.h - cvboost.cpp - cvcommon.cpp - cvhaarclassifier.cpp - cvhaartraining.cpp - cvsamples.cpp - ) - -add_library(opencv_haartraining_engine STATIC ${cvhaartraining_lib_src}) -set_target_properties(opencv_haartraining_engine PROPERTIES - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} - INSTALL_NAME_DIR lib - ) - -# ----------------------------------------------------------- -# haartraining -# ----------------------------------------------------------- - -add_executable(opencv_haartraining cvhaartraining.h haartraining.cpp) -set_target_properties(opencv_haartraining PROPERTIES - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - OUTPUT_NAME "opencv_haartraining") - -# ----------------------------------------------------------- -# createsamples -# ----------------------------------------------------------- - -add_executable(opencv_createsamples cvhaartraining.h createsamples.cpp) -set_target_properties(opencv_createsamples PROPERTIES - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - OUTPUT_NAME "opencv_createsamples") - -# ----------------------------------------------------------- -# performance -# ----------------------------------------------------------- -add_executable(opencv_performance performance.cpp) -set_target_properties(opencv_performance PROPERTIES - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - OUTPUT_NAME "opencv_performance") - -# ----------------------------------------------------------- -# Install part -# ----------------------------------------------------------- - -if(INSTALL_CREATE_DISTRIB) - if(BUILD_SHARED_LIBS) - install(TARGETS opencv_haartraining RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT dev) - install(TARGETS opencv_createsamples RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT dev) - install(TARGETS opencv_performance RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT dev) - endif() -else() - install(TARGETS opencv_haartraining RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT dev) - install(TARGETS opencv_createsamples RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT dev) - install(TARGETS opencv_performance RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT dev) -endif() - -if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(opencv_performance PROPERTIES FOLDER "applications") - set_target_properties(opencv_createsamples PROPERTIES FOLDER "applications") - set_target_properties(opencv_haartraining PROPERTIES FOLDER "applications") - set_target_properties(opencv_haartraining_engine PROPERTIES FOLDER "applications") -endif() diff --git a/apps/haartraining/_cvcommon.h b/apps/haartraining/_cvcommon.h deleted file mode 100644 index 92fee8e84..000000000 --- a/apps/haartraining/_cvcommon.h +++ /dev/null @@ -1,92 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -#ifndef __CVCOMMON_H_ -#define __CVCOMMON_H_ - -#include "opencv2/core.hpp" - -#include "cxcore.h" -#include "cv.h" -#include "cxmisc.h" - -#define __BEGIN__ __CV_BEGIN__ -#define __END__ __CV_END__ -#define EXIT __CV_EXIT__ - -#ifndef PATH_MAX -#define PATH_MAX 512 -#endif /* PATH_MAX */ - -int icvMkDir( const char* filename ); - -/* returns index at specified position from index matrix of any type. - if matrix is NULL, then specified position is returned */ -CV_INLINE -int icvGetIdxAt( CvMat* idx, int pos ); - -CV_INLINE -int icvGetIdxAt( CvMat* idx, int pos ) -{ - if( idx == NULL ) - { - return pos; - } - else - { - CvScalar sc; - int type; - - type = CV_MAT_TYPE( idx->type ); - cvRawDataToScalar( idx->data.ptr + pos * - ( (idx->rows == 1) ? CV_ELEM_SIZE( type ) : idx->step ), type, &sc ); - - return (int) sc.val[0]; - } -} - -/* debug functions */ - -#define CV_DEBUG_SAVE( ptr ) icvSave( ptr, __FILE__, __LINE__ ); - -void icvSave( const CvArr* ptr, const char* filename, int line ); - -#endif /* __CVCOMMON_H_ */ diff --git a/apps/haartraining/_cvhaartraining.h b/apps/haartraining/_cvhaartraining.h deleted file mode 100644 index 459e6aa5e..000000000 --- a/apps/haartraining/_cvhaartraining.h +++ /dev/null @@ -1,414 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * _cvhaartraining.h - * - * training of cascade of boosted classifiers based on haar features - */ - -#ifndef __CVHAARTRAINING_H_ -#define __CVHAARTRAINING_H_ - -#include "_cvcommon.h" -#include "cvclassifier.h" -#include -#include - -/* parameters for tree cascade classifier training */ - -/* max number of clusters */ -#define CV_MAX_CLUSTERS 3 - -/* term criteria for K-Means */ -#define CV_TERM_CRITERIA() cvTermCriteria( CV_TERMCRIT_EPS, 1000, 1E-5 ) - -/* print statistic info */ -#define CV_VERBOSE 1 - -#define CV_STAGE_CART_FILE_NAME "AdaBoostCARTHaarClassifier.txt" - -#define CV_HAAR_FEATURE_MAX 3 -#define CV_HAAR_FEATURE_DESC_MAX 20 - -typedef int sum_type; -typedef double sqsum_type; -typedef short idx_type; - -#define CV_SUM_MAT_TYPE CV_32SC1 -#define CV_SQSUM_MAT_TYPE CV_64FC1 -#define CV_IDX_MAT_TYPE CV_16SC1 - -#define CV_STUMP_TRAIN_PORTION 100 - -#define CV_THRESHOLD_EPS (0.00001F) - -typedef struct CvTHaarFeature -{ - char desc[CV_HAAR_FEATURE_DESC_MAX]; - int tilted; - struct - { - CvRect r; - float weight; - } rect[CV_HAAR_FEATURE_MAX]; -} CvTHaarFeature; - -typedef struct CvFastHaarFeature -{ - int tilted; - struct - { - int p0, p1, p2, p3; - float weight; - } rect[CV_HAAR_FEATURE_MAX]; -} CvFastHaarFeature; - -typedef struct CvIntHaarFeatures -{ - CvSize winsize; - int count; - CvTHaarFeature* feature; - CvFastHaarFeature* fastfeature; -} CvIntHaarFeatures; - -CV_INLINE CvTHaarFeature cvHaarFeature( const char* desc, - int x0, int y0, int w0, int h0, float wt0, - int x1, int y1, int w1, int h1, float wt1, - int x2 CV_DEFAULT( 0 ), int y2 CV_DEFAULT( 0 ), - int w2 CV_DEFAULT( 0 ), int h2 CV_DEFAULT( 0 ), - float wt2 CV_DEFAULT( 0.0F ) ); - -CV_INLINE CvTHaarFeature cvHaarFeature( const char* desc, - int x0, int y0, int w0, int h0, float wt0, - int x1, int y1, int w1, int h1, float wt1, - int x2, int y2, int w2, int h2, float wt2 ) -{ - CvTHaarFeature hf; - - assert( CV_HAAR_FEATURE_MAX >= 3 ); - assert( strlen( desc ) < CV_HAAR_FEATURE_DESC_MAX ); - - strcpy( &(hf.desc[0]), desc ); - hf.tilted = ( hf.desc[0] == 't' ); - - hf.rect[0].r.x = x0; - hf.rect[0].r.y = y0; - hf.rect[0].r.width = w0; - hf.rect[0].r.height = h0; - hf.rect[0].weight = wt0; - - hf.rect[1].r.x = x1; - hf.rect[1].r.y = y1; - hf.rect[1].r.width = w1; - hf.rect[1].r.height = h1; - hf.rect[1].weight = wt1; - - hf.rect[2].r.x = x2; - hf.rect[2].r.y = y2; - hf.rect[2].r.width = w2; - hf.rect[2].r.height = h2; - hf.rect[2].weight = wt2; - - return hf; -} - -/* Prepared for training samples */ -typedef struct CvHaarTrainingData -{ - CvSize winsize; /* training image size */ - int maxnum; /* maximum number of samples */ - CvMat sum; /* sum images (each row represents image) */ - CvMat tilted; /* tilted sum images (each row represents image) */ - CvMat normfactor; /* normalization factor */ - CvMat cls; /* classes. 1.0 - object, 0.0 - background */ - CvMat weights; /* weights */ - - CvMat* valcache; /* precalculated feature values (CV_32FC1) */ - CvMat* idxcache; /* presorted indices (CV_IDX_MAT_TYPE) */ -} CvHaarTrainigData; - - -/* Passed to callback functions */ -typedef struct CvUserdata -{ - CvHaarTrainingData* trainingData; - CvIntHaarFeatures* haarFeatures; -} CvUserdata; - -CV_INLINE -CvUserdata cvUserdata( CvHaarTrainingData* trainingData, - CvIntHaarFeatures* haarFeatures ); - -CV_INLINE -CvUserdata cvUserdata( CvHaarTrainingData* trainingData, - CvIntHaarFeatures* haarFeatures ) -{ - CvUserdata userdata; - - userdata.trainingData = trainingData; - userdata.haarFeatures = haarFeatures; - - return userdata; -} - - -#define CV_INT_HAAR_CLASSIFIER_FIELDS() \ - float (*eval)( CvIntHaarClassifier*, sum_type*, sum_type*, float ); \ - void (*save)( CvIntHaarClassifier*, FILE* file ); \ - void (*release)( CvIntHaarClassifier** ); - -/* internal weak classifier*/ -typedef struct CvIntHaarClassifier -{ - CV_INT_HAAR_CLASSIFIER_FIELDS() -} CvIntHaarClassifier; - -/* - * CART classifier - */ -typedef struct CvCARTHaarClassifier -{ - CV_INT_HAAR_CLASSIFIER_FIELDS() - - int count; - int* compidx; - CvTHaarFeature* feature; - CvFastHaarFeature* fastfeature; - float* threshold; - int* left; - int* right; - float* val; -} CvCARTHaarClassifier; - -/* internal stage classifier */ -typedef struct CvStageHaarClassifier -{ - CV_INT_HAAR_CLASSIFIER_FIELDS() - - int count; - float threshold; - CvIntHaarClassifier** classifier; -} CvStageHaarClassifier; - -/* internal cascade classifier */ -typedef struct CvCascadeHaarClassifier -{ - CV_INT_HAAR_CLASSIFIER_FIELDS() - - int count; - CvIntHaarClassifier** classifier; -} CvCascadeHaarClassifier; - - -/* internal tree cascade classifier node */ -typedef struct CvTreeCascadeNode -{ - CvStageHaarClassifier* stage; - - struct CvTreeCascadeNode* next; - struct CvTreeCascadeNode* child; - struct CvTreeCascadeNode* parent; - - struct CvTreeCascadeNode* next_same_level; - struct CvTreeCascadeNode* child_eval; - int idx; - int leaf; -} CvTreeCascadeNode; - -/* internal tree cascade classifier */ -typedef struct CvTreeCascadeClassifier -{ - CV_INT_HAAR_CLASSIFIER_FIELDS() - - CvTreeCascadeNode* root; /* root of the tree */ - CvTreeCascadeNode* root_eval; /* root node for the filtering */ - - int next_idx; -} CvTreeCascadeClassifier; - - -CV_INLINE float cvEvalFastHaarFeature( const CvFastHaarFeature* feature, - const sum_type* sum, const sum_type* tilted ) -{ - const sum_type* img = feature->tilted ? tilted : sum; - float ret = feature->rect[0].weight* - (img[feature->rect[0].p0] - img[feature->rect[0].p1] - - img[feature->rect[0].p2] + img[feature->rect[0].p3]) + - feature->rect[1].weight* - (img[feature->rect[1].p0] - img[feature->rect[1].p1] - - img[feature->rect[1].p2] + img[feature->rect[1].p3]); - - if( feature->rect[2].weight != 0.0f ) - ret += feature->rect[2].weight * - ( img[feature->rect[2].p0] - img[feature->rect[2].p1] - - img[feature->rect[2].p2] + img[feature->rect[2].p3] ); - return ret; -} - - -typedef struct CvSampleDistortionData -{ - IplImage* src; - IplImage* erode; - IplImage* dilate; - IplImage* mask; - IplImage* img; - IplImage* maskimg; - int dx; - int dy; - int bgcolor; -} CvSampleDistortionData; - -/* - * icvConvertToFastHaarFeature - * - * Convert to fast representation of haar features - * - * haarFeature - input array - * fastHaarFeature - output array - * size - size of arrays - * step - row step for the integral image - */ -void icvConvertToFastHaarFeature( CvTHaarFeature* haarFeature, - CvFastHaarFeature* fastHaarFeature, - int size, int step ); - - -void icvWriteVecHeader( FILE* file, int count, int width, int height ); -void icvWriteVecSample( FILE* file, CvArr* sample ); -void icvPlaceDistortedSample( CvArr* background, - int inverse, int maxintensitydev, - double maxxangle, double maxyangle, double maxzangle, - int inscribe, double maxshiftf, double maxscalef, - CvSampleDistortionData* data ); -void icvEndSampleDistortion( CvSampleDistortionData* data ); - -int icvStartSampleDistortion( const char* imgfilename, int bgcolor, int bgthreshold, - CvSampleDistortionData* data ); - -typedef int (*CvGetHaarTrainingDataCallback)( CvMat* img, void* userdata ); - -typedef struct CvVecFile -{ - FILE* input; - int count; - int vecsize; - int last; - short* vector; -} CvVecFile; - -int icvGetHaarTraininDataFromVecCallback( CvMat* img, void* userdata ); - -/* - * icvGetHaarTrainingDataFromVec - * - * Fill with samples from .vec file, passed -int icvGetHaarTrainingDataFromVec( CvHaarTrainingData* data, int first, int count, - CvIntHaarClassifier* cascade, - const char* filename, - int* consumed ); - */ - -CvIntHaarClassifier* icvCreateCARTHaarClassifier( int count ); - -void icvReleaseHaarClassifier( CvIntHaarClassifier** classifier ); - -void icvInitCARTHaarClassifier( CvCARTHaarClassifier* carthaar, CvCARTClassifier* cart, - CvIntHaarFeatures* intHaarFeatures ); - -float icvEvalCARTHaarClassifier( CvIntHaarClassifier* classifier, - sum_type* sum, sum_type* tilted, float normfactor ); - -CvIntHaarClassifier* icvCreateStageHaarClassifier( int count, float threshold ); - -void icvReleaseStageHaarClassifier( CvIntHaarClassifier** classifier ); - -float icvEvalStageHaarClassifier( CvIntHaarClassifier* classifier, - sum_type* sum, sum_type* tilted, float normfactor ); - -CvIntHaarClassifier* icvCreateCascadeHaarClassifier( int count ); - -void icvReleaseCascadeHaarClassifier( CvIntHaarClassifier** classifier ); - -float icvEvalCascadeHaarClassifier( CvIntHaarClassifier* classifier, - sum_type* sum, sum_type* tilted, float normfactor ); - -void icvSaveHaarFeature( CvTHaarFeature* feature, FILE* file ); - -void icvLoadHaarFeature( CvTHaarFeature* feature, FILE* file ); - -void icvSaveCARTHaarClassifier( CvIntHaarClassifier* classifier, FILE* file ); - -CvIntHaarClassifier* icvLoadCARTHaarClassifier( FILE* file, int step ); - -void icvSaveStageHaarClassifier( CvIntHaarClassifier* classifier, FILE* file ); - -CvIntHaarClassifier* icvLoadCARTStageHaarClassifier( const char* filename, int step ); - - -/* tree cascade classifier */ - -float icvEvalTreeCascadeClassifier( CvIntHaarClassifier* classifier, - sum_type* sum, sum_type* tilted, float normfactor ); - -void icvSetLeafNode( CvTreeCascadeClassifier* tree, CvTreeCascadeNode* leaf ); - -float icvEvalTreeCascadeClassifierFilter( CvIntHaarClassifier* classifier, sum_type* sum, - sum_type* tilted, float normfactor ); - -CvTreeCascadeNode* icvCreateTreeCascadeNode(); - -void icvReleaseTreeCascadeNodes( CvTreeCascadeNode** node ); - -void icvReleaseTreeCascadeClassifier( CvIntHaarClassifier** classifier ); - -/* Prints out current tree structure to */ -void icvPrintTreeCascade( CvTreeCascadeNode* root ); - -/* Loads tree cascade classifier */ -CvIntHaarClassifier* icvLoadTreeCascadeClassifier( const char* filename, int step, - int* splits ); - -/* Finds leaves belonging to maximal level and connects them via leaf->next_same_level */ -CvTreeCascadeNode* icvFindDeepestLeaves( CvTreeCascadeClassifier* tree ); - -#endif /* __CVHAARTRAINING_H_ */ diff --git a/apps/haartraining/createsamples.cpp b/apps/haartraining/createsamples.cpp deleted file mode 100644 index 2e86cca9a..000000000 --- a/apps/haartraining/createsamples.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * createsamples.cpp - * - * Create test/training samples - */ - -#include -#include -#include -#include -#include - -using namespace std; - -#include "cvhaartraining.h" - -int main( int argc, char* argv[] ) -{ - int i = 0; - char* nullname = (char*)"(NULL)"; - char* vecname = NULL; /* .vec file name */ - char* infoname = NULL; /* file name with marked up image descriptions */ - char* imagename = NULL; /* single sample image */ - char* bgfilename = NULL; /* background */ - int num = 1000; - int bgcolor = 0; - int bgthreshold = 80; - int invert = 0; - int maxintensitydev = 40; - double maxxangle = 1.1; - double maxyangle = 1.1; - double maxzangle = 0.5; - int showsamples = 0; - /* the samples are adjusted to this scale in the sample preview window */ - double scale = 4.0; - int width = 24; - int height = 24; - - srand((unsigned int)time(0)); - - if( argc == 1 ) - { - printf( "Usage: %s\n [-info ]\n" - " [-img ]\n" - " [-vec ]\n" - " [-bg ]\n [-num ]\n" - " [-bgcolor ]\n" - " [-inv] [-randinv] [-bgthresh ]\n" - " [-maxidev ]\n" - " [-maxxangle ]\n" - " [-maxyangle ]\n" - " [-maxzangle ]\n" - " [-show []]\n" - " [-w ]\n [-h ]\n", - argv[0], num, bgcolor, bgthreshold, maxintensitydev, - maxxangle, maxyangle, maxzangle, scale, width, height ); - - return 0; - } - - for( i = 1; i < argc; ++i ) - { - if( !strcmp( argv[i], "-info" ) ) - { - infoname = argv[++i]; - } - else if( !strcmp( argv[i], "-img" ) ) - { - imagename = argv[++i]; - } - else if( !strcmp( argv[i], "-vec" ) ) - { - vecname = argv[++i]; - } - else if( !strcmp( argv[i], "-bg" ) ) - { - bgfilename = argv[++i]; - } - else if( !strcmp( argv[i], "-num" ) ) - { - num = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-bgcolor" ) ) - { - bgcolor = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-bgthresh" ) ) - { - bgthreshold = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-inv" ) ) - { - invert = 1; - } - else if( !strcmp( argv[i], "-randinv" ) ) - { - invert = CV_RANDOM_INVERT; - } - else if( !strcmp( argv[i], "-maxidev" ) ) - { - maxintensitydev = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-maxxangle" ) ) - { - maxxangle = atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-maxyangle" ) ) - { - maxyangle = atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-maxzangle" ) ) - { - maxzangle = atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-show" ) ) - { - showsamples = 1; - if( i+1 < argc && strlen( argv[i+1] ) > 0 && argv[i+1][0] != '-' ) - { - double d; - d = strtod( argv[i+1], 0 ); - if( d != -HUGE_VAL && d != HUGE_VAL && d > 0 ) scale = d; - ++i; - } - } - else if( !strcmp( argv[i], "-w" ) ) - { - width = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-h" ) ) - { - height = atoi( argv[++i] ); - } - } - - printf( "Info file name: %s\n", ((infoname == NULL) ? nullname : infoname ) ); - printf( "Img file name: %s\n", ((imagename == NULL) ? nullname : imagename ) ); - printf( "Vec file name: %s\n", ((vecname == NULL) ? nullname : vecname ) ); - printf( "BG file name: %s\n", ((bgfilename == NULL) ? nullname : bgfilename ) ); - printf( "Num: %d\n", num ); - printf( "BG color: %d\n", bgcolor ); - printf( "BG threshold: %d\n", bgthreshold ); - printf( "Invert: %s\n", (invert == CV_RANDOM_INVERT) ? "RANDOM" - : ( (invert) ? "TRUE" : "FALSE" ) ); - printf( "Max intensity deviation: %d\n", maxintensitydev ); - printf( "Max x angle: %g\n", maxxangle ); - printf( "Max y angle: %g\n", maxyangle ); - printf( "Max z angle: %g\n", maxzangle ); - printf( "Show samples: %s\n", (showsamples) ? "TRUE" : "FALSE" ); - if( showsamples ) - { - printf( "Scale: %g\n", scale ); - } - printf( "Width: %d\n", width ); - printf( "Height: %d\n", height ); - - /* determine action */ - if( imagename && vecname ) - { - printf( "Create training samples from single image applying distortions...\n" ); - - cvCreateTrainingSamples( vecname, imagename, bgcolor, bgthreshold, bgfilename, - num, invert, maxintensitydev, - maxxangle, maxyangle, maxzangle, - showsamples, width, height ); - - printf( "Done\n" ); - } - else if( imagename && bgfilename && infoname ) - { - printf( "Create test samples from single image applying distortions...\n" ); - - cvCreateTestSamples( infoname, imagename, bgcolor, bgthreshold, bgfilename, num, - invert, maxintensitydev, - maxxangle, maxyangle, maxzangle, showsamples, width, height ); - - printf( "Done\n" ); - } - else if( infoname && vecname ) - { - int total; - - printf( "Create training samples from images collection...\n" ); - - total = cvCreateTrainingSamplesFromInfo( infoname, vecname, num, showsamples, - width, height ); - - printf( "Done. Created %d samples\n", total ); - } - else if( vecname ) - { - printf( "View samples from vec file (press ESC to exit)...\n" ); - - cvShowVecSamples( vecname, width, height, scale ); - - printf( "Done\n" ); - } - else - { - printf( "Nothing to do\n" ); - } - - return 0; -} diff --git a/apps/haartraining/cvboost.cpp b/apps/haartraining/cvboost.cpp deleted file mode 100644 index 4b9f24f1b..000000000 --- a/apps/haartraining/cvboost.cpp +++ /dev/null @@ -1,3789 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -#include "cvconfig.h" - -#ifdef HAVE_MALLOC_H - #include -#endif - -#ifdef HAVE_MEMORY_H - #include -#endif - -#ifdef _OPENMP - #include -#endif /* _OPENMP */ - -#include -#include -#include -#include -#include - -#include "_cvcommon.h" -#include "cvclassifier.h" - -#ifdef _OPENMP -#include "omp.h" -#endif - -#define CV_BOOST_IMPL - -typedef struct CvValArray -{ - uchar* data; - size_t step; -} CvValArray; - -template -class LessThanValArray -{ -public: - LessThanValArray( const T* _aux ) : aux(_aux) {} - bool operator()(Idx a, Idx b) const - { - return *( (float*) (aux->data + ((int) (a)) * aux->step ) ) < - *( (float*) (aux->data + ((int) (b)) * aux->step ) ); - } - const T* aux; -}; - -CV_BOOST_IMPL -void cvGetSortedIndices( CvMat* val, CvMat* idx, int sortcols ) -{ - int idxtype = 0; - size_t istep = 0; - size_t jstep = 0; - - int i = 0; - int j = 0; - - CvValArray va; - - CV_Assert( idx != NULL ); - CV_Assert( val != NULL ); - - idxtype = CV_MAT_TYPE( idx->type ); - CV_Assert( idxtype == CV_16SC1 || idxtype == CV_32SC1 || idxtype == CV_32FC1 ); - CV_Assert( CV_MAT_TYPE( val->type ) == CV_32FC1 ); - if( sortcols ) - { - CV_Assert( idx->rows == val->cols ); - CV_Assert( idx->cols == val->rows ); - istep = CV_ELEM_SIZE( val->type ); - jstep = val->step; - } - else - { - CV_Assert( idx->rows == val->rows ); - CV_Assert( idx->cols == val->cols ); - istep = val->step; - jstep = CV_ELEM_SIZE( val->type ); - } - - va.data = val->data.ptr; - va.step = jstep; - switch( idxtype ) - { - case CV_16SC1: - for( i = 0; i < idx->rows; i++ ) - { - for( j = 0; j < idx->cols; j++ ) - { - CV_MAT_ELEM( *idx, short, i, j ) = (short) j; - } - std::sort((short*) (idx->data.ptr + (size_t)i * idx->step), - (short*) (idx->data.ptr + (size_t)i * idx->step) + idx->cols, - LessThanValArray(&va)); - va.data += istep; - } - break; - - case CV_32SC1: - for( i = 0; i < idx->rows; i++ ) - { - for( j = 0; j < idx->cols; j++ ) - { - CV_MAT_ELEM( *idx, int, i, j ) = j; - } - std::sort((int*) (idx->data.ptr + (size_t)i * idx->step), - (int*) (idx->data.ptr + (size_t)i * idx->step) + idx->cols, - LessThanValArray(&va)); - va.data += istep; - } - break; - - case CV_32FC1: - for( i = 0; i < idx->rows; i++ ) - { - for( j = 0; j < idx->cols; j++ ) - { - CV_MAT_ELEM( *idx, float, i, j ) = (float) j; - } - std::sort((float*) (idx->data.ptr + (size_t)i * idx->step), - (float*) (idx->data.ptr + (size_t)i * idx->step) + idx->cols, - LessThanValArray(&va)); - va.data += istep; - } - break; - - default: - assert( 0 ); - break; - } -} - -CV_BOOST_IMPL -void cvReleaseStumpClassifier( CvClassifier** classifier ) -{ - cvFree( classifier ); - *classifier = 0; -} - -CV_BOOST_IMPL -float cvEvalStumpClassifier( CvClassifier* classifier, CvMat* sample ) -{ - assert( classifier != NULL ); - assert( sample != NULL ); - assert( CV_MAT_TYPE( sample->type ) == CV_32FC1 ); - - if( (CV_MAT_ELEM( (*sample), float, 0, - ((CvStumpClassifier*) classifier)->compidx )) < - ((CvStumpClassifier*) classifier)->threshold ) - return ((CvStumpClassifier*) classifier)->left; - return ((CvStumpClassifier*) classifier)->right; -} - -#define ICV_DEF_FIND_STUMP_THRESHOLD( suffix, type, error ) \ -static int icvFindStumpThreshold_##suffix( \ - uchar* data, size_t datastep, \ - uchar* wdata, size_t wstep, \ - uchar* ydata, size_t ystep, \ - uchar* idxdata, size_t idxstep, int num, \ - float* lerror, \ - float* rerror, \ - float* threshold, float* left, float* right, \ - float* sumw, float* sumwy, float* sumwyy ) \ -{ \ - int found = 0; \ - float wyl = 0.0F; \ - float wl = 0.0F; \ - float wyyl = 0.0F; \ - float wyr = 0.0F; \ - float wr = 0.0F; \ - \ - float curleft = 0.0F; \ - float curright = 0.0F; \ - float* prevval = NULL; \ - float* curval = NULL; \ - float curlerror = 0.0F; \ - float currerror = 0.0F; \ - \ - int i = 0; \ - int idx = 0; \ - \ - if( *sumw == FLT_MAX ) \ - { \ - /* calculate sums */ \ - float *y = NULL; \ - float *w = NULL; \ - float wy = 0.0F; \ - \ - *sumw = 0.0F; \ - *sumwy = 0.0F; \ - *sumwyy = 0.0F; \ - for( i = 0; i < num; i++ ) \ - { \ - idx = (int) ( *((type*) (idxdata + i*idxstep)) ); \ - w = (float*) (wdata + idx * wstep); \ - *sumw += *w; \ - y = (float*) (ydata + idx * ystep); \ - wy = (*w) * (*y); \ - *sumwy += wy; \ - *sumwyy += wy * (*y); \ - } \ - } \ - \ - for( i = 0; i < num; i++ ) \ - { \ - idx = (int) ( *((type*) (idxdata + i*idxstep)) ); \ - curval = (float*) (data + idx * datastep); \ - /* for debug purpose */ \ - if( i > 0 ) assert( (*prevval) <= (*curval) ); \ - \ - wyr = *sumwy - wyl; \ - wr = *sumw - wl; \ - \ - if( wl > 0.0 ) curleft = wyl / wl; \ - else curleft = 0.0F; \ - \ - if( wr > 0.0 ) curright = wyr / wr; \ - else curright = 0.0F; \ - \ - error \ - \ - if( curlerror + currerror < (*lerror) + (*rerror) ) \ - { \ - (*lerror) = curlerror; \ - (*rerror) = currerror; \ - *threshold = *curval; \ - if( i > 0 ) { \ - *threshold = 0.5F * (*threshold + *prevval); \ - } \ - *left = curleft; \ - *right = curright; \ - found = 1; \ - } \ - \ - do \ - { \ - wl += *((float*) (wdata + idx * wstep)); \ - wyl += (*((float*) (wdata + idx * wstep))) \ - * (*((float*) (ydata + idx * ystep))); \ - wyyl += *((float*) (wdata + idx * wstep)) \ - * (*((float*) (ydata + idx * ystep))) \ - * (*((float*) (ydata + idx * ystep))); \ - } \ - while( (++i) < num && \ - ( *((float*) (data + (idx = \ - (int) ( *((type*) (idxdata + i*idxstep))) ) * datastep)) \ - == *curval ) ); \ - --i; \ - prevval = curval; \ - } /* for each value */ \ - \ - return found; \ -} - -/* misclassification error - * err = MIN( wpos, wneg ); - */ -#define ICV_DEF_FIND_STUMP_THRESHOLD_MISC( suffix, type ) \ - ICV_DEF_FIND_STUMP_THRESHOLD( misc_##suffix, type, \ - float wposl = 0.5F * ( wl + wyl ); \ - float wposr = 0.5F * ( wr + wyr ); \ - curleft = 0.5F * ( 1.0F + curleft ); \ - curright = 0.5F * ( 1.0F + curright ); \ - curlerror = MIN( wposl, wl - wposl ); \ - currerror = MIN( wposr, wr - wposr ); \ - ) - -/* gini error - * err = 2 * wpos * wneg /(wpos + wneg) - */ -#define ICV_DEF_FIND_STUMP_THRESHOLD_GINI( suffix, type ) \ - ICV_DEF_FIND_STUMP_THRESHOLD( gini_##suffix, type, \ - float wposl = 0.5F * ( wl + wyl ); \ - float wposr = 0.5F * ( wr + wyr ); \ - curleft = 0.5F * ( 1.0F + curleft ); \ - curright = 0.5F * ( 1.0F + curright ); \ - curlerror = 2.0F * wposl * ( 1.0F - curleft ); \ - currerror = 2.0F * wposr * ( 1.0F - curright ); \ - ) - -#define CV_ENTROPY_THRESHOLD FLT_MIN - -/* entropy error - * err = - wpos * log(wpos / (wpos + wneg)) - wneg * log(wneg / (wpos + wneg)) - */ -#define ICV_DEF_FIND_STUMP_THRESHOLD_ENTROPY( suffix, type ) \ - ICV_DEF_FIND_STUMP_THRESHOLD( entropy_##suffix, type, \ - float wposl = 0.5F * ( wl + wyl ); \ - float wposr = 0.5F * ( wr + wyr ); \ - curleft = 0.5F * ( 1.0F + curleft ); \ - curright = 0.5F * ( 1.0F + curright ); \ - curlerror = currerror = 0.0F; \ - if( curleft > CV_ENTROPY_THRESHOLD ) \ - curlerror -= wposl * logf( curleft ); \ - if( curleft < 1.0F - CV_ENTROPY_THRESHOLD ) \ - curlerror -= (wl - wposl) * logf( 1.0F - curleft ); \ - \ - if( curright > CV_ENTROPY_THRESHOLD ) \ - currerror -= wposr * logf( curright ); \ - if( curright < 1.0F - CV_ENTROPY_THRESHOLD ) \ - currerror -= (wr - wposr) * logf( 1.0F - curright ); \ - ) - -/* least sum of squares error */ -#define ICV_DEF_FIND_STUMP_THRESHOLD_SQ( suffix, type ) \ - ICV_DEF_FIND_STUMP_THRESHOLD( sq_##suffix, type, \ - /* calculate error (sum of squares) */ \ - /* err = sum( w * (y - left(rigt)Val)^2 ) */ \ - curlerror = wyyl + curleft * curleft * wl - 2.0F * curleft * wyl; \ - currerror = (*sumwyy) - wyyl + curright * curright * wr - 2.0F * curright * wyr; \ - ) - -ICV_DEF_FIND_STUMP_THRESHOLD_MISC( 16s, short ) - -ICV_DEF_FIND_STUMP_THRESHOLD_MISC( 32s, int ) - -ICV_DEF_FIND_STUMP_THRESHOLD_MISC( 32f, float ) - - -ICV_DEF_FIND_STUMP_THRESHOLD_GINI( 16s, short ) - -ICV_DEF_FIND_STUMP_THRESHOLD_GINI( 32s, int ) - -ICV_DEF_FIND_STUMP_THRESHOLD_GINI( 32f, float ) - - -ICV_DEF_FIND_STUMP_THRESHOLD_ENTROPY( 16s, short ) - -ICV_DEF_FIND_STUMP_THRESHOLD_ENTROPY( 32s, int ) - -ICV_DEF_FIND_STUMP_THRESHOLD_ENTROPY( 32f, float ) - - -ICV_DEF_FIND_STUMP_THRESHOLD_SQ( 16s, short ) - -ICV_DEF_FIND_STUMP_THRESHOLD_SQ( 32s, int ) - -ICV_DEF_FIND_STUMP_THRESHOLD_SQ( 32f, float ) - -typedef int (*CvFindThresholdFunc)( uchar* data, size_t datastep, - uchar* wdata, size_t wstep, - uchar* ydata, size_t ystep, - uchar* idxdata, size_t idxstep, int num, - float* lerror, - float* rerror, - float* threshold, float* left, float* right, - float* sumw, float* sumwy, float* sumwyy ); - -CvFindThresholdFunc findStumpThreshold_16s[4] = { - icvFindStumpThreshold_misc_16s, - icvFindStumpThreshold_gini_16s, - icvFindStumpThreshold_entropy_16s, - icvFindStumpThreshold_sq_16s - }; - -CvFindThresholdFunc findStumpThreshold_32s[4] = { - icvFindStumpThreshold_misc_32s, - icvFindStumpThreshold_gini_32s, - icvFindStumpThreshold_entropy_32s, - icvFindStumpThreshold_sq_32s - }; - -CvFindThresholdFunc findStumpThreshold_32f[4] = { - icvFindStumpThreshold_misc_32f, - icvFindStumpThreshold_gini_32f, - icvFindStumpThreshold_entropy_32f, - icvFindStumpThreshold_sq_32f - }; - -CV_BOOST_IMPL -CvClassifier* cvCreateStumpClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* /*typeMask*/, - CvMat* missedMeasurementsMask, - CvMat* compIdx, - CvMat* sampleIdx, - CvMat* weights, - CvClassifierTrainParams* trainParams - ) -{ - CvStumpClassifier* stump = NULL; - int m = 0; /* number of samples */ - int n = 0; /* number of components */ - uchar* data = NULL; - int cstep = 0; - int sstep = 0; - uchar* ydata = NULL; - int ystep = 0; - uchar* idxdata = NULL; - int idxstep = 0; - int l = 0; /* number of indices */ - uchar* wdata = NULL; - int wstep = 0; - - int* idx = NULL; - int i = 0; - - float sumw = FLT_MAX; - float sumwy = FLT_MAX; - float sumwyy = FLT_MAX; - - CV_Assert( trainData != NULL ); - CV_Assert( CV_MAT_TYPE( trainData->type ) == CV_32FC1 ); - CV_Assert( trainClasses != NULL ); - CV_Assert( CV_MAT_TYPE( trainClasses->type ) == CV_32FC1 ); - CV_Assert( missedMeasurementsMask == NULL ); - CV_Assert( compIdx == NULL ); - CV_Assert( weights != NULL ); - CV_Assert( CV_MAT_TYPE( weights->type ) == CV_32FC1 ); - CV_Assert( trainParams != NULL ); - - data = trainData->data.ptr; - if( CV_IS_ROW_SAMPLE( flags ) ) - { - cstep = CV_ELEM_SIZE( trainData->type ); - sstep = trainData->step; - m = trainData->rows; - n = trainData->cols; - } - else - { - sstep = CV_ELEM_SIZE( trainData->type ); - cstep = trainData->step; - m = trainData->cols; - n = trainData->rows; - } - - ydata = trainClasses->data.ptr; - if( trainClasses->rows == 1 ) - { - assert( trainClasses->cols == m ); - ystep = CV_ELEM_SIZE( trainClasses->type ); - } - else - { - assert( trainClasses->rows == m ); - ystep = trainClasses->step; - } - - wdata = weights->data.ptr; - if( weights->rows == 1 ) - { - assert( weights->cols == m ); - wstep = CV_ELEM_SIZE( weights->type ); - } - else - { - assert( weights->rows == m ); - wstep = weights->step; - } - - l = m; - if( sampleIdx != NULL ) - { - assert( CV_MAT_TYPE( sampleIdx->type ) == CV_32FC1 ); - - idxdata = sampleIdx->data.ptr; - if( sampleIdx->rows == 1 ) - { - l = sampleIdx->cols; - idxstep = CV_ELEM_SIZE( sampleIdx->type ); - } - else - { - l = sampleIdx->rows; - idxstep = sampleIdx->step; - } - assert( l <= m ); - } - - idx = (int*) cvAlloc( l * sizeof( int ) ); - stump = (CvStumpClassifier*) cvAlloc( sizeof( CvStumpClassifier) ); - - /* START */ - memset( (void*) stump, 0, sizeof( CvStumpClassifier ) ); - - stump->eval = cvEvalStumpClassifier; - stump->tune = NULL; - stump->save = NULL; - stump->release = cvReleaseStumpClassifier; - - stump->lerror = FLT_MAX; - stump->rerror = FLT_MAX; - stump->left = 0.0F; - stump->right = 0.0F; - - /* copy indices */ - if( sampleIdx != NULL ) - { - for( i = 0; i < l; i++ ) - { - idx[i] = (int) *((float*) (idxdata + i*idxstep)); - } - } - else - { - for( i = 0; i < l; i++ ) - { - idx[i] = i; - } - } - - for( i = 0; i < n; i++ ) - { - CvValArray va; - - va.data = data + i * ((size_t) cstep); - va.step = sstep; - std::sort(idx, idx + l, LessThanValArray(&va)); - if( findStumpThreshold_32s[(int) ((CvStumpTrainParams*) trainParams)->error] - ( data + i * ((size_t) cstep), sstep, - wdata, wstep, ydata, ystep, (uchar*) idx, sizeof( int ), l, - &(stump->lerror), &(stump->rerror), - &(stump->threshold), &(stump->left), &(stump->right), - &sumw, &sumwy, &sumwyy ) ) - { - stump->compidx = i; - } - } /* for each component */ - - /* END */ - - cvFree( &idx ); - - if( ((CvStumpTrainParams*) trainParams)->type == CV_CLASSIFICATION_CLASS ) - { - stump->left = 2.0F * (stump->left >= 0.5F) - 1.0F; - stump->right = 2.0F * (stump->right >= 0.5F) - 1.0F; - } - - return (CvClassifier*) stump; -} - -/* - * cvCreateMTStumpClassifier - * - * Multithreaded stump classifier constructor - * Includes huge train data support through callback function - */ -CV_BOOST_IMPL -CvClassifier* cvCreateMTStumpClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* /*typeMask*/, - CvMat* missedMeasurementsMask, - CvMat* compIdx, - CvMat* sampleIdx, - CvMat* weights, - CvClassifierTrainParams* trainParams ) -{ - CvStumpClassifier* stump = NULL; - int m = 0; /* number of samples */ - int n = 0; /* number of components */ - uchar* data = NULL; - size_t cstep = 0; - size_t sstep = 0; - int datan = 0; /* num components */ - uchar* ydata = NULL; - size_t ystep = 0; - uchar* idxdata = NULL; - size_t idxstep = 0; - int l = 0; /* number of indices */ - uchar* wdata = NULL; - size_t wstep = 0; - - uchar* sorteddata = NULL; - int sortedtype = 0; - size_t sortedcstep = 0; /* component step */ - size_t sortedsstep = 0; /* sample step */ - int sortedn = 0; /* num components */ - int sortedm = 0; /* num samples */ - - char* filter = NULL; - int i = 0; - - int compidx = 0; - int stumperror; - int portion; - - /* private variables */ - CvMat mat; - CvValArray va; - float lerror; - float rerror; - float left; - float right; - float threshold; - int optcompidx; - - float sumw; - float sumwy; - float sumwyy; - - int t_compidx; - int t_n; - - int ti; - int tj; - int tk; - - uchar* t_data; - size_t t_cstep; - size_t t_sstep; - - size_t matcstep; - size_t matsstep; - - int* t_idx; - /* end private variables */ - - CV_Assert( trainParams != NULL ); - CV_Assert( trainClasses != NULL ); - CV_Assert( CV_MAT_TYPE( trainClasses->type ) == CV_32FC1 ); - CV_Assert( missedMeasurementsMask == NULL ); - CV_Assert( compIdx == NULL ); - - stumperror = (int) ((CvMTStumpTrainParams*) trainParams)->error; - - ydata = trainClasses->data.ptr; - if( trainClasses->rows == 1 ) - { - m = trainClasses->cols; - ystep = CV_ELEM_SIZE( trainClasses->type ); - } - else - { - m = trainClasses->rows; - ystep = trainClasses->step; - } - - wdata = weights->data.ptr; - if( weights->rows == 1 ) - { - CV_Assert( weights->cols == m ); - wstep = CV_ELEM_SIZE( weights->type ); - } - else - { - CV_Assert( weights->rows == m ); - wstep = weights->step; - } - - if( ((CvMTStumpTrainParams*) trainParams)->sortedIdx != NULL ) - { - sortedtype = - CV_MAT_TYPE( ((CvMTStumpTrainParams*) trainParams)->sortedIdx->type ); - assert( sortedtype == CV_16SC1 || sortedtype == CV_32SC1 - || sortedtype == CV_32FC1 ); - sorteddata = ((CvMTStumpTrainParams*) trainParams)->sortedIdx->data.ptr; - sortedsstep = CV_ELEM_SIZE( sortedtype ); - sortedcstep = ((CvMTStumpTrainParams*) trainParams)->sortedIdx->step; - sortedn = ((CvMTStumpTrainParams*) trainParams)->sortedIdx->rows; - sortedm = ((CvMTStumpTrainParams*) trainParams)->sortedIdx->cols; - } - - if( trainData == NULL ) - { - assert( ((CvMTStumpTrainParams*) trainParams)->getTrainData != NULL ); - n = ((CvMTStumpTrainParams*) trainParams)->numcomp; - assert( n > 0 ); - } - else - { - assert( CV_MAT_TYPE( trainData->type ) == CV_32FC1 ); - data = trainData->data.ptr; - if( CV_IS_ROW_SAMPLE( flags ) ) - { - cstep = CV_ELEM_SIZE( trainData->type ); - sstep = trainData->step; - assert( m == trainData->rows ); - datan = n = trainData->cols; - } - else - { - sstep = CV_ELEM_SIZE( trainData->type ); - cstep = trainData->step; - assert( m == trainData->cols ); - datan = n = trainData->rows; - } - if( ((CvMTStumpTrainParams*) trainParams)->getTrainData != NULL ) - { - n = ((CvMTStumpTrainParams*) trainParams)->numcomp; - } - } - assert( datan <= n ); - - if( sampleIdx != NULL ) - { - assert( CV_MAT_TYPE( sampleIdx->type ) == CV_32FC1 ); - idxdata = sampleIdx->data.ptr; - idxstep = ( sampleIdx->rows == 1 ) - ? CV_ELEM_SIZE( sampleIdx->type ) : sampleIdx->step; - l = ( sampleIdx->rows == 1 ) ? sampleIdx->cols : sampleIdx->rows; - - if( sorteddata != NULL ) - { - filter = (char*) cvAlloc( sizeof( char ) * m ); - memset( (void*) filter, 0, sizeof( char ) * m ); - for( i = 0; i < l; i++ ) - { - filter[(int) *((float*) (idxdata + i * idxstep))] = (char) 1; - } - } - } - else - { - l = m; - } - - stump = (CvStumpClassifier*) cvAlloc( sizeof( CvStumpClassifier) ); - - /* START */ - memset( (void*) stump, 0, sizeof( CvStumpClassifier ) ); - - portion = ((CvMTStumpTrainParams*)trainParams)->portion; - - if( portion < 1 ) - { - /* auto portion */ - portion = n; - #ifdef _OPENMP - portion /= omp_get_max_threads(); - #endif /* _OPENMP */ - } - - stump->eval = cvEvalStumpClassifier; - stump->tune = NULL; - stump->save = NULL; - stump->release = cvReleaseStumpClassifier; - - stump->lerror = FLT_MAX; - stump->rerror = FLT_MAX; - stump->left = 0.0F; - stump->right = 0.0F; - - compidx = 0; - #ifdef _OPENMP - #pragma omp parallel private(mat, va, lerror, rerror, left, right, threshold, \ - optcompidx, sumw, sumwy, sumwyy, t_compidx, t_n, \ - ti, tj, tk, t_data, t_cstep, t_sstep, matcstep, \ - matsstep, t_idx) - #endif /* _OPENMP */ - { - lerror = FLT_MAX; - rerror = FLT_MAX; - left = 0.0F; - right = 0.0F; - threshold = 0.0F; - optcompidx = 0; - - sumw = FLT_MAX; - sumwy = FLT_MAX; - sumwyy = FLT_MAX; - - t_compidx = 0; - t_n = 0; - - ti = 0; - tj = 0; - tk = 0; - - t_data = NULL; - t_cstep = 0; - t_sstep = 0; - - matcstep = 0; - matsstep = 0; - - t_idx = NULL; - - mat.data.ptr = NULL; - - if( datan < n ) - { - /* prepare matrix for callback */ - if( CV_IS_ROW_SAMPLE( flags ) ) - { - mat = cvMat( m, portion, CV_32FC1, 0 ); - matcstep = CV_ELEM_SIZE( mat.type ); - matsstep = mat.step; - } - else - { - mat = cvMat( portion, m, CV_32FC1, 0 ); - matcstep = mat.step; - matsstep = CV_ELEM_SIZE( mat.type ); - } - mat.data.ptr = (uchar*) cvAlloc( sizeof( float ) * mat.rows * mat.cols ); - } - - if( filter != NULL || sortedn < n ) - { - t_idx = (int*) cvAlloc( sizeof( int ) * m ); - if( sortedn == 0 || filter == NULL ) - { - if( idxdata != NULL ) - { - for( ti = 0; ti < l; ti++ ) - { - t_idx[ti] = (int) *((float*) (idxdata + ti * idxstep)); - } - } - else - { - for( ti = 0; ti < l; ti++ ) - { - t_idx[ti] = ti; - } - } - } - } - - #ifdef _OPENMP - #pragma omp critical(c_compidx) - #endif /* _OPENMP */ - { - t_compidx = compidx; - compidx += portion; - } - while( t_compidx < n ) - { - t_n = portion; - if( t_compidx < datan ) - { - t_n = ( t_n < (datan - t_compidx) ) ? t_n : (datan - t_compidx); - t_data = data; - t_cstep = cstep; - t_sstep = sstep; - } - else - { - t_n = ( t_n < (n - t_compidx) ) ? t_n : (n - t_compidx); - t_cstep = matcstep; - t_sstep = matsstep; - t_data = mat.data.ptr - t_compidx * ((size_t) t_cstep ); - - /* calculate components */ - ((CvMTStumpTrainParams*)trainParams)->getTrainData( &mat, - sampleIdx, compIdx, t_compidx, t_n, - ((CvMTStumpTrainParams*)trainParams)->userdata ); - } - - if( sorteddata != NULL ) - { - if( filter != NULL ) - { - /* have sorted indices and filter */ - switch( sortedtype ) - { - case CV_16SC1: - for( ti = t_compidx; ti < MIN( sortedn, t_compidx + t_n ); ti++ ) - { - tk = 0; - for( tj = 0; tj < sortedm; tj++ ) - { - int curidx = (int) ( *((short*) (sorteddata - + ti * sortedcstep + tj * sortedsstep)) ); - if( filter[curidx] != 0 ) - { - t_idx[tk++] = curidx; - } - } - if( findStumpThreshold_32s[stumperror]( - t_data + ti * t_cstep, t_sstep, - wdata, wstep, ydata, ystep, - (uchar*) t_idx, sizeof( int ), tk, - &lerror, &rerror, - &threshold, &left, &right, - &sumw, &sumwy, &sumwyy ) ) - { - optcompidx = ti; - } - } - break; - case CV_32SC1: - for( ti = t_compidx; ti < MIN( sortedn, t_compidx + t_n ); ti++ ) - { - tk = 0; - for( tj = 0; tj < sortedm; tj++ ) - { - int curidx = (int) ( *((int*) (sorteddata - + ti * sortedcstep + tj * sortedsstep)) ); - if( filter[curidx] != 0 ) - { - t_idx[tk++] = curidx; - } - } - if( findStumpThreshold_32s[stumperror]( - t_data + ti * t_cstep, t_sstep, - wdata, wstep, ydata, ystep, - (uchar*) t_idx, sizeof( int ), tk, - &lerror, &rerror, - &threshold, &left, &right, - &sumw, &sumwy, &sumwyy ) ) - { - optcompidx = ti; - } - } - break; - case CV_32FC1: - for( ti = t_compidx; ti < MIN( sortedn, t_compidx + t_n ); ti++ ) - { - tk = 0; - for( tj = 0; tj < sortedm; tj++ ) - { - int curidx = (int) ( *((float*) (sorteddata - + ti * sortedcstep + tj * sortedsstep)) ); - if( filter[curidx] != 0 ) - { - t_idx[tk++] = curidx; - } - } - if( findStumpThreshold_32s[stumperror]( - t_data + ti * t_cstep, t_sstep, - wdata, wstep, ydata, ystep, - (uchar*) t_idx, sizeof( int ), tk, - &lerror, &rerror, - &threshold, &left, &right, - &sumw, &sumwy, &sumwyy ) ) - { - optcompidx = ti; - } - } - break; - default: - assert( 0 ); - break; - } - } - else - { - /* have sorted indices */ - switch( sortedtype ) - { - case CV_16SC1: - for( ti = t_compidx; ti < MIN( sortedn, t_compidx + t_n ); ti++ ) - { - if( findStumpThreshold_16s[stumperror]( - t_data + ti * t_cstep, t_sstep, - wdata, wstep, ydata, ystep, - sorteddata + ti * sortedcstep, sortedsstep, sortedm, - &lerror, &rerror, - &threshold, &left, &right, - &sumw, &sumwy, &sumwyy ) ) - { - optcompidx = ti; - } - } - break; - case CV_32SC1: - for( ti = t_compidx; ti < MIN( sortedn, t_compidx + t_n ); ti++ ) - { - if( findStumpThreshold_32s[stumperror]( - t_data + ti * t_cstep, t_sstep, - wdata, wstep, ydata, ystep, - sorteddata + ti * sortedcstep, sortedsstep, sortedm, - &lerror, &rerror, - &threshold, &left, &right, - &sumw, &sumwy, &sumwyy ) ) - { - optcompidx = ti; - } - } - break; - case CV_32FC1: - for( ti = t_compidx; ti < MIN( sortedn, t_compidx + t_n ); ti++ ) - { - if( findStumpThreshold_32f[stumperror]( - t_data + ti * t_cstep, t_sstep, - wdata, wstep, ydata, ystep, - sorteddata + ti * sortedcstep, sortedsstep, sortedm, - &lerror, &rerror, - &threshold, &left, &right, - &sumw, &sumwy, &sumwyy ) ) - { - optcompidx = ti; - } - } - break; - default: - assert( 0 ); - break; - } - } - } - - ti = MAX( t_compidx, MIN( sortedn, t_compidx + t_n ) ); - for( ; ti < t_compidx + t_n; ti++ ) - { - va.data = t_data + ti * t_cstep; - va.step = t_sstep; - std::sort(t_idx, t_idx + l, LessThanValArray(&va)); - if( findStumpThreshold_32s[stumperror]( - t_data + ti * t_cstep, t_sstep, - wdata, wstep, ydata, ystep, - (uchar*)t_idx, sizeof( int ), l, - &lerror, &rerror, - &threshold, &left, &right, - &sumw, &sumwy, &sumwyy ) ) - { - optcompidx = ti; - } - } - #ifdef _OPENMP - #pragma omp critical(c_compidx) - #endif /* _OPENMP */ - { - t_compidx = compidx; - compidx += portion; - } - } /* while have training data */ - - /* get the best classifier */ - #ifdef _OPENMP - #pragma omp critical(c_beststump) - #endif /* _OPENMP */ - { - if( lerror + rerror < stump->lerror + stump->rerror ) - { - stump->lerror = lerror; - stump->rerror = rerror; - stump->compidx = optcompidx; - stump->threshold = threshold; - stump->left = left; - stump->right = right; - } - } - - /* free allocated memory */ - if( mat.data.ptr != NULL ) - { - cvFree( &(mat.data.ptr) ); - } - if( t_idx != NULL ) - { - cvFree( &t_idx ); - } - } /* end of parallel region */ - - /* END */ - - /* free allocated memory */ - if( filter != NULL ) - { - cvFree( &filter ); - } - - if( ((CvMTStumpTrainParams*) trainParams)->type == CV_CLASSIFICATION_CLASS ) - { - stump->left = 2.0F * (stump->left >= 0.5F) - 1.0F; - stump->right = 2.0F * (stump->right >= 0.5F) - 1.0F; - } - - return (CvClassifier*) stump; -} - -CV_BOOST_IMPL -float cvEvalCARTClassifier( CvClassifier* classifier, CvMat* sample ) -{ - CV_FUNCNAME( "cvEvalCARTClassifier" ); - - int idx = 0; - - __BEGIN__; - - - CV_ASSERT( classifier != NULL ); - CV_ASSERT( sample != NULL ); - CV_ASSERT( CV_MAT_TYPE( sample->type ) == CV_32FC1 ); - CV_ASSERT( sample->rows == 1 || sample->cols == 1 ); - - if( sample->rows == 1 ) - { - do - { - if( (CV_MAT_ELEM( (*sample), float, 0, - ((CvCARTClassifier*) classifier)->compidx[idx] )) < - ((CvCARTClassifier*) classifier)->threshold[idx] ) - { - idx = ((CvCARTClassifier*) classifier)->left[idx]; - } - else - { - idx = ((CvCARTClassifier*) classifier)->right[idx]; - } - } while( idx > 0 ); - } - else - { - do - { - if( (CV_MAT_ELEM( (*sample), float, - ((CvCARTClassifier*) classifier)->compidx[idx], 0 )) < - ((CvCARTClassifier*) classifier)->threshold[idx] ) - { - idx = ((CvCARTClassifier*) classifier)->left[idx]; - } - else - { - idx = ((CvCARTClassifier*) classifier)->right[idx]; - } - } while( idx > 0 ); - } - - __END__; - - return ((CvCARTClassifier*) classifier)->val[-idx]; -} - -static -float cvEvalCARTClassifierIdx( CvClassifier* classifier, CvMat* sample ) -{ - CV_FUNCNAME( "cvEvalCARTClassifierIdx" ); - - int idx = 0; - - __BEGIN__; - - - CV_ASSERT( classifier != NULL ); - CV_ASSERT( sample != NULL ); - CV_ASSERT( CV_MAT_TYPE( sample->type ) == CV_32FC1 ); - CV_ASSERT( sample->rows == 1 || sample->cols == 1 ); - - if( sample->rows == 1 ) - { - do - { - if( (CV_MAT_ELEM( (*sample), float, 0, - ((CvCARTClassifier*) classifier)->compidx[idx] )) < - ((CvCARTClassifier*) classifier)->threshold[idx] ) - { - idx = ((CvCARTClassifier*) classifier)->left[idx]; - } - else - { - idx = ((CvCARTClassifier*) classifier)->right[idx]; - } - } while( idx > 0 ); - } - else - { - do - { - if( (CV_MAT_ELEM( (*sample), float, - ((CvCARTClassifier*) classifier)->compidx[idx], 0 )) < - ((CvCARTClassifier*) classifier)->threshold[idx] ) - { - idx = ((CvCARTClassifier*) classifier)->left[idx]; - } - else - { - idx = ((CvCARTClassifier*) classifier)->right[idx]; - } - } while( idx > 0 ); - } - - __END__; - - return (float) (-idx); -} - -CV_BOOST_IMPL -void cvReleaseCARTClassifier( CvClassifier** classifier ) -{ - cvFree( classifier ); - *classifier = NULL; -} - -static void CV_CDECL icvDefaultSplitIdx_R( int compidx, float threshold, - CvMat* idx, CvMat** left, CvMat** right, - void* userdata ) -{ - CvMat* trainData = (CvMat*) userdata; - int i = 0; - - *left = cvCreateMat( 1, trainData->rows, CV_32FC1 ); - *right = cvCreateMat( 1, trainData->rows, CV_32FC1 ); - (*left)->cols = (*right)->cols = 0; - if( idx == NULL ) - { - for( i = 0; i < trainData->rows; i++ ) - { - if( CV_MAT_ELEM( *trainData, float, i, compidx ) < threshold ) - { - (*left)->data.fl[(*left)->cols++] = (float) i; - } - else - { - (*right)->data.fl[(*right)->cols++] = (float) i; - } - } - } - else - { - uchar* idxdata; - int idxnum; - int idxstep; - int index; - - idxdata = idx->data.ptr; - idxnum = (idx->rows == 1) ? idx->cols : idx->rows; - idxstep = (idx->rows == 1) ? CV_ELEM_SIZE( idx->type ) : idx->step; - for( i = 0; i < idxnum; i++ ) - { - index = (int) *((float*) (idxdata + i * idxstep)); - if( CV_MAT_ELEM( *trainData, float, index, compidx ) < threshold ) - { - (*left)->data.fl[(*left)->cols++] = (float) index; - } - else - { - (*right)->data.fl[(*right)->cols++] = (float) index; - } - } - } -} - -static void CV_CDECL icvDefaultSplitIdx_C( int compidx, float threshold, - CvMat* idx, CvMat** left, CvMat** right, - void* userdata ) -{ - CvMat* trainData = (CvMat*) userdata; - int i = 0; - - *left = cvCreateMat( 1, trainData->cols, CV_32FC1 ); - *right = cvCreateMat( 1, trainData->cols, CV_32FC1 ); - (*left)->cols = (*right)->cols = 0; - if( idx == NULL ) - { - for( i = 0; i < trainData->cols; i++ ) - { - if( CV_MAT_ELEM( *trainData, float, compidx, i ) < threshold ) - { - (*left)->data.fl[(*left)->cols++] = (float) i; - } - else - { - (*right)->data.fl[(*right)->cols++] = (float) i; - } - } - } - else - { - uchar* idxdata; - int idxnum; - int idxstep; - int index; - - idxdata = idx->data.ptr; - idxnum = (idx->rows == 1) ? idx->cols : idx->rows; - idxstep = (idx->rows == 1) ? CV_ELEM_SIZE( idx->type ) : idx->step; - for( i = 0; i < idxnum; i++ ) - { - index = (int) *((float*) (idxdata + i * idxstep)); - if( CV_MAT_ELEM( *trainData, float, compidx, index ) < threshold ) - { - (*left)->data.fl[(*left)->cols++] = (float) index; - } - else - { - (*right)->data.fl[(*right)->cols++] = (float) index; - } - } - } -} - -/* internal structure used in CART creation */ -typedef struct CvCARTNode -{ - CvMat* sampleIdx; - CvStumpClassifier* stump; - int parent; - int leftflag; - float errdrop; -} CvCARTNode; - -CV_BOOST_IMPL -CvClassifier* cvCreateCARTClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* typeMask, - CvMat* missedMeasurementsMask, - CvMat* compIdx, - CvMat* sampleIdx, - CvMat* weights, - CvClassifierTrainParams* trainParams ) -{ - CvCARTClassifier* cart = NULL; - size_t datasize = 0; - int count = 0; - int i = 0; - int j = 0; - - CvCARTNode* intnode = NULL; - CvCARTNode* list = NULL; - int listcount = 0; - CvMat* lidx = NULL; - CvMat* ridx = NULL; - - float maxerrdrop = 0.0F; - int idx = 0; - - void (*splitIdxCallback)( int compidx, float threshold, - CvMat* idx, CvMat** left, CvMat** right, - void* userdata ); - void* userdata; - - count = ((CvCARTTrainParams*) trainParams)->count; - - assert( count > 0 ); - - datasize = sizeof( *cart ) + (sizeof( float ) + 3 * sizeof( int )) * count + - sizeof( float ) * (count + 1); - - cart = (CvCARTClassifier*) cvAlloc( datasize ); - memset( cart, 0, datasize ); - - cart->count = count; - - cart->eval = cvEvalCARTClassifier; - cart->save = NULL; - cart->release = cvReleaseCARTClassifier; - - cart->compidx = (int*) (cart + 1); - cart->threshold = (float*) (cart->compidx + count); - cart->left = (int*) (cart->threshold + count); - cart->right = (int*) (cart->left + count); - cart->val = (float*) (cart->right + count); - - datasize = sizeof( CvCARTNode ) * (count + count); - intnode = (CvCARTNode*) cvAlloc( datasize ); - memset( intnode, 0, datasize ); - list = (CvCARTNode*) (intnode + count); - - splitIdxCallback = ((CvCARTTrainParams*) trainParams)->splitIdx; - userdata = ((CvCARTTrainParams*) trainParams)->userdata; - if( splitIdxCallback == NULL ) - { - splitIdxCallback = ( CV_IS_ROW_SAMPLE( flags ) ) - ? icvDefaultSplitIdx_R : icvDefaultSplitIdx_C; - userdata = trainData; - } - - /* create root of the tree */ - intnode[0].sampleIdx = sampleIdx; - intnode[0].stump = (CvStumpClassifier*) - ((CvCARTTrainParams*) trainParams)->stumpConstructor( trainData, flags, - trainClasses, typeMask, missedMeasurementsMask, compIdx, sampleIdx, weights, - ((CvCARTTrainParams*) trainParams)->stumpTrainParams ); - cart->left[0] = cart->right[0] = 0; - - /* build tree */ - listcount = 0; - for( i = 1; i < count; i++ ) - { - /* split last added node */ - splitIdxCallback( intnode[i-1].stump->compidx, intnode[i-1].stump->threshold, - intnode[i-1].sampleIdx, &lidx, &ridx, userdata ); - - if( intnode[i-1].stump->lerror != 0.0F ) - { - list[listcount].sampleIdx = lidx; - list[listcount].stump = (CvStumpClassifier*) - ((CvCARTTrainParams*) trainParams)->stumpConstructor( trainData, flags, - trainClasses, typeMask, missedMeasurementsMask, compIdx, - list[listcount].sampleIdx, - weights, ((CvCARTTrainParams*) trainParams)->stumpTrainParams ); - list[listcount].errdrop = intnode[i-1].stump->lerror - - (list[listcount].stump->lerror + list[listcount].stump->rerror); - list[listcount].leftflag = 1; - list[listcount].parent = i-1; - listcount++; - } - else - { - cvReleaseMat( &lidx ); - } - if( intnode[i-1].stump->rerror != 0.0F ) - { - list[listcount].sampleIdx = ridx; - list[listcount].stump = (CvStumpClassifier*) - ((CvCARTTrainParams*) trainParams)->stumpConstructor( trainData, flags, - trainClasses, typeMask, missedMeasurementsMask, compIdx, - list[listcount].sampleIdx, - weights, ((CvCARTTrainParams*) trainParams)->stumpTrainParams ); - list[listcount].errdrop = intnode[i-1].stump->rerror - - (list[listcount].stump->lerror + list[listcount].stump->rerror); - list[listcount].leftflag = 0; - list[listcount].parent = i-1; - listcount++; - } - else - { - cvReleaseMat( &ridx ); - } - - if( listcount == 0 ) break; - - /* find the best node to be added to the tree */ - idx = 0; - maxerrdrop = list[idx].errdrop; - for( j = 1; j < listcount; j++ ) - { - if( list[j].errdrop > maxerrdrop ) - { - idx = j; - maxerrdrop = list[j].errdrop; - } - } - intnode[i] = list[idx]; - if( list[idx].leftflag ) - { - cart->left[list[idx].parent] = i; - } - else - { - cart->right[list[idx].parent] = i; - } - if( idx != (listcount - 1) ) - { - list[idx] = list[listcount - 1]; - } - listcount--; - } - - /* fill fields */ - j = 0; - cart->count = 0; - for( i = 0; i < count && (intnode[i].stump != NULL); i++ ) - { - cart->count++; - cart->compidx[i] = intnode[i].stump->compidx; - cart->threshold[i] = intnode[i].stump->threshold; - - /* leaves */ - if( cart->left[i] <= 0 ) - { - cart->left[i] = -j; - cart->val[j] = intnode[i].stump->left; - j++; - } - if( cart->right[i] <= 0 ) - { - cart->right[i] = -j; - cart->val[j] = intnode[i].stump->right; - j++; - } - } - - /* CLEAN UP */ - for( i = 0; i < count && (intnode[i].stump != NULL); i++ ) - { - intnode[i].stump->release( (CvClassifier**) &(intnode[i].stump) ); - if( i != 0 ) - { - cvReleaseMat( &(intnode[i].sampleIdx) ); - } - } - for( i = 0; i < listcount; i++ ) - { - list[i].stump->release( (CvClassifier**) &(list[i].stump) ); - cvReleaseMat( &(list[i].sampleIdx) ); - } - - cvFree( &intnode ); - - return (CvClassifier*) cart; -} - -/****************************************************************************************\ -* Boosting * -\****************************************************************************************/ - -typedef struct CvBoostTrainer -{ - CvBoostType type; - int count; /* (idx) ? number_of_indices : number_of_samples */ - int* idx; - float* F; -} CvBoostTrainer; - -/* - * cvBoostStartTraining, cvBoostNextWeakClassifier, cvBoostEndTraining - * - * These functions perform training of 2-class boosting classifier - * using ANY appropriate weak classifier - */ - -static -CvBoostTrainer* icvBoostStartTraining( CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* /*weights*/, - CvMat* sampleIdx, - CvBoostType type ) -{ - uchar* ydata; - int ystep; - int m; - uchar* traindata; - int trainstep; - int trainnum; - int i; - int idx; - - size_t datasize; - CvBoostTrainer* ptr; - - int idxnum; - int idxstep; - uchar* idxdata; - - assert( trainClasses != NULL ); - assert( CV_MAT_TYPE( trainClasses->type ) == CV_32FC1 ); - assert( weakTrainVals != NULL ); - assert( CV_MAT_TYPE( weakTrainVals->type ) == CV_32FC1 ); - - CV_MAT2VEC( *trainClasses, ydata, ystep, m ); - CV_MAT2VEC( *weakTrainVals, traindata, trainstep, trainnum ); - - CV_Assert( m == trainnum ); - - idxnum = 0; - idxstep = 0; - idxdata = NULL; - if( sampleIdx ) - { - CV_MAT2VEC( *sampleIdx, idxdata, idxstep, idxnum ); - } - - datasize = sizeof( *ptr ) + sizeof( *ptr->idx ) * idxnum; - ptr = (CvBoostTrainer*) cvAlloc( datasize ); - memset( ptr, 0, datasize ); - ptr->F = NULL; - ptr->idx = NULL; - - ptr->count = m; - ptr->type = type; - - if( idxnum > 0 ) - { - CvScalar s; - - ptr->idx = (int*) (ptr + 1); - ptr->count = idxnum; - for( i = 0; i < ptr->count; i++ ) - { - cvRawDataToScalar( idxdata + i*idxstep, CV_MAT_TYPE( sampleIdx->type ), &s ); - ptr->idx[i] = (int) s.val[0]; - } - } - for( i = 0; i < ptr->count; i++ ) - { - idx = (ptr->idx) ? ptr->idx[i] : i; - - *((float*) (traindata + idx * trainstep)) = - 2.0F * (*((float*) (ydata + idx * ystep))) - 1.0F; - } - - return ptr; -} - -/* - * - * Discrete AdaBoost functions - * - */ -static -float icvBoostNextWeakClassifierDAB( CvMat* weakEvalVals, - CvMat* trainClasses, - CvMat* /*weakTrainVals*/, - CvMat* weights, - CvBoostTrainer* trainer ) -{ - uchar* evaldata; - int evalstep; - int m; - uchar* ydata; - int ystep; - int ynum; - uchar* wdata; - int wstep; - int wnum; - - float sumw; - float err; - int i; - int idx; - - CV_Assert( weakEvalVals != NULL ); - CV_Assert( CV_MAT_TYPE( weakEvalVals->type ) == CV_32FC1 ); - CV_Assert( trainClasses != NULL ); - CV_Assert( CV_MAT_TYPE( trainClasses->type ) == CV_32FC1 ); - CV_Assert( weights != NULL ); - CV_Assert( CV_MAT_TYPE( weights ->type ) == CV_32FC1 ); - - CV_MAT2VEC( *weakEvalVals, evaldata, evalstep, m ); - CV_MAT2VEC( *trainClasses, ydata, ystep, ynum ); - CV_MAT2VEC( *weights, wdata, wstep, wnum ); - - CV_Assert( m == ynum ); - CV_Assert( m == wnum ); - - sumw = 0.0F; - err = 0.0F; - for( i = 0; i < trainer->count; i++ ) - { - idx = (trainer->idx) ? trainer->idx[i] : i; - - sumw += *((float*) (wdata + idx*wstep)); - err += (*((float*) (wdata + idx*wstep))) * - ( (*((float*) (evaldata + idx*evalstep))) != - 2.0F * (*((float*) (ydata + idx*ystep))) - 1.0F ); - } - err /= sumw; - err = -cvLogRatio( err ); - - for( i = 0; i < trainer->count; i++ ) - { - idx = (trainer->idx) ? trainer->idx[i] : i; - - *((float*) (wdata + idx*wstep)) *= expf( err * - ((*((float*) (evaldata + idx*evalstep))) != - 2.0F * (*((float*) (ydata + idx*ystep))) - 1.0F) ); - sumw += *((float*) (wdata + idx*wstep)); - } - for( i = 0; i < trainer->count; i++ ) - { - idx = (trainer->idx) ? trainer->idx[i] : i; - - *((float*) (wdata + idx * wstep)) /= sumw; - } - - return err; -} - -/* - * - * Real AdaBoost functions - * - */ -static -float icvBoostNextWeakClassifierRAB( CvMat* weakEvalVals, - CvMat* trainClasses, - CvMat* /*weakTrainVals*/, - CvMat* weights, - CvBoostTrainer* trainer ) -{ - uchar* evaldata; - int evalstep; - int m; - uchar* ydata; - int ystep; - int ynum; - uchar* wdata; - int wstep; - int wnum; - - float sumw; - int i, idx; - - CV_Assert( weakEvalVals != NULL ); - CV_Assert( CV_MAT_TYPE( weakEvalVals->type ) == CV_32FC1 ); - CV_Assert( trainClasses != NULL ); - CV_Assert( CV_MAT_TYPE( trainClasses->type ) == CV_32FC1 ); - CV_Assert( weights != NULL ); - CV_Assert( CV_MAT_TYPE( weights ->type ) == CV_32FC1 ); - - CV_MAT2VEC( *weakEvalVals, evaldata, evalstep, m ); - CV_MAT2VEC( *trainClasses, ydata, ystep, ynum ); - CV_MAT2VEC( *weights, wdata, wstep, wnum ); - - CV_Assert( m == ynum ); - CV_Assert( m == wnum ); - - - sumw = 0.0F; - for( i = 0; i < trainer->count; i++ ) - { - idx = (trainer->idx) ? trainer->idx[i] : i; - - *((float*) (wdata + idx*wstep)) *= expf( (-(*((float*) (ydata + idx*ystep))) + 0.5F) - * cvLogRatio( *((float*) (evaldata + idx*evalstep)) ) ); - sumw += *((float*) (wdata + idx*wstep)); - } - for( i = 0; i < trainer->count; i++ ) - { - idx = (trainer->idx) ? trainer->idx[i] : i; - - *((float*) (wdata + idx*wstep)) /= sumw; - } - - return 1.0F; -} - -/* - * - * LogitBoost functions - * - */ -#define CV_LB_PROB_THRESH 0.01F -#define CV_LB_WEIGHT_THRESHOLD 0.0001F - -static -void icvResponsesAndWeightsLB( int num, uchar* wdata, int wstep, - uchar* ydata, int ystep, - uchar* fdata, int fstep, - uchar* traindata, int trainstep, - int* indices ) -{ - int i, idx; - float p; - - for( i = 0; i < num; i++ ) - { - idx = (indices) ? indices[i] : i; - - p = 1.0F / (1.0F + expf( -(*((float*) (fdata + idx*fstep)))) ); - *((float*) (wdata + idx*wstep)) = MAX( p * (1.0F - p), CV_LB_WEIGHT_THRESHOLD ); - if( *((float*) (ydata + idx*ystep)) == 1.0F ) - { - *((float*) (traindata + idx*trainstep)) = - 1.0F / (MAX( p, CV_LB_PROB_THRESH )); - } - else - { - *((float*) (traindata + idx*trainstep)) = - -1.0F / (MAX( 1.0F - p, CV_LB_PROB_THRESH )); - } - } -} - -static -CvBoostTrainer* icvBoostStartTrainingLB( CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* weights, - CvMat* sampleIdx, - CvBoostType type ) -{ - size_t datasize; - CvBoostTrainer* ptr; - - uchar* ydata; - int ystep; - int m; - uchar* traindata; - int trainstep; - int trainnum; - uchar* wdata; - int wstep; - int wnum; - int i; - - int idxnum; - int idxstep; - uchar* idxdata; - - assert( trainClasses != NULL ); - assert( CV_MAT_TYPE( trainClasses->type ) == CV_32FC1 ); - assert( weakTrainVals != NULL ); - assert( CV_MAT_TYPE( weakTrainVals->type ) == CV_32FC1 ); - assert( weights != NULL ); - assert( CV_MAT_TYPE( weights->type ) == CV_32FC1 ); - - CV_MAT2VEC( *trainClasses, ydata, ystep, m ); - CV_MAT2VEC( *weakTrainVals, traindata, trainstep, trainnum ); - CV_MAT2VEC( *weights, wdata, wstep, wnum ); - - CV_Assert( m == trainnum ); - CV_Assert( m == wnum ); - - - idxnum = 0; - idxstep = 0; - idxdata = NULL; - if( sampleIdx ) - { - CV_MAT2VEC( *sampleIdx, idxdata, idxstep, idxnum ); - } - - datasize = sizeof( *ptr ) + sizeof( *ptr->F ) * m + sizeof( *ptr->idx ) * idxnum; - ptr = (CvBoostTrainer*) cvAlloc( datasize ); - memset( ptr, 0, datasize ); - ptr->F = (float*) (ptr + 1); - ptr->idx = NULL; - - ptr->count = m; - ptr->type = type; - - if( idxnum > 0 ) - { - CvScalar s; - - ptr->idx = (int*) (ptr->F + m); - ptr->count = idxnum; - for( i = 0; i < ptr->count; i++ ) - { - cvRawDataToScalar( idxdata + i*idxstep, CV_MAT_TYPE( sampleIdx->type ), &s ); - ptr->idx[i] = (int) s.val[0]; - } - } - - for( i = 0; i < m; i++ ) - { - ptr->F[i] = 0.0F; - } - - icvResponsesAndWeightsLB( ptr->count, wdata, wstep, ydata, ystep, - (uchar*) ptr->F, sizeof( *ptr->F ), - traindata, trainstep, ptr->idx ); - - return ptr; -} - -static -float icvBoostNextWeakClassifierLB( CvMat* weakEvalVals, - CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* weights, - CvBoostTrainer* trainer ) -{ - uchar* evaldata; - int evalstep; - int m; - uchar* ydata; - int ystep; - int ynum; - uchar* traindata; - int trainstep; - int trainnum; - uchar* wdata; - int wstep; - int wnum; - int i, idx; - - assert( weakEvalVals != NULL ); - assert( CV_MAT_TYPE( weakEvalVals->type ) == CV_32FC1 ); - assert( trainClasses != NULL ); - assert( CV_MAT_TYPE( trainClasses->type ) == CV_32FC1 ); - assert( weakTrainVals != NULL ); - assert( CV_MAT_TYPE( weakTrainVals->type ) == CV_32FC1 ); - assert( weights != NULL ); - assert( CV_MAT_TYPE( weights ->type ) == CV_32FC1 ); - - CV_MAT2VEC( *weakEvalVals, evaldata, evalstep, m ); - CV_MAT2VEC( *trainClasses, ydata, ystep, ynum ); - CV_MAT2VEC( *weakTrainVals, traindata, trainstep, trainnum ); - CV_MAT2VEC( *weights, wdata, wstep, wnum ); - - CV_Assert( m == ynum ); - CV_Assert( m == wnum ); - CV_Assert( m == trainnum ); - //assert( m == trainer->count ); - - for( i = 0; i < trainer->count; i++ ) - { - idx = (trainer->idx) ? trainer->idx[i] : i; - - trainer->F[idx] += *((float*) (evaldata + idx * evalstep)); - } - - icvResponsesAndWeightsLB( trainer->count, wdata, wstep, ydata, ystep, - (uchar*) trainer->F, sizeof( *trainer->F ), - traindata, trainstep, trainer->idx ); - - return 1.0F; -} - -/* - * - * Gentle AdaBoost - * - */ -static -float icvBoostNextWeakClassifierGAB( CvMat* weakEvalVals, - CvMat* trainClasses, - CvMat* /*weakTrainVals*/, - CvMat* weights, - CvBoostTrainer* trainer ) -{ - uchar* evaldata; - int evalstep; - int m; - uchar* ydata; - int ystep; - int ynum; - uchar* wdata; - int wstep; - int wnum; - - int i, idx; - float sumw; - - CV_Assert( weakEvalVals != NULL ); - CV_Assert( CV_MAT_TYPE( weakEvalVals->type ) == CV_32FC1 ); - CV_Assert( trainClasses != NULL ); - CV_Assert( CV_MAT_TYPE( trainClasses->type ) == CV_32FC1 ); - CV_Assert( weights != NULL ); - CV_Assert( CV_MAT_TYPE( weights->type ) == CV_32FC1 ); - - CV_MAT2VEC( *weakEvalVals, evaldata, evalstep, m ); - CV_MAT2VEC( *trainClasses, ydata, ystep, ynum ); - CV_MAT2VEC( *weights, wdata, wstep, wnum ); - - CV_Assert( m == ynum ); - CV_Assert( m == wnum ); - - sumw = 0.0F; - for( i = 0; i < trainer->count; i++ ) - { - idx = (trainer->idx) ? trainer->idx[i] : i; - - *((float*) (wdata + idx*wstep)) *= - expf( -(*((float*) (evaldata + idx*evalstep))) - * ( 2.0F * (*((float*) (ydata + idx*ystep))) - 1.0F ) ); - sumw += *((float*) (wdata + idx*wstep)); - } - - for( i = 0; i < trainer->count; i++ ) - { - idx = (trainer->idx) ? trainer->idx[i] : i; - - *((float*) (wdata + idx*wstep)) /= sumw; - } - - return 1.0F; -} - -typedef CvBoostTrainer* (*CvBoostStartTraining)( CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* weights, - CvMat* sampleIdx, - CvBoostType type ); - -typedef float (*CvBoostNextWeakClassifier)( CvMat* weakEvalVals, - CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* weights, - CvBoostTrainer* data ); - -CvBoostStartTraining startTraining[4] = { - icvBoostStartTraining, - icvBoostStartTraining, - icvBoostStartTrainingLB, - icvBoostStartTraining - }; - -CvBoostNextWeakClassifier nextWeakClassifier[4] = { - icvBoostNextWeakClassifierDAB, - icvBoostNextWeakClassifierRAB, - icvBoostNextWeakClassifierLB, - icvBoostNextWeakClassifierGAB - }; - -/* - * - * Dispatchers - * - */ -CV_BOOST_IMPL -CvBoostTrainer* cvBoostStartTraining( CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* weights, - CvMat* sampleIdx, - CvBoostType type ) -{ - return startTraining[type]( trainClasses, weakTrainVals, weights, sampleIdx, type ); -} - -CV_BOOST_IMPL -void cvBoostEndTraining( CvBoostTrainer** trainer ) -{ - cvFree( trainer ); - *trainer = NULL; -} - -CV_BOOST_IMPL -float cvBoostNextWeakClassifier( CvMat* weakEvalVals, - CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* weights, - CvBoostTrainer* trainer ) -{ - return nextWeakClassifier[trainer->type]( weakEvalVals, trainClasses, - weakTrainVals, weights, trainer ); -} - -/****************************************************************************************\ -* Boosted tree models * -\****************************************************************************************/ - -typedef struct CvBtTrainer -{ - /* {{ external */ - CvMat* trainData; - int flags; - - CvMat* trainClasses; - int m; - uchar* ydata; - int ystep; - - CvMat* sampleIdx; - int numsamples; - - float param[2]; - CvBoostType type; - int numclasses; - /* }} external */ - - CvMTStumpTrainParams stumpParams; - CvCARTTrainParams cartParams; - - float* f; /* F_(m-1) */ - CvMat* y; /* yhat */ - CvMat* weights; - CvBoostTrainer* boosttrainer; -} CvBtTrainer; - -/* - * cvBtStart, cvBtNext, cvBtEnd - * - * These functions perform iterative training of - * 2-class (CV_DABCLASS - CV_GABCLASS, CV_L2CLASS), K-class (CV_LKCLASS) classifier - * or fit regression model (CV_LSREG, CV_LADREG, CV_MREG) - * using decision tree as a weak classifier. - */ - -typedef void (*CvZeroApproxFunc)( float* approx, CvBtTrainer* trainer ); - -/* Mean zero approximation */ -static void icvZeroApproxMean( float* approx, CvBtTrainer* trainer ) -{ - int i; - int idx; - - approx[0] = 0.0F; - for( i = 0; i < trainer->numsamples; i++ ) - { - idx = icvGetIdxAt( trainer->sampleIdx, i ); - approx[0] += *((float*) (trainer->ydata + idx * trainer->ystep)); - } - approx[0] /= (float) trainer->numsamples; -} - -/* - * Median zero approximation - */ -static void icvZeroApproxMed( float* approx, CvBtTrainer* trainer ) -{ - int i; - int idx; - - for( i = 0; i < trainer->numsamples; i++ ) - { - idx = icvGetIdxAt( trainer->sampleIdx, i ); - trainer->f[i] = *((float*) (trainer->ydata + idx * trainer->ystep)); - } - - std::sort(trainer->f, trainer->f + trainer->numsamples); - approx[0] = trainer->f[trainer->numsamples / 2]; -} - -/* - * 0.5 * log( mean(y) / (1 - mean(y)) ) where y in {0, 1} - */ -static void icvZeroApproxLog( float* approx, CvBtTrainer* trainer ) -{ - float y_mean; - - icvZeroApproxMean( &y_mean, trainer ); - approx[0] = 0.5F * cvLogRatio( y_mean ); -} - -/* - * 0 zero approximation - */ -static void icvZeroApprox0( float* approx, CvBtTrainer* trainer ) -{ - int i; - - for( i = 0; i < trainer->numclasses; i++ ) - { - approx[i] = 0.0F; - } -} - -static CvZeroApproxFunc icvZeroApproxFunc[] = -{ - icvZeroApprox0, /* CV_DABCLASS */ - icvZeroApprox0, /* CV_RABCLASS */ - icvZeroApprox0, /* CV_LBCLASS */ - icvZeroApprox0, /* CV_GABCLASS */ - icvZeroApproxLog, /* CV_L2CLASS */ - icvZeroApprox0, /* CV_LKCLASS */ - icvZeroApproxMean, /* CV_LSREG */ - icvZeroApproxMed, /* CV_LADREG */ - icvZeroApproxMed, /* CV_MREG */ -}; - -CV_BOOST_IMPL -void cvBtNext( CvCARTClassifier** trees, CvBtTrainer* trainer ); - -static -CvBtTrainer* cvBtStart( CvCARTClassifier** trees, - CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* sampleIdx, - int numsplits, - CvBoostType type, - int numclasses, - float* param ) -{ - CvBtTrainer* ptr = 0; - - CV_FUNCNAME( "cvBtStart" ); - - __BEGIN__; - - size_t data_size; - float* zero_approx; - int m; - int i, j; - - if( trees == NULL ) - { - CV_ERROR( CV_StsNullPtr, "Invalid trees parameter" ); - } - - if( type < CV_DABCLASS || type > CV_MREG ) - { - CV_ERROR( CV_StsUnsupportedFormat, "Unsupported type parameter" ); - } - if( type == CV_LKCLASS ) - { - CV_ASSERT( numclasses >= 2 ); - } - else - { - numclasses = 1; - } - - m = MAX( trainClasses->rows, trainClasses->cols ); - ptr = NULL; - data_size = sizeof( *ptr ); - if( type > CV_GABCLASS ) - { - data_size += m * numclasses * sizeof( *(ptr->f) ); - } - CV_CALL( ptr = (CvBtTrainer*) cvAlloc( data_size ) ); - memset( ptr, 0, data_size ); - ptr->f = (float*) (ptr + 1); - - ptr->trainData = trainData; - ptr->flags = flags; - ptr->trainClasses = trainClasses; - CV_MAT2VEC( *trainClasses, ptr->ydata, ptr->ystep, ptr->m ); - - memset( &(ptr->cartParams), 0, sizeof( ptr->cartParams ) ); - memset( &(ptr->stumpParams), 0, sizeof( ptr->stumpParams ) ); - - switch( type ) - { - case CV_DABCLASS: - ptr->stumpParams.error = CV_MISCLASSIFICATION; - ptr->stumpParams.type = CV_CLASSIFICATION_CLASS; - break; - case CV_RABCLASS: - ptr->stumpParams.error = CV_GINI; - ptr->stumpParams.type = CV_CLASSIFICATION; - break; - default: - ptr->stumpParams.error = CV_SQUARE; - ptr->stumpParams.type = CV_REGRESSION; - } - ptr->cartParams.count = numsplits; - ptr->cartParams.stumpTrainParams = (CvClassifierTrainParams*) &(ptr->stumpParams); - ptr->cartParams.stumpConstructor = cvCreateMTStumpClassifier; - - ptr->param[0] = param[0]; - ptr->param[1] = param[1]; - ptr->type = type; - ptr->numclasses = numclasses; - - CV_CALL( ptr->y = cvCreateMat( 1, m, CV_32FC1 ) ); - ptr->sampleIdx = sampleIdx; - ptr->numsamples = ( sampleIdx == NULL ) ? ptr->m - : MAX( sampleIdx->rows, sampleIdx->cols ); - - ptr->weights = cvCreateMat( 1, m, CV_32FC1 ); - cvSet( ptr->weights, cvScalar( 1.0 ) ); - - if( type <= CV_GABCLASS ) - { - ptr->boosttrainer = cvBoostStartTraining( ptr->trainClasses, ptr->y, - ptr->weights, NULL, type ); - - CV_CALL( cvBtNext( trees, ptr ) ); - } - else - { - data_size = sizeof( *zero_approx ) * numclasses; - CV_CALL( zero_approx = (float*) cvAlloc( data_size ) ); - icvZeroApproxFunc[type]( zero_approx, ptr ); - for( i = 0; i < m; i++ ) - { - for( j = 0; j < numclasses; j++ ) - { - ptr->f[i * numclasses + j] = zero_approx[j]; - } - } - - CV_CALL( cvBtNext( trees, ptr ) ); - - for( i = 0; i < numclasses; i++ ) - { - for( j = 0; j <= trees[i]->count; j++ ) - { - trees[i]->val[j] += zero_approx[i]; - } - } - CV_CALL( cvFree( &zero_approx ) ); - } - - __END__; - - return ptr; -} - -static void icvBtNext_LSREG( CvCARTClassifier** trees, CvBtTrainer* trainer ) -{ - int i; - - /* yhat_i = y_i - F_(m-1)(x_i) */ - for( i = 0; i < trainer->m; i++ ) - { - trainer->y->data.fl[i] = - *((float*) (trainer->ydata + i * trainer->ystep)) - trainer->f[i]; - } - - trees[0] = (CvCARTClassifier*) cvCreateCARTClassifier( trainer->trainData, - trainer->flags, - trainer->y, NULL, NULL, NULL, trainer->sampleIdx, trainer->weights, - (CvClassifierTrainParams*) &trainer->cartParams ); -} - - -static void icvBtNext_LADREG( CvCARTClassifier** trees, CvBtTrainer* trainer ) -{ - CvCARTClassifier* ptr; - int i, j; - CvMat sample; - int sample_step; - uchar* sample_data; - int index; - - int data_size; - int* idx; - float* resp; - int respnum; - float val; - - data_size = trainer->m * sizeof( *idx ); - idx = (int*) cvAlloc( data_size ); - data_size = trainer->m * sizeof( *resp ); - resp = (float*) cvAlloc( data_size ); - - /* yhat_i = sign(y_i - F_(m-1)(x_i)) */ - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - trainer->y->data.fl[index] = (float) - CV_SIGN( *((float*) (trainer->ydata + index * trainer->ystep)) - - trainer->f[index] ); - } - - ptr = (CvCARTClassifier*) cvCreateCARTClassifier( trainer->trainData, trainer->flags, - trainer->y, NULL, NULL, NULL, trainer->sampleIdx, trainer->weights, - (CvClassifierTrainParams*) &trainer->cartParams ); - - CV_GET_SAMPLE( *trainer->trainData, trainer->flags, 0, sample ); - CV_GET_SAMPLE_STEP( *trainer->trainData, trainer->flags, sample_step ); - sample_data = sample.data.ptr; - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - sample.data.ptr = sample_data + index * sample_step; - idx[index] = (int) cvEvalCARTClassifierIdx( (CvClassifier*) ptr, &sample ); - } - for( j = 0; j <= ptr->count; j++ ) - { - respnum = 0; - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - if( idx[index] == j ) - { - resp[respnum++] = *((float*) (trainer->ydata + index * trainer->ystep)) - - trainer->f[index]; - } - } - if( respnum > 0 ) - { - std::sort(resp, resp + respnum); - val = resp[respnum / 2]; - } - else - { - val = 0.0F; - } - ptr->val[j] = val; - } - - cvFree( &idx ); - cvFree( &resp ); - - trees[0] = ptr; -} - - -static void icvBtNext_MREG( CvCARTClassifier** trees, CvBtTrainer* trainer ) -{ - CvCARTClassifier* ptr; - int i, j; - CvMat sample; - int sample_step; - uchar* sample_data; - - int data_size; - int* idx; - float* resid; - float* resp; - int respnum; - float rhat; - float val; - float delta; - int index; - - data_size = trainer->m * sizeof( *idx ); - idx = (int*) cvAlloc( data_size ); - data_size = trainer->m * sizeof( *resp ); - resp = (float*) cvAlloc( data_size ); - data_size = trainer->m * sizeof( *resid ); - resid = (float*) cvAlloc( data_size ); - - /* resid_i = (y_i - F_(m-1)(x_i)) */ - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - resid[index] = *((float*) (trainer->ydata + index * trainer->ystep)) - - trainer->f[index]; - /* for delta */ - resp[i] = (float) fabs( resid[index] ); - } - - /* delta = quantile_alpha{abs(resid_i)} */ - std::sort(resp, resp + trainer->numsamples); - delta = resp[(int)(trainer->param[1] * (trainer->numsamples - 1))]; - - /* yhat_i */ - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - trainer->y->data.fl[index] = MIN( delta, ((float) fabs( resid[index] )) ) * - CV_SIGN( resid[index] ); - } - - ptr = (CvCARTClassifier*) cvCreateCARTClassifier( trainer->trainData, trainer->flags, - trainer->y, NULL, NULL, NULL, trainer->sampleIdx, trainer->weights, - (CvClassifierTrainParams*) &trainer->cartParams ); - - CV_GET_SAMPLE( *trainer->trainData, trainer->flags, 0, sample ); - CV_GET_SAMPLE_STEP( *trainer->trainData, trainer->flags, sample_step ); - sample_data = sample.data.ptr; - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - sample.data.ptr = sample_data + index * sample_step; - idx[index] = (int) cvEvalCARTClassifierIdx( (CvClassifier*) ptr, &sample ); - } - for( j = 0; j <= ptr->count; j++ ) - { - respnum = 0; - - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - if( idx[index] == j ) - { - resp[respnum++] = *((float*) (trainer->ydata + index * trainer->ystep)) - - trainer->f[index]; - } - } - if( respnum > 0 ) - { - /* rhat = median(y_i - F_(m-1)(x_i)) */ - std::sort(resp, resp + respnum); - rhat = resp[respnum / 2]; - - /* val = sum{sign(r_i - rhat_i) * min(delta, abs(r_i - rhat_i)} - * r_i = y_i - F_(m-1)(x_i) - */ - val = 0.0F; - for( i = 0; i < respnum; i++ ) - { - val += CV_SIGN( resp[i] - rhat ) - * MIN( delta, (float) fabs( resp[i] - rhat ) ); - } - - val = rhat + val / (float) respnum; - } - else - { - val = 0.0F; - } - - ptr->val[j] = val; - - } - - cvFree( &resid ); - cvFree( &resp ); - cvFree( &idx ); - - trees[0] = ptr; -} - -//#define CV_VAL_MAX 1e304 - -//#define CV_LOG_VAL_MAX 700.0 - -#define CV_VAL_MAX 1e+8 - -#define CV_LOG_VAL_MAX 18.0 - -static void icvBtNext_L2CLASS( CvCARTClassifier** trees, CvBtTrainer* trainer ) -{ - CvCARTClassifier* ptr; - int i, j; - CvMat sample; - int sample_step; - uchar* sample_data; - - int data_size; - int* idx; - int respnum; - float val; - double val_f; - - float sum_weights; - float* weights; - float* sorted_weights; - CvMat* trimmed_idx; - CvMat* sample_idx; - int index; - int trimmed_num; - - data_size = trainer->m * sizeof( *idx ); - idx = (int*) cvAlloc( data_size ); - - data_size = trainer->m * sizeof( *weights ); - weights = (float*) cvAlloc( data_size ); - data_size = trainer->m * sizeof( *sorted_weights ); - sorted_weights = (float*) cvAlloc( data_size ); - - /* yhat_i = (4 * y_i - 2) / ( 1 + exp( (4 * y_i - 2) * F_(m-1)(x_i) ) ). - * y_i in {0, 1} - */ - sum_weights = 0.0F; - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - val = 4.0F * (*((float*) (trainer->ydata + index * trainer->ystep))) - 2.0F; - val_f = val * trainer->f[index]; - val_f = ( val_f < CV_LOG_VAL_MAX ) ? exp( val_f ) : CV_LOG_VAL_MAX; - val = (float) ( (double) val / ( 1.0 + val_f ) ); - trainer->y->data.fl[index] = val; - val = (float) fabs( val ); - weights[index] = val * (2.0F - val); - sorted_weights[i] = weights[index]; - sum_weights += sorted_weights[i]; - } - - trimmed_idx = NULL; - sample_idx = trainer->sampleIdx; - trimmed_num = trainer->numsamples; - if( trainer->param[1] < 1.0F ) - { - /* perform weight trimming */ - - float threshold; - int count; - - std::sort(sorted_weights, sorted_weights + trainer->numsamples); - - sum_weights *= (1.0F - trainer->param[1]); - - i = -1; - do { sum_weights -= sorted_weights[++i]; } - while( sum_weights > 0.0F && i < (trainer->numsamples - 1) ); - - threshold = sorted_weights[i]; - - while( i > 0 && sorted_weights[i-1] == threshold ) i--; - - if( i > 0 ) - { - trimmed_num = trainer->numsamples - i; - trimmed_idx = cvCreateMat( 1, trimmed_num, CV_32FC1 ); - count = 0; - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - if( weights[index] >= threshold ) - { - CV_MAT_ELEM( *trimmed_idx, float, 0, count ) = (float) index; - count++; - } - } - - assert( count == trimmed_num ); - - sample_idx = trimmed_idx; - - printf( "Used samples %%: %g\n", - (float) trimmed_num / (float) trainer->numsamples * 100.0F ); - } - } - - ptr = (CvCARTClassifier*) cvCreateCARTClassifier( trainer->trainData, trainer->flags, - trainer->y, NULL, NULL, NULL, sample_idx, trainer->weights, - (CvClassifierTrainParams*) &trainer->cartParams ); - - CV_GET_SAMPLE( *trainer->trainData, trainer->flags, 0, sample ); - CV_GET_SAMPLE_STEP( *trainer->trainData, trainer->flags, sample_step ); - sample_data = sample.data.ptr; - for( i = 0; i < trimmed_num; i++ ) - { - index = icvGetIdxAt( sample_idx, i ); - sample.data.ptr = sample_data + index * sample_step; - idx[index] = (int) cvEvalCARTClassifierIdx( (CvClassifier*) ptr, &sample ); - } - for( j = 0; j <= ptr->count; j++ ) - { - respnum = 0; - val = 0.0F; - sum_weights = 0.0F; - for( i = 0; i < trimmed_num; i++ ) - { - index = icvGetIdxAt( sample_idx, i ); - if( idx[index] == j ) - { - val += trainer->y->data.fl[index]; - sum_weights += weights[index]; - respnum++; - } - } - if( sum_weights > 0.0F ) - { - val /= sum_weights; - } - else - { - val = 0.0F; - } - ptr->val[j] = val; - } - - if( trimmed_idx != NULL ) cvReleaseMat( &trimmed_idx ); - cvFree( &sorted_weights ); - cvFree( &weights ); - cvFree( &idx ); - - trees[0] = ptr; -} - -static void icvBtNext_LKCLASS( CvCARTClassifier** trees, CvBtTrainer* trainer ) -{ - int i, j, k, kk, num; - CvMat sample; - int sample_step; - uchar* sample_data; - - int data_size; - int* idx; - int respnum; - float val; - - float sum_weights; - float* weights; - float* sorted_weights; - CvMat* trimmed_idx; - CvMat* sample_idx; - int index; - int trimmed_num; - double sum_exp_f; - double exp_f; - double f_k; - - data_size = trainer->m * sizeof( *idx ); - idx = (int*) cvAlloc( data_size ); - data_size = trainer->m * sizeof( *weights ); - weights = (float*) cvAlloc( data_size ); - data_size = trainer->m * sizeof( *sorted_weights ); - sorted_weights = (float*) cvAlloc( data_size ); - trimmed_idx = cvCreateMat( 1, trainer->numsamples, CV_32FC1 ); - - for( k = 0; k < trainer->numclasses; k++ ) - { - /* yhat_i = y_i - p_k(x_i), y_i in {0, 1} */ - /* p_k(x_i) = exp(f_k(x_i)) / (sum_exp_f(x_i)) */ - sum_weights = 0.0F; - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - /* p_k(x_i) = 1 / (1 + sum(exp(f_kk(x_i) - f_k(x_i)))), kk != k */ - num = index * trainer->numclasses; - f_k = (double) trainer->f[num + k]; - sum_exp_f = 1.0; - for( kk = 0; kk < trainer->numclasses; kk++ ) - { - if( kk == k ) continue; - exp_f = (double) trainer->f[num + kk] - f_k; - exp_f = (exp_f < CV_LOG_VAL_MAX) ? exp( exp_f ) : CV_VAL_MAX; - if( exp_f == CV_VAL_MAX || exp_f >= (CV_VAL_MAX - sum_exp_f) ) - { - sum_exp_f = CV_VAL_MAX; - break; - } - sum_exp_f += exp_f; - } - - val = (float) ( (*((float*) (trainer->ydata + index * trainer->ystep))) - == (float) k ); - val -= (float) ( (sum_exp_f == CV_VAL_MAX) ? 0.0 : ( 1.0 / sum_exp_f ) ); - - assert( val >= -1.0F ); - assert( val <= 1.0F ); - - trainer->y->data.fl[index] = val; - val = (float) fabs( val ); - weights[index] = val * (1.0F - val); - sorted_weights[i] = weights[index]; - sum_weights += sorted_weights[i]; - } - - sample_idx = trainer->sampleIdx; - trimmed_num = trainer->numsamples; - if( trainer->param[1] < 1.0F ) - { - /* perform weight trimming */ - - float threshold; - int count; - - std::sort(sorted_weights, sorted_weights + trainer->numsamples); - - sum_weights *= (1.0F - trainer->param[1]); - - i = -1; - do { sum_weights -= sorted_weights[++i]; } - while( sum_weights > 0.0F && i < (trainer->numsamples - 1) ); - - threshold = sorted_weights[i]; - - while( i > 0 && sorted_weights[i-1] == threshold ) i--; - - if( i > 0 ) - { - trimmed_num = trainer->numsamples - i; - trimmed_idx->cols = trimmed_num; - count = 0; - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - if( weights[index] >= threshold ) - { - CV_MAT_ELEM( *trimmed_idx, float, 0, count ) = (float) index; - count++; - } - } - - assert( count == trimmed_num ); - - sample_idx = trimmed_idx; - - printf( "k: %d Used samples %%: %g\n", k, - (float) trimmed_num / (float) trainer->numsamples * 100.0F ); - } - } /* weight trimming */ - - trees[k] = (CvCARTClassifier*) cvCreateCARTClassifier( trainer->trainData, - trainer->flags, trainer->y, NULL, NULL, NULL, sample_idx, trainer->weights, - (CvClassifierTrainParams*) &trainer->cartParams ); - - CV_GET_SAMPLE( *trainer->trainData, trainer->flags, 0, sample ); - CV_GET_SAMPLE_STEP( *trainer->trainData, trainer->flags, sample_step ); - sample_data = sample.data.ptr; - for( i = 0; i < trimmed_num; i++ ) - { - index = icvGetIdxAt( sample_idx, i ); - sample.data.ptr = sample_data + index * sample_step; - idx[index] = (int) cvEvalCARTClassifierIdx( (CvClassifier*) trees[k], - &sample ); - } - for( j = 0; j <= trees[k]->count; j++ ) - { - respnum = 0; - val = 0.0F; - sum_weights = 0.0F; - for( i = 0; i < trimmed_num; i++ ) - { - index = icvGetIdxAt( sample_idx, i ); - if( idx[index] == j ) - { - val += trainer->y->data.fl[index]; - sum_weights += weights[index]; - respnum++; - } - } - if( sum_weights > 0.0F ) - { - val = ((float) (trainer->numclasses - 1)) * val / - ((float) (trainer->numclasses)) / sum_weights; - } - else - { - val = 0.0F; - } - trees[k]->val[j] = val; - } - } /* for each class */ - - cvReleaseMat( &trimmed_idx ); - cvFree( &sorted_weights ); - cvFree( &weights ); - cvFree( &idx ); -} - - -static void icvBtNext_XXBCLASS( CvCARTClassifier** trees, CvBtTrainer* trainer ) -{ - float alpha; - int i; - CvMat* weak_eval_vals; - CvMat* sample_idx; - int num_samples; - CvMat sample; - uchar* sample_data; - int sample_step; - - weak_eval_vals = cvCreateMat( 1, trainer->m, CV_32FC1 ); - - sample_idx = cvTrimWeights( trainer->weights, trainer->sampleIdx, - trainer->param[1] ); - num_samples = ( sample_idx == NULL ) - ? trainer->m : MAX( sample_idx->rows, sample_idx->cols ); - - printf( "Used samples %%: %g\n", - (float) num_samples / (float) trainer->numsamples * 100.0F ); - - trees[0] = (CvCARTClassifier*) cvCreateCARTClassifier( trainer->trainData, - trainer->flags, trainer->y, NULL, NULL, NULL, - sample_idx, trainer->weights, - (CvClassifierTrainParams*) &trainer->cartParams ); - - /* evaluate samples */ - CV_GET_SAMPLE( *trainer->trainData, trainer->flags, 0, sample ); - CV_GET_SAMPLE_STEP( *trainer->trainData, trainer->flags, sample_step ); - sample_data = sample.data.ptr; - - for( i = 0; i < trainer->m; i++ ) - { - sample.data.ptr = sample_data + i * sample_step; - weak_eval_vals->data.fl[i] = trees[0]->eval( (CvClassifier*) trees[0], &sample ); - } - - alpha = cvBoostNextWeakClassifier( weak_eval_vals, trainer->trainClasses, - trainer->y, trainer->weights, trainer->boosttrainer ); - - /* multiply tree by alpha */ - for( i = 0; i <= trees[0]->count; i++ ) - { - trees[0]->val[i] *= alpha; - } - if( trainer->type == CV_RABCLASS ) - { - for( i = 0; i <= trees[0]->count; i++ ) - { - trees[0]->val[i] = cvLogRatio( trees[0]->val[i] ); - } - } - - if( sample_idx != NULL && sample_idx != trainer->sampleIdx ) - { - cvReleaseMat( &sample_idx ); - } - cvReleaseMat( &weak_eval_vals ); -} - -typedef void (*CvBtNextFunc)( CvCARTClassifier** trees, CvBtTrainer* trainer ); - -static CvBtNextFunc icvBtNextFunc[] = -{ - icvBtNext_XXBCLASS, - icvBtNext_XXBCLASS, - icvBtNext_XXBCLASS, - icvBtNext_XXBCLASS, - icvBtNext_L2CLASS, - icvBtNext_LKCLASS, - icvBtNext_LSREG, - icvBtNext_LADREG, - icvBtNext_MREG -}; - -CV_BOOST_IMPL -void cvBtNext( CvCARTClassifier** trees, CvBtTrainer* trainer ) -{ - int i, j; - int index; - CvMat sample; - int sample_step; - uchar* sample_data; - - icvBtNextFunc[trainer->type]( trees, trainer ); - - /* shrinkage */ - if( trainer->param[0] != 1.0F ) - { - for( j = 0; j < trainer->numclasses; j++ ) - { - for( i = 0; i <= trees[j]->count; i++ ) - { - trees[j]->val[i] *= trainer->param[0]; - } - } - } - - if( trainer->type > CV_GABCLASS ) - { - /* update F_(m-1) */ - CV_GET_SAMPLE( *(trainer->trainData), trainer->flags, 0, sample ); - CV_GET_SAMPLE_STEP( *(trainer->trainData), trainer->flags, sample_step ); - sample_data = sample.data.ptr; - for( i = 0; i < trainer->numsamples; i++ ) - { - index = icvGetIdxAt( trainer->sampleIdx, i ); - sample.data.ptr = sample_data + index * sample_step; - for( j = 0; j < trainer->numclasses; j++ ) - { - trainer->f[index * trainer->numclasses + j] += - trees[j]->eval( (CvClassifier*) (trees[j]), &sample ); - } - } - } -} - -static -void cvBtEnd( CvBtTrainer** trainer ) -{ - CV_FUNCNAME( "cvBtEnd" ); - - __BEGIN__; - - if( trainer == NULL || (*trainer) == NULL ) - { - CV_ERROR( CV_StsNullPtr, "Invalid trainer parameter" ); - } - - if( (*trainer)->y != NULL ) - { - CV_CALL( cvReleaseMat( &((*trainer)->y) ) ); - } - if( (*trainer)->weights != NULL ) - { - CV_CALL( cvReleaseMat( &((*trainer)->weights) ) ); - } - if( (*trainer)->boosttrainer != NULL ) - { - CV_CALL( cvBoostEndTraining( &((*trainer)->boosttrainer) ) ); - } - CV_CALL( cvFree( trainer ) ); - - __END__; -} - -/****************************************************************************************\ -* Boosted tree model as a classifier * -\****************************************************************************************/ - -static -float cvEvalBtClassifier( CvClassifier* classifier, CvMat* sample ) -{ - float val; - - CV_FUNCNAME( "cvEvalBtClassifier" ); - - __BEGIN__; - - int i; - - val = 0.0F; - if( CV_IS_TUNABLE( classifier->flags ) ) - { - CvSeqReader reader; - CvCARTClassifier* tree; - - CV_CALL( cvStartReadSeq( ((CvBtClassifier*) classifier)->seq, &reader ) ); - for( i = 0; i < ((CvBtClassifier*) classifier)->numiter; i++ ) - { - CV_READ_SEQ_ELEM( tree, reader ); - val += tree->eval( (CvClassifier*) tree, sample ); - } - } - else - { - CvCARTClassifier** ptree; - - ptree = ((CvBtClassifier*) classifier)->trees; - for( i = 0; i < ((CvBtClassifier*) classifier)->numiter; i++ ) - { - val += (*ptree)->eval( (CvClassifier*) (*ptree), sample ); - ptree++; - } - } - - __END__; - - return val; -} - -static -float cvEvalBtClassifier2( CvClassifier* classifier, CvMat* sample ) -{ - float val; - - CV_FUNCNAME( "cvEvalBtClassifier2" ); - - __BEGIN__; - - CV_CALL( val = cvEvalBtClassifier( classifier, sample ) ); - - __END__; - - return (float) (val >= 0.0F); -} - -static -float cvEvalBtClassifierK( CvClassifier* classifier, CvMat* sample ) -{ - int cls = 0; - - CV_FUNCNAME( "cvEvalBtClassifierK" ); - - __BEGIN__; - - int i, k; - float max_val; - int numclasses; - - float* vals; - size_t data_size; - - numclasses = ((CvBtClassifier*) classifier)->numclasses; - data_size = sizeof( *vals ) * numclasses; - CV_CALL( vals = (float*) cvAlloc( data_size ) ); - memset( vals, 0, data_size ); - - if( CV_IS_TUNABLE( classifier->flags ) ) - { - CvSeqReader reader; - CvCARTClassifier* tree; - - CV_CALL( cvStartReadSeq( ((CvBtClassifier*) classifier)->seq, &reader ) ); - for( i = 0; i < ((CvBtClassifier*) classifier)->numiter; i++ ) - { - for( k = 0; k < numclasses; k++ ) - { - CV_READ_SEQ_ELEM( tree, reader ); - vals[k] += tree->eval( (CvClassifier*) tree, sample ); - } - } - - } - else - { - CvCARTClassifier** ptree; - - ptree = ((CvBtClassifier*) classifier)->trees; - for( i = 0; i < ((CvBtClassifier*) classifier)->numiter; i++ ) - { - for( k = 0; k < numclasses; k++ ) - { - vals[k] += (*ptree)->eval( (CvClassifier*) (*ptree), sample ); - ptree++; - } - } - } - - max_val = vals[cls]; - for( k = 1; k < numclasses; k++ ) - { - if( vals[k] > max_val ) - { - max_val = vals[k]; - cls = k; - } - } - - CV_CALL( cvFree( &vals ) ); - - __END__; - - return (float) cls; -} - -typedef float (*CvEvalBtClassifier)( CvClassifier* classifier, CvMat* sample ); - -static CvEvalBtClassifier icvEvalBtClassifier[] = -{ - cvEvalBtClassifier2, - cvEvalBtClassifier2, - cvEvalBtClassifier2, - cvEvalBtClassifier2, - cvEvalBtClassifier2, - cvEvalBtClassifierK, - cvEvalBtClassifier, - cvEvalBtClassifier, - cvEvalBtClassifier -}; - -static -int cvSaveBtClassifier( CvClassifier* classifier, const char* filename ) -{ - CV_FUNCNAME( "cvSaveBtClassifier" ); - - __BEGIN__; - - FILE* file; - int i, j; - CvSeqReader reader; - memset(&reader, 0, sizeof(reader)); - CvCARTClassifier* tree; - - CV_ASSERT( classifier ); - CV_ASSERT( filename ); - - if( !icvMkDir( filename ) || (file = fopen( filename, "w" )) == 0 ) - { - CV_ERROR( CV_StsError, "Unable to create file" ); - } - - if( CV_IS_TUNABLE( classifier->flags ) ) - { - CV_CALL( cvStartReadSeq( ((CvBtClassifier*) classifier)->seq, &reader ) ); - } - fprintf( file, "%d %d\n%d\n%d\n", (int) ((CvBtClassifier*) classifier)->type, - ((CvBtClassifier*) classifier)->numclasses, - ((CvBtClassifier*) classifier)->numfeatures, - ((CvBtClassifier*) classifier)->numiter ); - - for( i = 0; i < ((CvBtClassifier*) classifier)->numclasses * - ((CvBtClassifier*) classifier)->numiter; i++ ) - { - if( CV_IS_TUNABLE( classifier->flags ) ) - { - CV_READ_SEQ_ELEM( tree, reader ); - } - else - { - tree = ((CvBtClassifier*) classifier)->trees[i]; - } - - fprintf( file, "%d\n", tree->count ); - for( j = 0; j < tree->count; j++ ) - { - fprintf( file, "%d %g %d %d\n", tree->compidx[j], - tree->threshold[j], - tree->left[j], - tree->right[j] ); - } - for( j = 0; j <= tree->count; j++ ) - { - fprintf( file, "%g ", tree->val[j] ); - } - fprintf( file, "\n" ); - } - - fclose( file ); - - __END__; - - return 1; -} - - -static -void cvReleaseBtClassifier( CvClassifier** ptr ) -{ - CV_FUNCNAME( "cvReleaseBtClassifier" ); - - __BEGIN__; - - int i; - - if( ptr == NULL || *ptr == NULL ) - { - CV_ERROR( CV_StsNullPtr, "" ); - } - if( CV_IS_TUNABLE( (*ptr)->flags ) ) - { - CvSeqReader reader; - CvCARTClassifier* tree; - - CV_CALL( cvStartReadSeq( ((CvBtClassifier*) *ptr)->seq, &reader ) ); - for( i = 0; i < ((CvBtClassifier*) *ptr)->numclasses * - ((CvBtClassifier*) *ptr)->numiter; i++ ) - { - CV_READ_SEQ_ELEM( tree, reader ); - tree->release( (CvClassifier**) (&tree) ); - } - CV_CALL( cvReleaseMemStorage( &(((CvBtClassifier*) *ptr)->seq->storage) ) ); - } - else - { - CvCARTClassifier** ptree; - - ptree = ((CvBtClassifier*) *ptr)->trees; - for( i = 0; i < ((CvBtClassifier*) *ptr)->numclasses * - ((CvBtClassifier*) *ptr)->numiter; i++ ) - { - (*ptree)->release( (CvClassifier**) ptree ); - ptree++; - } - } - - CV_CALL( cvFree( ptr ) ); - *ptr = NULL; - - __END__; -} - -static void cvTuneBtClassifier( CvClassifier* classifier, CvMat*, int flags, - CvMat*, CvMat* , CvMat*, CvMat*, CvMat* ) -{ - CV_FUNCNAME( "cvTuneBtClassifier" ); - - __BEGIN__; - - size_t data_size; - - if( CV_IS_TUNABLE( flags ) ) - { - if( !CV_IS_TUNABLE( classifier->flags ) ) - { - CV_ERROR( CV_StsUnsupportedFormat, - "Classifier does not support tune function" ); - } - else - { - /* tune classifier */ - CvCARTClassifier** trees; - - printf( "Iteration %d\n", ((CvBtClassifier*) classifier)->numiter + 1 ); - - data_size = sizeof( *trees ) * ((CvBtClassifier*) classifier)->numclasses; - CV_CALL( trees = (CvCARTClassifier**) cvAlloc( data_size ) ); - CV_CALL( cvBtNext( trees, - (CvBtTrainer*) ((CvBtClassifier*) classifier)->trainer ) ); - CV_CALL( cvSeqPushMulti( ((CvBtClassifier*) classifier)->seq, - trees, ((CvBtClassifier*) classifier)->numclasses ) ); - CV_CALL( cvFree( &trees ) ); - ((CvBtClassifier*) classifier)->numiter++; - } - } - else - { - if( CV_IS_TUNABLE( classifier->flags ) ) - { - /* convert */ - void* ptr; - - assert( ((CvBtClassifier*) classifier)->seq->total == - ((CvBtClassifier*) classifier)->numiter * - ((CvBtClassifier*) classifier)->numclasses ); - - data_size = sizeof( ((CvBtClassifier*) classifier)->trees[0] ) * - ((CvBtClassifier*) classifier)->seq->total; - CV_CALL( ptr = cvAlloc( data_size ) ); - CV_CALL( cvCvtSeqToArray( ((CvBtClassifier*) classifier)->seq, ptr ) ); - CV_CALL( cvReleaseMemStorage( - &(((CvBtClassifier*) classifier)->seq->storage) ) ); - ((CvBtClassifier*) classifier)->trees = (CvCARTClassifier**) ptr; - classifier->flags &= ~CV_TUNABLE; - CV_CALL( cvBtEnd( (CvBtTrainer**) - &(((CvBtClassifier*) classifier)->trainer )) ); - ((CvBtClassifier*) classifier)->trainer = NULL; - } - } - - __END__; -} - -static CvBtClassifier* icvAllocBtClassifier( CvBoostType type, int flags, int numclasses, - int numiter ) -{ - CvBtClassifier* ptr; - size_t data_size; - - assert( numclasses >= 1 ); - assert( numiter >= 0 ); - assert( ( numclasses == 1 ) || (type == CV_LKCLASS) ); - - data_size = sizeof( *ptr ); - ptr = (CvBtClassifier*) cvAlloc( data_size ); - memset( ptr, 0, data_size ); - - if( CV_IS_TUNABLE( flags ) ) - { - ptr->seq = cvCreateSeq( 0, sizeof( *(ptr->seq) ), sizeof( *(ptr->trees) ), - cvCreateMemStorage() ); - ptr->numiter = 0; - } - else - { - data_size = numclasses * numiter * sizeof( *(ptr->trees) ); - ptr->trees = (CvCARTClassifier**) cvAlloc( data_size ); - memset( ptr->trees, 0, data_size ); - - ptr->numiter = numiter; - } - - ptr->flags = flags; - ptr->numclasses = numclasses; - ptr->type = type; - - ptr->eval = icvEvalBtClassifier[(int) type]; - ptr->tune = cvTuneBtClassifier; - ptr->save = cvSaveBtClassifier; - ptr->release = cvReleaseBtClassifier; - - return ptr; -} - -CV_BOOST_IMPL -CvClassifier* cvCreateBtClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* typeMask, - CvMat* missedMeasurementsMask, - CvMat* compIdx, - CvMat* sampleIdx, - CvMat* weights, - CvClassifierTrainParams* trainParams ) -{ - CvBtClassifier* ptr = 0; - - CV_FUNCNAME( "cvCreateBtClassifier" ); - - __BEGIN__; - CvBoostType type; - int num_classes; - int num_iter; - int i; - CvCARTClassifier** trees; - size_t data_size; - - CV_ASSERT( trainData != NULL ); - CV_ASSERT( trainClasses != NULL ); - CV_ASSERT( typeMask == NULL ); - CV_ASSERT( missedMeasurementsMask == NULL ); - CV_ASSERT( compIdx == NULL ); - CV_ASSERT( weights == NULL ); - CV_ASSERT( trainParams != NULL ); - - type = ((CvBtClassifierTrainParams*) trainParams)->type; - - if( type >= CV_DABCLASS && type <= CV_GABCLASS && sampleIdx ) - { - CV_ERROR( CV_StsBadArg, "Sample indices are not supported for this type" ); - } - - if( type == CV_LKCLASS ) - { - double min_val; - double max_val; - - cvMinMaxLoc( trainClasses, &min_val, &max_val ); - num_classes = (int) (max_val + 1.0); - - CV_ASSERT( num_classes >= 2 ); - } - else - { - num_classes = 1; - } - num_iter = ((CvBtClassifierTrainParams*) trainParams)->numiter; - - CV_ASSERT( num_iter > 0 ); - - ptr = icvAllocBtClassifier( type, CV_TUNABLE | flags, num_classes, num_iter ); - ptr->numfeatures = (CV_IS_ROW_SAMPLE( flags )) ? trainData->cols : trainData->rows; - - i = 0; - - printf( "Iteration %d\n", 1 ); - - data_size = sizeof( *trees ) * ptr->numclasses; - CV_CALL( trees = (CvCARTClassifier**) cvAlloc( data_size ) ); - - CV_CALL( ptr->trainer = cvBtStart( trees, trainData, flags, trainClasses, sampleIdx, - ((CvBtClassifierTrainParams*) trainParams)->numsplits, type, num_classes, - &(((CvBtClassifierTrainParams*) trainParams)->param[0]) ) ); - - CV_CALL( cvSeqPushMulti( ptr->seq, trees, ptr->numclasses ) ); - CV_CALL( cvFree( &trees ) ); - ptr->numiter++; - - for( i = 1; i < num_iter; i++ ) - { - ptr->tune( (CvClassifier*) ptr, NULL, CV_TUNABLE, NULL, NULL, NULL, NULL, NULL ); - } - if( !CV_IS_TUNABLE( flags ) ) - { - /* convert */ - ptr->tune( (CvClassifier*) ptr, NULL, 0, NULL, NULL, NULL, NULL, NULL ); - } - - __END__; - - return (CvClassifier*) ptr; -} - -CV_BOOST_IMPL -CvClassifier* cvCreateBtClassifierFromFile( const char* filename ) -{ - CvBtClassifier* ptr = 0; - - CV_FUNCNAME( "cvCreateBtClassifierFromFile" ); - - __BEGIN__; - - FILE* file; - int i, j; - int data_size; - int num_classifiers; - int num_features; - int num_classes; - int type; - int values_read = -1; - - CV_ASSERT( filename != NULL ); - - ptr = NULL; - file = fopen( filename, "r" ); - if( !file ) - { - CV_ERROR( CV_StsError, "Unable to open file" ); - } - - values_read = fscanf( file, "%d %d %d %d", &type, &num_classes, &num_features, &num_classifiers ); - CV_Assert(values_read == 4); - - CV_ASSERT( type >= (int) CV_DABCLASS && type <= (int) CV_MREG ); - CV_ASSERT( num_features > 0 ); - CV_ASSERT( num_classifiers > 0 ); - - if( (CvBoostType) type != CV_LKCLASS ) - { - num_classes = 1; - } - ptr = icvAllocBtClassifier( (CvBoostType) type, 0, num_classes, num_classifiers ); - ptr->numfeatures = num_features; - - for( i = 0; i < num_classes * num_classifiers; i++ ) - { - int count; - CvCARTClassifier* tree; - - values_read = fscanf( file, "%d", &count ); - CV_Assert(values_read == 1); - - data_size = sizeof( *tree ) - + count * ( sizeof( *(tree->compidx) ) + sizeof( *(tree->threshold) ) + - sizeof( *(tree->right) ) + sizeof( *(tree->left) ) ) - + (count + 1) * ( sizeof( *(tree->val) ) ); - CV_CALL( tree = (CvCARTClassifier*) cvAlloc( data_size ) ); - memset( tree, 0, data_size ); - tree->eval = cvEvalCARTClassifier; - tree->tune = NULL; - tree->save = NULL; - tree->release = cvReleaseCARTClassifier; - tree->compidx = (int*) ( tree + 1 ); - tree->threshold = (float*) ( tree->compidx + count ); - tree->left = (int*) ( tree->threshold + count ); - tree->right = (int*) ( tree->left + count ); - tree->val = (float*) ( tree->right + count ); - - tree->count = count; - for( j = 0; j < tree->count; j++ ) - { - values_read = fscanf( file, "%d %g %d %d", &(tree->compidx[j]), - &(tree->threshold[j]), - &(tree->left[j]), - &(tree->right[j]) ); - CV_Assert(values_read == 4); - } - for( j = 0; j <= tree->count; j++ ) - { - values_read = fscanf( file, "%g", &(tree->val[j]) ); - CV_Assert(values_read == 1); - } - ptr->trees[i] = tree; - } - - fclose( file ); - - __END__; - - return (CvClassifier*) ptr; -} - -/****************************************************************************************\ -* Utility functions * -\****************************************************************************************/ - -CV_BOOST_IMPL -CvMat* cvTrimWeights( CvMat* weights, CvMat* idx, float factor ) -{ - CvMat* ptr = 0; - - CV_FUNCNAME( "cvTrimWeights" ); - __BEGIN__; - int i, index, num; - float sum_weights; - uchar* wdata; - size_t wstep; - int wnum; - float threshold; - int count; - float* sorted_weights; - - CV_ASSERT( CV_MAT_TYPE( weights->type ) == CV_32FC1 ); - - ptr = idx; - sorted_weights = NULL; - - if( factor > 0.0F && factor < 1.0F ) - { - size_t data_size; - - CV_MAT2VEC( *weights, wdata, wstep, wnum ); - num = ( idx == NULL ) ? wnum : MAX( idx->rows, idx->cols ); - - data_size = num * sizeof( *sorted_weights ); - sorted_weights = (float*) cvAlloc( data_size ); - memset( sorted_weights, 0, data_size ); - - sum_weights = 0.0F; - for( i = 0; i < num; i++ ) - { - index = icvGetIdxAt( idx, i ); - sorted_weights[i] = *((float*) (wdata + index * wstep)); - sum_weights += sorted_weights[i]; - } - - std::sort(sorted_weights, sorted_weights + num); - - sum_weights *= (1.0F - factor); - - i = -1; - do { sum_weights -= sorted_weights[++i]; } - while( sum_weights > 0.0F && i < (num - 1) ); - - threshold = sorted_weights[i]; - - while( i > 0 && sorted_weights[i-1] == threshold ) i--; - - if( i > 0 || ( idx != NULL && CV_MAT_TYPE( idx->type ) != CV_32FC1 ) ) - { - CV_CALL( ptr = cvCreateMat( 1, num - i, CV_32FC1 ) ); - count = 0; - for( i = 0; i < num; i++ ) - { - index = icvGetIdxAt( idx, i ); - if( *((float*) (wdata + index * wstep)) >= threshold ) - { - CV_MAT_ELEM( *ptr, float, 0, count ) = (float) index; - count++; - } - } - - assert( count == ptr->cols ); - } - cvFree( &sorted_weights ); - } - - __END__; - - return ptr; -} - - -CV_BOOST_IMPL -void cvReadTrainData( const char* filename, int flags, - CvMat** trainData, - CvMat** trainClasses ) -{ - - CV_FUNCNAME( "cvReadTrainData" ); - - __BEGIN__; - - FILE* file; - int m, n; - int i, j; - float val; - int values_read = -1; - - if( filename == NULL ) - { - CV_ERROR( CV_StsNullPtr, "filename must be specified" ); - } - if( trainData == NULL ) - { - CV_ERROR( CV_StsNullPtr, "trainData must be not NULL" ); - } - if( trainClasses == NULL ) - { - CV_ERROR( CV_StsNullPtr, "trainClasses must be not NULL" ); - } - - *trainData = NULL; - *trainClasses = NULL; - file = fopen( filename, "r" ); - if( !file ) - { - CV_ERROR( CV_StsError, "Unable to open file" ); - } - - values_read = fscanf( file, "%d %d", &m, &n ); - CV_Assert(values_read == 2); - - if( CV_IS_ROW_SAMPLE( flags ) ) - { - CV_CALL( *trainData = cvCreateMat( m, n, CV_32FC1 ) ); - } - else - { - CV_CALL( *trainData = cvCreateMat( n, m, CV_32FC1 ) ); - } - - CV_CALL( *trainClasses = cvCreateMat( 1, m, CV_32FC1 ) ); - - for( i = 0; i < m; i++ ) - { - for( j = 0; j < n; j++ ) - { - values_read = fscanf( file, "%f", &val ); - CV_Assert(values_read == 1); - if( CV_IS_ROW_SAMPLE( flags ) ) - { - CV_MAT_ELEM( **trainData, float, i, j ) = val; - } - else - { - CV_MAT_ELEM( **trainData, float, j, i ) = val; - } - } - values_read = fscanf( file, "%f", &val ); - CV_Assert(values_read == 2); - CV_MAT_ELEM( **trainClasses, float, 0, i ) = val; - } - - fclose( file ); - - __END__; - -} - -CV_BOOST_IMPL -void cvWriteTrainData( const char* filename, int flags, - CvMat* trainData, CvMat* trainClasses, CvMat* sampleIdx ) -{ - CV_FUNCNAME( "cvWriteTrainData" ); - - __BEGIN__; - - FILE* file; - int m, n; - int i, j; - int clsrow; - int count; - int idx; - CvScalar sc; - - if( filename == NULL ) - { - CV_ERROR( CV_StsNullPtr, "filename must be specified" ); - } - if( trainData == NULL || CV_MAT_TYPE( trainData->type ) != CV_32FC1 ) - { - CV_ERROR( CV_StsUnsupportedFormat, "Invalid trainData" ); - } - if( CV_IS_ROW_SAMPLE( flags ) ) - { - m = trainData->rows; - n = trainData->cols; - } - else - { - n = trainData->rows; - m = trainData->cols; - } - if( trainClasses == NULL || CV_MAT_TYPE( trainClasses->type ) != CV_32FC1 || - MIN( trainClasses->rows, trainClasses->cols ) != 1 ) - { - CV_ERROR( CV_StsUnsupportedFormat, "Invalid trainClasses" ); - } - clsrow = (trainClasses->rows == 1); - if( m != ( (clsrow) ? trainClasses->cols : trainClasses->rows ) ) - { - CV_ERROR( CV_StsUnmatchedSizes, "Incorrect trainData and trainClasses sizes" ); - } - - if( sampleIdx != NULL ) - { - count = (sampleIdx->rows == 1) ? sampleIdx->cols : sampleIdx->rows; - } - else - { - count = m; - } - - - file = fopen( filename, "w" ); - if( !file ) - { - CV_ERROR( CV_StsError, "Unable to create file" ); - } - - fprintf( file, "%d %d\n", count, n ); - - for( i = 0; i < count; i++ ) - { - if( sampleIdx ) - { - if( sampleIdx->rows == 1 ) - { - sc = cvGet2D( sampleIdx, 0, i ); - } - else - { - sc = cvGet2D( sampleIdx, i, 0 ); - } - idx = (int) sc.val[0]; - } - else - { - idx = i; - } - for( j = 0; j < n; j++ ) - { - fprintf( file, "%g ", ( (CV_IS_ROW_SAMPLE( flags )) - ? CV_MAT_ELEM( *trainData, float, idx, j ) - : CV_MAT_ELEM( *trainData, float, j, idx ) ) ); - } - fprintf( file, "%g\n", ( (clsrow) - ? CV_MAT_ELEM( *trainClasses, float, 0, idx ) - : CV_MAT_ELEM( *trainClasses, float, idx, 0 ) ) ); - } - - fclose( file ); - - __END__; -} - - -#define ICV_RAND_SHUFFLE( suffix, type ) \ -static void icvRandShuffle_##suffix( uchar* data, size_t step, int num ) \ -{ \ - time_t seed; \ - type tmp; \ - int i; \ - float rn; \ - \ - time( &seed ); \ - CvRNG state = cvRNG((int)seed); \ - \ - for( i = 0; i < (num-1); i++ ) \ - { \ - rn = ((float) cvRandInt( &state )) / (1.0F + UINT_MAX); \ - CV_SWAP( *((type*)(data + i * step)), \ - *((type*)(data + ( i + (int)( rn * (num - i ) ) )* step)), \ - tmp ); \ - } \ -} - -ICV_RAND_SHUFFLE( 8U, uchar ) - -ICV_RAND_SHUFFLE( 16S, short ) - -ICV_RAND_SHUFFLE( 32S, int ) - -ICV_RAND_SHUFFLE( 32F, float ) - -CV_BOOST_IMPL -void cvRandShuffleVec( CvMat* mat ) -{ - CV_FUNCNAME( "cvRandShuffle" ); - - __BEGIN__; - - uchar* data; - size_t step; - int num; - - if( (mat == NULL) || !CV_IS_MAT( mat ) || MIN( mat->rows, mat->cols ) != 1 ) - { - CV_ERROR( CV_StsUnsupportedFormat, "" ); - } - - CV_MAT2VEC( *mat, data, step, num ); - switch( CV_MAT_TYPE( mat->type ) ) - { - case CV_8UC1: - icvRandShuffle_8U( data, step, num); - break; - case CV_16SC1: - icvRandShuffle_16S( data, step, num); - break; - case CV_32SC1: - icvRandShuffle_32S( data, step, num); - break; - case CV_32FC1: - icvRandShuffle_32F( data, step, num); - break; - default: - CV_ERROR( CV_StsUnsupportedFormat, "" ); - } - - __END__; -} - -/* End of file. */ diff --git a/apps/haartraining/cvclassifier.h b/apps/haartraining/cvclassifier.h deleted file mode 100644 index c1ae7f5ae..000000000 --- a/apps/haartraining/cvclassifier.h +++ /dev/null @@ -1,729 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * File cvclassifier.h - * - * Classifier types - */ - -#ifndef _CVCLASSIFIER_H_ -#define _CVCLASSIFIER_H_ - -#include -#include "cxcore.h" - -#define CV_BOOST_API - -/* Convert matrix to vector */ -#define CV_MAT2VEC( mat, vdata, vstep, num ) \ - assert( (mat).rows == 1 || (mat).cols == 1 ); \ - (vdata) = ((mat).data.ptr); \ - if( (mat).rows == 1 ) \ - { \ - (vstep) = CV_ELEM_SIZE( (mat).type ); \ - (num) = (mat).cols; \ - } \ - else \ - { \ - (vstep) = (mat).step; \ - (num) = (mat).rows; \ - } - -/* Set up matrix header to be sample of samples matrix */ -#define CV_GET_SAMPLE( trainData, tdflags, num, sample ) \ -if( CV_IS_ROW_SAMPLE( tdflags ) ) \ -{ \ - cvInitMatHeader( &(sample), 1, (trainData).cols, \ - CV_MAT_TYPE( (trainData).type ), \ - ((trainData).data.ptr + (num) * (trainData).step), \ - (trainData).step ); \ -} \ -else \ -{ \ - cvInitMatHeader( &(sample), (trainData).rows, 1, \ - CV_MAT_TYPE( (trainData).type ), \ - ((trainData).data.ptr + (num) * CV_ELEM_SIZE( (trainData).type )), \ - (trainData).step ); \ -} - -#define CV_GET_SAMPLE_STEP( trainData, tdflags, sstep ) \ -(sstep) = ( ( CV_IS_ROW_SAMPLE( tdflags ) ) \ - ? (trainData).step : CV_ELEM_SIZE( (trainData).type ) ); - - -#define CV_LOGRATIO_THRESHOLD 0.00001F - -/* log( val / (1 - val ) ) */ -CV_INLINE float cvLogRatio( float val ); - -CV_INLINE float cvLogRatio( float val ) -{ - float tval; - - tval = MAX(CV_LOGRATIO_THRESHOLD, MIN( 1.0F - CV_LOGRATIO_THRESHOLD, (val) )); - return logf( tval / (1.0F - tval) ); -} - - -/* flags values for classifier consturctor flags parameter */ - -/* each trainData matrix column is a sample */ -#define CV_COL_SAMPLE 0 - -/* each trainData matrix row is a sample */ -#define CV_ROW_SAMPLE 1 - -#ifndef CV_IS_ROW_SAMPLE -# define CV_IS_ROW_SAMPLE( flags ) ( ( flags ) & CV_ROW_SAMPLE ) -#endif - -/* Classifier supports tune function */ -#define CV_TUNABLE (1 << 1) - -#define CV_IS_TUNABLE( flags ) ( (flags) & CV_TUNABLE ) - - -/* classifier fields common to all classifiers */ -#define CV_CLASSIFIER_FIELDS() \ - int flags; \ - float(*eval)( struct CvClassifier*, CvMat* ); \ - void (*tune)( struct CvClassifier*, CvMat*, int flags, CvMat*, CvMat*, CvMat*, \ - CvMat*, CvMat* ); \ - int (*save)( struct CvClassifier*, const char* file_name ); \ - void (*release)( struct CvClassifier** ); - -typedef struct CvClassifier -{ - CV_CLASSIFIER_FIELDS() -} CvClassifier; - -#define CV_CLASSIFIER_TRAIN_PARAM_FIELDS() -typedef struct CvClassifierTrainParams -{ - CV_CLASSIFIER_TRAIN_PARAM_FIELDS() -} CvClassifierTrainParams; - - -/* - Common classifier constructor: - CvClassifier* cvCreateMyClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* typeMask, - CvMat* missedMeasurementsMask CV_DEFAULT(0), - CvCompIdx* compIdx CV_DEFAULT(0), - CvMat* sampleIdx CV_DEFAULT(0), - CvMat* weights CV_DEFAULT(0), - CvClassifierTrainParams* trainParams CV_DEFAULT(0) - ) - - */ - -typedef CvClassifier* (*CvClassifierConstructor)( CvMat*, int, CvMat*, CvMat*, CvMat*, - CvMat*, CvMat*, CvMat*, - CvClassifierTrainParams* ); - -typedef enum CvStumpType -{ - CV_CLASSIFICATION = 0, - CV_CLASSIFICATION_CLASS = 1, - CV_REGRESSION = 2 -} CvStumpType; - -typedef enum CvStumpError -{ - CV_MISCLASSIFICATION = 0, - CV_GINI = 1, - CV_ENTROPY = 2, - CV_SQUARE = 3 -} CvStumpError; - - -typedef struct CvStumpTrainParams -{ - CV_CLASSIFIER_TRAIN_PARAM_FIELDS() - CvStumpType type; - CvStumpError error; -} CvStumpTrainParams; - -typedef struct CvMTStumpTrainParams -{ - CV_CLASSIFIER_TRAIN_PARAM_FIELDS() - CvStumpType type; - CvStumpError error; - int portion; /* number of components calculated in each thread */ - int numcomp; /* total number of components */ - - /* callback which fills with components [first, first+num[ */ - void (*getTrainData)( CvMat* mat, CvMat* sampleIdx, CvMat* compIdx, - int first, int num, void* userdata ); - CvMat* sortedIdx; /* presorted samples indices */ - void* userdata; /* passed to callback */ -} CvMTStumpTrainParams; - -typedef struct CvStumpClassifier -{ - CV_CLASSIFIER_FIELDS() - int compidx; - - float lerror; /* impurity of the right node */ - float rerror; /* impurity of the left node */ - - float threshold; - float left; - float right; -} CvStumpClassifier; - -typedef struct CvCARTTrainParams -{ - CV_CLASSIFIER_TRAIN_PARAM_FIELDS() - /* desired number of internal nodes */ - int count; - CvClassifierTrainParams* stumpTrainParams; - CvClassifierConstructor stumpConstructor; - - /* - * Split sample indices - * on the "left" indices and "right" indices - * according to samples components values and . - * - * NOTE: Matrices and must be allocated using cvCreateMat function - * since they are freed using cvReleaseMat function - * - * If it is NULL then the default implementation which evaluates training - * samples from passed to classifier constructor is used - */ - void (*splitIdx)( int compidx, float threshold, - CvMat* idx, CvMat** left, CvMat** right, - void* userdata ); - void* userdata; -} CvCARTTrainParams; - -typedef struct CvCARTClassifier -{ - CV_CLASSIFIER_FIELDS() - /* number of internal nodes */ - int count; - - /* internal nodes (each array of elements) */ - int* compidx; - float* threshold; - int* left; - int* right; - - /* leaves (array of +1 elements) */ - float* val; -} CvCARTClassifier; - -CV_BOOST_API -void cvGetSortedIndices( CvMat* val, CvMat* idx, int sortcols CV_DEFAULT( 0 ) ); - -CV_BOOST_API -void cvReleaseStumpClassifier( CvClassifier** classifier ); - -CV_BOOST_API -float cvEvalStumpClassifier( CvClassifier* classifier, CvMat* sample ); - -CV_BOOST_API -CvClassifier* cvCreateStumpClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* typeMask, - CvMat* missedMeasurementsMask CV_DEFAULT(0), - CvMat* compIdx CV_DEFAULT(0), - CvMat* sampleIdx CV_DEFAULT(0), - CvMat* weights CV_DEFAULT(0), - CvClassifierTrainParams* trainParams CV_DEFAULT(0) ); - -/* - * cvCreateMTStumpClassifier - * - * Multithreaded stump classifier constructor - * Includes huge train data support through callback function - */ -CV_BOOST_API -CvClassifier* cvCreateMTStumpClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* typeMask, - CvMat* missedMeasurementsMask, - CvMat* compIdx, - CvMat* sampleIdx, - CvMat* weights, - CvClassifierTrainParams* trainParams ); - -/* - * cvCreateCARTClassifier - * - * CART classifier constructor - */ -CV_BOOST_API -CvClassifier* cvCreateCARTClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* typeMask, - CvMat* missedMeasurementsMask, - CvMat* compIdx, - CvMat* sampleIdx, - CvMat* weights, - CvClassifierTrainParams* trainParams ); - -CV_BOOST_API -void cvReleaseCARTClassifier( CvClassifier** classifier ); - -CV_BOOST_API -float cvEvalCARTClassifier( CvClassifier* classifier, CvMat* sample ); - -/****************************************************************************************\ -* Boosting * -\****************************************************************************************/ - -/* - * CvBoostType - * - * The CvBoostType enumeration specifies the boosting type. - * - * Remarks - * Four different boosting variants for 2 class classification problems are supported: - * Discrete AdaBoost, Real AdaBoost, LogitBoost and Gentle AdaBoost. - * The L2 (2 class classification problems) and LK (K class classification problems) - * algorithms are close to LogitBoost but more numerically stable than last one. - * For regression three different loss functions are supported: - * Least square, least absolute deviation and huber loss. - */ -typedef enum CvBoostType -{ - CV_DABCLASS = 0, /* 2 class Discrete AdaBoost */ - CV_RABCLASS = 1, /* 2 class Real AdaBoost */ - CV_LBCLASS = 2, /* 2 class LogitBoost */ - CV_GABCLASS = 3, /* 2 class Gentle AdaBoost */ - CV_L2CLASS = 4, /* classification (2 class problem) */ - CV_LKCLASS = 5, /* classification (K class problem) */ - CV_LSREG = 6, /* least squares regression */ - CV_LADREG = 7, /* least absolute deviation regression */ - CV_MREG = 8 /* M-regression (Huber loss) */ -} CvBoostType; - -/****************************************************************************************\ -* Iterative training functions * -\****************************************************************************************/ - -/* - * CvBoostTrainer - * - * The CvBoostTrainer structure represents internal boosting trainer. - */ -typedef struct CvBoostTrainer CvBoostTrainer; - -/* - * cvBoostStartTraining - * - * The cvBoostStartTraining function starts training process and calculates - * response values and weights for the first weak classifier training. - * - * Parameters - * trainClasses - * Vector of classes of training samples classes. Each element must be 0 or 1 and - * of type CV_32FC1. - * weakTrainVals - * Vector of response values for the first trained weak classifier. - * Must be of type CV_32FC1. - * weights - * Weight vector of training samples for the first trained weak classifier. - * Must be of type CV_32FC1. - * type - * Boosting type. CV_DABCLASS, CV_RABCLASS, CV_LBCLASS, CV_GABCLASS - * types are supported. - * - * Return Values - * The return value is a pointer to internal trainer structure which is used - * to perform next training iterations. - * - * Remarks - * weakTrainVals and weights must be allocated before calling the function - * and of the same size as trainingClasses. Usually weights should be initialized - * with 1.0 value. - * The function calculates response values and weights for the first weak - * classifier training and stores them into weakTrainVals and weights - * respectively. - * Note, the training of the weak classifier using weakTrainVals, weight, - * trainingData is outside of this function. - */ -CV_BOOST_API -CvBoostTrainer* cvBoostStartTraining( CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* weights, - CvMat* sampleIdx, - CvBoostType type ); -/* - * cvBoostNextWeakClassifier - * - * The cvBoostNextWeakClassifier function performs next training - * iteration and caluclates response values and weights for the next weak - * classifier training. - * - * Parameters - * weakEvalVals - * Vector of values obtained by evaluation of each sample with - * the last trained weak classifier (iteration i). Must be of CV_32FC1 type. - * trainClasses - * Vector of classes of training samples. Each element must be 0 or 1, - * and of type CV_32FC1. - * weakTrainVals - * Vector of response values for the next weak classifier training - * (iteration i+1). Must be of type CV_32FC1. - * weights - * Weight vector of training samples for the next weak classifier training - * (iteration i+1). Must be of type CV_32FC1. - * trainer - * A pointer to internal trainer returned by the cvBoostStartTraining - * function call. - * - * Return Values - * The return value is the coefficient for the last trained weak classifier. - * - * Remarks - * weakTrainVals and weights must be exactly the same vectors as used in - * the cvBoostStartTraining function call and should not be modified. - * The function calculates response values and weights for the next weak - * classifier training and stores them into weakTrainVals and weights - * respectively. - * Note, the training of the weak classifier of iteration i+1 using - * weakTrainVals, weight, trainingData is outside of this function. - */ -CV_BOOST_API -float cvBoostNextWeakClassifier( CvMat* weakEvalVals, - CvMat* trainClasses, - CvMat* weakTrainVals, - CvMat* weights, - CvBoostTrainer* trainer ); - -/* - * cvBoostEndTraining - * - * The cvBoostEndTraining function finishes training process and releases - * internally allocated memory. - * - * Parameters - * trainer - * A pointer to a pointer to internal trainer returned by the cvBoostStartTraining - * function call. - */ -CV_BOOST_API -void cvBoostEndTraining( CvBoostTrainer** trainer ); - -/****************************************************************************************\ -* Boosted tree models * -\****************************************************************************************/ - -/* - * CvBtClassifier - * - * The CvBtClassifier structure represents boosted tree model. - * - * Members - * flags - * Flags. If CV_IS_TUNABLE( flags ) != 0 then the model supports tuning. - * eval - * Evaluation function. Returns sample predicted class (0, 1, etc.) - * for classification or predicted value for regression. - * tune - * Tune function. If the model supports tuning then tune call performs - * one more boosting iteration if passed to the function flags parameter - * is CV_TUNABLE otherwise releases internally allocated for tuning memory - * and makes the model untunable. - * NOTE: Since tuning uses the pointers to parameters, - * passed to the cvCreateBtClassifier function, they should not be modified - * or released between tune calls. - * save - * This function stores the model into given file. - * release - * This function releases the model. - * type - * Boosted tree model type. - * numclasses - * Number of classes for CV_LKCLASS type or 1 for all other types. - * numiter - * Number of iterations. Number of weak classifiers is equal to number - * of iterations for all types except CV_LKCLASS. For CV_LKCLASS type - * number of weak classifiers is (numiter * numclasses). - * numfeatures - * Number of features in sample. - * trees - * Stores weak classifiers when the model does not support tuning. - * seq - * Stores weak classifiers when the model supports tuning. - * trainer - * Pointer to internal tuning parameters if the model supports tuning. - */ -typedef struct CvBtClassifier -{ - CV_CLASSIFIER_FIELDS() - - CvBoostType type; - int numclasses; - int numiter; - int numfeatures; - union - { - CvCARTClassifier** trees; - CvSeq* seq; - }; - void* trainer; -} CvBtClassifier; - -/* - * CvBtClassifierTrainParams - * - * The CvBtClassifierTrainParams structure stores training parameters for - * boosted tree model. - * - * Members - * type - * Boosted tree model type. - * numiter - * Desired number of iterations. - * param - * Parameter Model Type Parameter Meaning - * param[0] Any Shrinkage factor - * param[1] CV_MREG alpha. (1-alpha) determines "break-down" point of - * the training procedure, i.e. the fraction of samples - * that can be arbitrary modified without serious - * degrading the quality of the result. - * CV_DABCLASS, Weight trimming factor. - * CV_RABCLASS, - * CV_LBCLASS, - * CV_GABCLASS, - * CV_L2CLASS, - * CV_LKCLASS - * numsplits - * Desired number of splits in each tree. - */ -typedef struct CvBtClassifierTrainParams -{ - CV_CLASSIFIER_TRAIN_PARAM_FIELDS() - - CvBoostType type; - int numiter; - float param[2]; - int numsplits; -} CvBtClassifierTrainParams; - -/* - * cvCreateBtClassifier - * - * The cvCreateBtClassifier function creates boosted tree model. - * - * Parameters - * trainData - * Matrix of feature values. Must have CV_32FC1 type. - * flags - * Determines how samples are stored in trainData. - * One of CV_ROW_SAMPLE or CV_COL_SAMPLE. - * Optionally may be combined with CV_TUNABLE to make tunable model. - * trainClasses - * Vector of responses for regression or classes (0, 1, 2, etc.) for classification. - * typeMask, - * missedMeasurementsMask, - * compIdx - * Not supported. Must be NULL. - * sampleIdx - * Indices of samples used in training. If NULL then all samples are used. - * For CV_DABCLASS, CV_RABCLASS, CV_LBCLASS and CV_GABCLASS must be NULL. - * weights - * Not supported. Must be NULL. - * trainParams - * A pointer to CvBtClassifierTrainParams structure. Training parameters. - * See CvBtClassifierTrainParams description for details. - * - * Return Values - * The return value is a pointer to created boosted tree model of type CvBtClassifier. - * - * Remarks - * The function performs trainParams->numiter training iterations. - * If CV_TUNABLE flag is specified then created model supports tuning. - * In this case additional training iterations may be performed by - * tune function call. - */ -CV_BOOST_API -CvClassifier* cvCreateBtClassifier( CvMat* trainData, - int flags, - CvMat* trainClasses, - CvMat* typeMask, - CvMat* missedMeasurementsMask, - CvMat* compIdx, - CvMat* sampleIdx, - CvMat* weights, - CvClassifierTrainParams* trainParams ); - -/* - * cvCreateBtClassifierFromFile - * - * The cvCreateBtClassifierFromFile function restores previously saved - * boosted tree model from file. - * - * Parameters - * filename - * The name of the file with boosted tree model. - * - * Remarks - * The restored model does not support tuning. - */ -CV_BOOST_API -CvClassifier* cvCreateBtClassifierFromFile( const char* filename ); - -/****************************************************************************************\ -* Utility functions * -\****************************************************************************************/ - -/* - * cvTrimWeights - * - * The cvTrimWeights function performs weight trimming. - * - * Parameters - * weights - * Weights vector. - * idx - * Indices vector of weights that should be considered. - * If it is NULL then all weights are used. - * factor - * Weight trimming factor. Must be in [0, 1] range. - * - * Return Values - * The return value is a vector of indices. If all samples should be used then - * it is equal to idx. In other case the cvReleaseMat function should be called - * to release it. - * - * Remarks - */ -CV_BOOST_API -CvMat* cvTrimWeights( CvMat* weights, CvMat* idx, float factor ); - -/* - * cvReadTrainData - * - * The cvReadTrainData function reads feature values and responses from file. - * - * Parameters - * filename - * The name of the file to be read. - * flags - * One of CV_ROW_SAMPLE or CV_COL_SAMPLE. Determines how feature values - * will be stored. - * trainData - * A pointer to a pointer to created matrix with feature values. - * cvReleaseMat function should be used to destroy created matrix. - * trainClasses - * A pointer to a pointer to created matrix with response values. - * cvReleaseMat function should be used to destroy created matrix. - * - * Remarks - * File format: - * ============================================ - * m n - * value_1_1 value_1_2 ... value_1_n response_1 - * value_2_1 value_2_2 ... value_2_n response_2 - * ... - * value_m_1 value_m_2 ... value_m_n response_m - * ============================================ - * m - * Number of samples - * n - * Number of features in each sample - * value_i_j - * Value of j-th feature of i-th sample - * response_i - * Response value of i-th sample - * For classification problems responses represent classes (0, 1, etc.) - * All values and classes are integer or real numbers. - */ -CV_BOOST_API -void cvReadTrainData( const char* filename, - int flags, - CvMat** trainData, - CvMat** trainClasses ); - - -/* - * cvWriteTrainData - * - * The cvWriteTrainData function stores feature values and responses into file. - * - * Parameters - * filename - * The name of the file. - * flags - * One of CV_ROW_SAMPLE or CV_COL_SAMPLE. Determines how feature values - * are stored. - * trainData - * Feature values matrix. - * trainClasses - * Response values vector. - * sampleIdx - * Vector of idicies of the samples that should be stored. If it is NULL - * then all samples will be stored. - * - * Remarks - * See the cvReadTrainData function for file format description. - */ -CV_BOOST_API -void cvWriteTrainData( const char* filename, - int flags, - CvMat* trainData, - CvMat* trainClasses, - CvMat* sampleIdx ); - -/* - * cvRandShuffle - * - * The cvRandShuffle function perfroms random shuffling of given vector. - * - * Parameters - * vector - * Vector that should be shuffled. - * Must have CV_8UC1, CV_16SC1, CV_32SC1 or CV_32FC1 type. - */ -CV_BOOST_API -void cvRandShuffleVec( CvMat* vector ); - -#endif /* _CVCLASSIFIER_H_ */ diff --git a/apps/haartraining/cvcommon.cpp b/apps/haartraining/cvcommon.cpp deleted file mode 100644 index e23fab263..000000000 --- a/apps/haartraining/cvcommon.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -#include "_cvcommon.h" - -#include -#include - -#include -#include -#ifdef _WIN32 -#include -#endif /* _WIN32 */ - -int icvMkDir( const char* filename ) -{ - char path[PATH_MAX]; - char* p; - int pos; - -#ifdef _WIN32 - struct _stat st; -#else /* _WIN32 */ - struct stat st; - mode_t mode; - - mode = 0755; -#endif /* _WIN32 */ - - strcpy( path, filename ); - - p = path; - for( ; ; ) - { - pos = (int)strcspn( p, "/\\" ); - - if( pos == (int) strlen( p ) ) break; - if( pos != 0 ) - { - p[pos] = '\0'; - -#ifdef _WIN32 - if( p[pos-1] != ':' ) - { - if( _stat( path, &st ) != 0 ) - { - if( _mkdir( path ) != 0 ) return 0; - } - } -#else /* _WIN32 */ - if( stat( path, &st ) != 0 ) - { - if( mkdir( path, mode ) != 0 ) return 0; - } -#endif /* _WIN32 */ - } - - p[pos] = '/'; - - p += pos + 1; - } - - return 1; -} - -#if 0 -/* debug functions */ -void icvSave( const CvArr* ptr, const char* filename, int line ) -{ - CvFileStorage* fs; - char buf[PATH_MAX]; - const char* name; - - name = strrchr( filename, '\\' ); - if( !name ) name = strrchr( filename, '/' ); - if( !name ) name = filename; - else name++; /* skip '/' or '\\' */ - - sprintf( buf, "%s-%d-%d", name, line, time( NULL ) ); - fs = cvOpenFileStorage( buf, NULL, CV_STORAGE_WRITE_TEXT ); - if( !fs ) return; - cvWrite( fs, "debug", ptr ); - cvReleaseFileStorage( &fs ); -} -#endif // #if 0 - -/* End of file. */ diff --git a/apps/haartraining/cvhaarclassifier.cpp b/apps/haartraining/cvhaarclassifier.cpp deleted file mode 100644 index f21797612..000000000 --- a/apps/haartraining/cvhaarclassifier.cpp +++ /dev/null @@ -1,835 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * cvhaarclassifier.cpp - * - * haar classifiers (stump, CART, stage, cascade) - */ - -#include "_cvhaartraining.h" - - -CvIntHaarClassifier* icvCreateCARTHaarClassifier( int count ) -{ - CvCARTHaarClassifier* cart; - size_t datasize; - - datasize = sizeof( *cart ) + - ( sizeof( int ) + - sizeof( CvTHaarFeature ) + sizeof( CvFastHaarFeature ) + - sizeof( float ) + sizeof( int ) + sizeof( int ) ) * count + - sizeof( float ) * (count + 1); - - cart = (CvCARTHaarClassifier*) cvAlloc( datasize ); - memset( cart, 0, datasize ); - - cart->feature = (CvTHaarFeature*) (cart + 1); - cart->fastfeature = (CvFastHaarFeature*) (cart->feature + count); - cart->threshold = (float*) (cart->fastfeature + count); - cart->left = (int*) (cart->threshold + count); - cart->right = (int*) (cart->left + count); - cart->val = (float*) (cart->right + count); - cart->compidx = (int*) (cart->val + count + 1 ); - cart->count = count; - cart->eval = icvEvalCARTHaarClassifier; - cart->save = icvSaveCARTHaarClassifier; - cart->release = icvReleaseHaarClassifier; - - return (CvIntHaarClassifier*) cart; -} - - -void icvReleaseHaarClassifier( CvIntHaarClassifier** classifier ) -{ - cvFree( classifier ); - *classifier = NULL; -} - - -void icvInitCARTHaarClassifier( CvCARTHaarClassifier* carthaar, CvCARTClassifier* cart, - CvIntHaarFeatures* intHaarFeatures ) -{ - int i; - - for( i = 0; i < cart->count; i++ ) - { - carthaar->feature[i] = intHaarFeatures->feature[cart->compidx[i]]; - carthaar->fastfeature[i] = intHaarFeatures->fastfeature[cart->compidx[i]]; - carthaar->threshold[i] = cart->threshold[i]; - carthaar->left[i] = cart->left[i]; - carthaar->right[i] = cart->right[i]; - carthaar->val[i] = cart->val[i]; - carthaar->compidx[i] = cart->compidx[i]; - } - carthaar->count = cart->count; - carthaar->val[cart->count] = cart->val[cart->count]; -} - - -float icvEvalCARTHaarClassifier( CvIntHaarClassifier* classifier, - sum_type* sum, sum_type* tilted, float normfactor ) -{ - int idx = 0; - - do - { - if( cvEvalFastHaarFeature( - ((CvCARTHaarClassifier*) classifier)->fastfeature + idx, sum, tilted ) - < (((CvCARTHaarClassifier*) classifier)->threshold[idx] * normfactor) ) - { - idx = ((CvCARTHaarClassifier*) classifier)->left[idx]; - } - else - { - idx = ((CvCARTHaarClassifier*) classifier)->right[idx]; - } - } while( idx > 0 ); - - return ((CvCARTHaarClassifier*) classifier)->val[-idx]; -} - - -CvIntHaarClassifier* icvCreateStageHaarClassifier( int count, float threshold ) -{ - CvStageHaarClassifier* stage; - size_t datasize; - - datasize = sizeof( *stage ) + sizeof( CvIntHaarClassifier* ) * count; - stage = (CvStageHaarClassifier*) cvAlloc( datasize ); - memset( stage, 0, datasize ); - - stage->count = count; - stage->threshold = threshold; - stage->classifier = (CvIntHaarClassifier**) (stage + 1); - - stage->eval = icvEvalStageHaarClassifier; - stage->save = icvSaveStageHaarClassifier; - stage->release = icvReleaseStageHaarClassifier; - - return (CvIntHaarClassifier*) stage; -} - - -void icvReleaseStageHaarClassifier( CvIntHaarClassifier** classifier ) -{ - int i; - - for( i = 0; i < ((CvStageHaarClassifier*) *classifier)->count; i++ ) - { - if( ((CvStageHaarClassifier*) *classifier)->classifier[i] != NULL ) - { - ((CvStageHaarClassifier*) *classifier)->classifier[i]->release( - &(((CvStageHaarClassifier*) *classifier)->classifier[i]) ); - } - } - - cvFree( classifier ); - *classifier = NULL; -} - - -float icvEvalStageHaarClassifier( CvIntHaarClassifier* classifier, - sum_type* sum, sum_type* tilted, float normfactor ) -{ - int i; - float stage_sum; - - stage_sum = 0.0F; - for( i = 0; i < ((CvStageHaarClassifier*) classifier)->count; i++ ) - { - stage_sum += - ((CvStageHaarClassifier*) classifier)->classifier[i]->eval( - ((CvStageHaarClassifier*) classifier)->classifier[i], - sum, tilted, normfactor ); - } - - return stage_sum; -} - - -CvIntHaarClassifier* icvCreateCascadeHaarClassifier( int count ) -{ - CvCascadeHaarClassifier* ptr; - size_t datasize; - - datasize = sizeof( *ptr ) + sizeof( CvIntHaarClassifier* ) * count; - ptr = (CvCascadeHaarClassifier*) cvAlloc( datasize ); - memset( ptr, 0, datasize ); - - ptr->count = count; - ptr->classifier = (CvIntHaarClassifier**) (ptr + 1); - - ptr->eval = icvEvalCascadeHaarClassifier; - ptr->save = NULL; - ptr->release = icvReleaseCascadeHaarClassifier; - - return (CvIntHaarClassifier*) ptr; -} - - -void icvReleaseCascadeHaarClassifier( CvIntHaarClassifier** classifier ) -{ - int i; - - for( i = 0; i < ((CvCascadeHaarClassifier*) *classifier)->count; i++ ) - { - if( ((CvCascadeHaarClassifier*) *classifier)->classifier[i] != NULL ) - { - ((CvCascadeHaarClassifier*) *classifier)->classifier[i]->release( - &(((CvCascadeHaarClassifier*) *classifier)->classifier[i]) ); - } - } - - cvFree( classifier ); - *classifier = NULL; -} - - -float icvEvalCascadeHaarClassifier( CvIntHaarClassifier* classifier, - sum_type* sum, sum_type* tilted, float normfactor ) -{ - int i; - - for( i = 0; i < ((CvCascadeHaarClassifier*) classifier)->count; i++ ) - { - if( ((CvCascadeHaarClassifier*) classifier)->classifier[i]->eval( - ((CvCascadeHaarClassifier*) classifier)->classifier[i], - sum, tilted, normfactor ) - < ( ((CvStageHaarClassifier*) - ((CvCascadeHaarClassifier*) classifier)->classifier[i])->threshold - - CV_THRESHOLD_EPS) ) - { - return 0.0; - } - } - - return 1.0; -} - - -void icvSaveHaarFeature( CvTHaarFeature* feature, FILE* file ) -{ - fprintf( file, "%d\n", ( ( feature->rect[2].weight == 0.0F ) ? 2 : 3) ); - fprintf( file, "%d %d %d %d %d %d\n", - feature->rect[0].r.x, - feature->rect[0].r.y, - feature->rect[0].r.width, - feature->rect[0].r.height, - 0, - (int) (feature->rect[0].weight) ); - fprintf( file, "%d %d %d %d %d %d\n", - feature->rect[1].r.x, - feature->rect[1].r.y, - feature->rect[1].r.width, - feature->rect[1].r.height, - 0, - (int) (feature->rect[1].weight) ); - if( feature->rect[2].weight != 0.0F ) - { - fprintf( file, "%d %d %d %d %d %d\n", - feature->rect[2].r.x, - feature->rect[2].r.y, - feature->rect[2].r.width, - feature->rect[2].r.height, - 0, - (int) (feature->rect[2].weight) ); - } - fprintf( file, "%s\n", &(feature->desc[0]) ); -} - - -void icvLoadHaarFeature( CvTHaarFeature* feature, FILE* file ) -{ - int nrect; - int j; - int tmp; - int weight; - - nrect = 0; - int values_read = fscanf( file, "%d", &nrect ); - CV_Assert(values_read == 1); - - assert( nrect <= CV_HAAR_FEATURE_MAX ); - - for( j = 0; j < nrect; j++ ) - { - values_read = fscanf( file, "%d %d %d %d %d %d", - &(feature->rect[j].r.x), - &(feature->rect[j].r.y), - &(feature->rect[j].r.width), - &(feature->rect[j].r.height), - &tmp, &weight ); - CV_Assert(values_read == 6); - feature->rect[j].weight = (float) weight; - } - for( j = nrect; j < CV_HAAR_FEATURE_MAX; j++ ) - { - feature->rect[j].r.x = 0; - feature->rect[j].r.y = 0; - feature->rect[j].r.width = 0; - feature->rect[j].r.height = 0; - feature->rect[j].weight = 0.0f; - } - values_read = fscanf( file, "%s", &(feature->desc[0]) ); - CV_Assert(values_read == 1); - feature->tilted = ( feature->desc[0] == 't' ); -} - - -void icvSaveCARTHaarClassifier( CvIntHaarClassifier* classifier, FILE* file ) -{ - int i; - int count; - - count = ((CvCARTHaarClassifier*) classifier)->count; - fprintf( file, "%d\n", count ); - for( i = 0; i < count; i++ ) - { - icvSaveHaarFeature( &(((CvCARTHaarClassifier*) classifier)->feature[i]), file ); - fprintf( file, "%e %d %d\n", - ((CvCARTHaarClassifier*) classifier)->threshold[i], - ((CvCARTHaarClassifier*) classifier)->left[i], - ((CvCARTHaarClassifier*) classifier)->right[i] ); - } - for( i = 0; i <= count; i++ ) - { - fprintf( file, "%e ", ((CvCARTHaarClassifier*) classifier)->val[i] ); - } - fprintf( file, "\n" ); -} - - -CvIntHaarClassifier* icvLoadCARTHaarClassifier( FILE* file, int step ) -{ - CvCARTHaarClassifier* ptr; - int i; - int count; - - ptr = NULL; - int values_read = fscanf( file, "%d", &count ); - CV_Assert(values_read == 1); - - if( count > 0 ) - { - ptr = (CvCARTHaarClassifier*) icvCreateCARTHaarClassifier( count ); - for( i = 0; i < count; i++ ) - { - icvLoadHaarFeature( &(ptr->feature[i]), file ); - values_read = fscanf( file, "%f %d %d", &(ptr->threshold[i]), &(ptr->left[i]), - &(ptr->right[i]) ); - CV_Assert(values_read == 3); - } - for( i = 0; i <= count; i++ ) - { - values_read = fscanf( file, "%f", &(ptr->val[i]) ); - CV_Assert(values_read == 1); - } - icvConvertToFastHaarFeature( ptr->feature, ptr->fastfeature, ptr->count, step ); - } - - return (CvIntHaarClassifier*) ptr; -} - - -void icvSaveStageHaarClassifier( CvIntHaarClassifier* classifier, FILE* file ) -{ - int count; - int i; - float threshold; - - count = ((CvStageHaarClassifier*) classifier)->count; - fprintf( file, "%d\n", count ); - for( i = 0; i < count; i++ ) - { - ((CvStageHaarClassifier*) classifier)->classifier[i]->save( - ((CvStageHaarClassifier*) classifier)->classifier[i], file ); - } - - threshold = ((CvStageHaarClassifier*) classifier)->threshold; - - /* to be compatible with the previous implementation */ - /* threshold = 2.0F * ((CvStageHaarClassifier*) classifier)->threshold - count; */ - - fprintf( file, "%e\n", threshold ); -} - - - -static CvIntHaarClassifier* icvLoadCARTStageHaarClassifierF( FILE* file, int step ) -{ - CvStageHaarClassifier* ptr = NULL; - - //CV_FUNCNAME( "icvLoadCARTStageHaarClassifierF" ); - - __BEGIN__; - - if( file != NULL ) - { - int count; - int i; - float threshold; - - count = 0; - int values_read = fscanf( file, "%d", &count ); - CV_Assert(values_read == 1); - if( count > 0 ) - { - ptr = (CvStageHaarClassifier*) icvCreateStageHaarClassifier( count, 0.0F ); - for( i = 0; i < count; i++ ) - { - ptr->classifier[i] = icvLoadCARTHaarClassifier( file, step ); - } - - values_read = fscanf( file, "%f", &threshold ); - CV_Assert(values_read == 1); - - ptr->threshold = threshold; - /* to be compatible with the previous implementation */ - /* ptr->threshold = 0.5F * (threshold + count); */ - } - if( feof( file ) ) - { - ptr->release( (CvIntHaarClassifier**) &ptr ); - ptr = NULL; - } - } - - __END__; - - return (CvIntHaarClassifier*) ptr; -} - - -CvIntHaarClassifier* icvLoadCARTStageHaarClassifier( const char* filename, int step ) -{ - CvIntHaarClassifier* ptr = NULL; - - CV_FUNCNAME( "icvLoadCARTStageHaarClassifier" ); - - __BEGIN__; - - FILE* file; - - file = fopen( filename, "r" ); - if( file ) - { - CV_CALL( ptr = icvLoadCARTStageHaarClassifierF( file, step ) ); - fclose( file ); - } - - __END__; - - return ptr; -} - -/* tree cascade classifier */ - -/* evaluates a tree cascade classifier */ - -float icvEvalTreeCascadeClassifier( CvIntHaarClassifier* classifier, - sum_type* sum, sum_type* tilted, float normfactor ) -{ - CvTreeCascadeNode* ptr; - - ptr = ((CvTreeCascadeClassifier*) classifier)->root; - - while( ptr ) - { - if( ptr->stage->eval( (CvIntHaarClassifier*) ptr->stage, - sum, tilted, normfactor ) - >= ptr->stage->threshold - CV_THRESHOLD_EPS ) - { - ptr = ptr->child; - } - else - { - while( ptr && ptr->next == NULL ) ptr = ptr->parent; - if( ptr == NULL ) return 0.0F; - ptr = ptr->next; - } - } - - return 1.0F; -} - -/* sets path int the tree form the root to the leaf node */ - -void icvSetLeafNode( CvTreeCascadeClassifier* tcc, CvTreeCascadeNode* leaf ) -{ - CV_FUNCNAME( "icvSetLeafNode" ); - - __BEGIN__; - - CvTreeCascadeNode* ptr; - - ptr = NULL; - while( leaf ) - { - leaf->child_eval = ptr; - ptr = leaf; - leaf = leaf->parent; - } - - leaf = tcc->root; - while( leaf && leaf != ptr ) leaf = leaf->next; - if( leaf != ptr ) - CV_ERROR( CV_StsError, "Invalid tcc or leaf node." ); - - tcc->root_eval = ptr; - - __END__; -} - -/* evaluates a tree cascade classifier. used in filtering */ - -float icvEvalTreeCascadeClassifierFilter( CvIntHaarClassifier* classifier, sum_type* sum, - sum_type* tilted, float normfactor ) -{ - CvTreeCascadeNode* ptr; - //CvTreeCascadeClassifier* tree; - - //tree = (CvTreeCascadeClassifier*) classifier; - - - - ptr = ((CvTreeCascadeClassifier*) classifier)->root_eval; - while( ptr ) - { - if( ptr->stage->eval( (CvIntHaarClassifier*) ptr->stage, - sum, tilted, normfactor ) - < ptr->stage->threshold - CV_THRESHOLD_EPS ) - { - return 0.0F; - } - ptr = ptr->child_eval; - } - - return 1.0F; -} - -/* creates tree cascade node */ - -CvTreeCascadeNode* icvCreateTreeCascadeNode() -{ - CvTreeCascadeNode* ptr = NULL; - - CV_FUNCNAME( "icvCreateTreeCascadeNode" ); - - __BEGIN__; - size_t data_size; - - data_size = sizeof( *ptr ); - CV_CALL( ptr = (CvTreeCascadeNode*) cvAlloc( data_size ) ); - memset( ptr, 0, data_size ); - - __END__; - - return ptr; -} - -/* releases all tree cascade nodes accessible via links */ - -void icvReleaseTreeCascadeNodes( CvTreeCascadeNode** node ) -{ - //CV_FUNCNAME( "icvReleaseTreeCascadeNodes" ); - - __BEGIN__; - - if( node && *node ) - { - CvTreeCascadeNode* ptr; - CvTreeCascadeNode* ptr_; - - ptr = *node; - - while( ptr ) - { - while( ptr->child ) ptr = ptr->child; - - if( ptr->stage ) ptr->stage->release( (CvIntHaarClassifier**) &ptr->stage ); - ptr_ = ptr; - - while( ptr && ptr->next == NULL ) ptr = ptr->parent; - if( ptr ) ptr = ptr->next; - - cvFree( &ptr_ ); - } - } - - __END__; -} - - -/* releases tree cascade classifier */ - -void icvReleaseTreeCascadeClassifier( CvIntHaarClassifier** classifier ) -{ - if( classifier && *classifier ) - { - icvReleaseTreeCascadeNodes( &((CvTreeCascadeClassifier*) *classifier)->root ); - cvFree( classifier ); - *classifier = NULL; - } -} - - -void icvPrintTreeCascade( CvTreeCascadeNode* root ) -{ - //CV_FUNCNAME( "icvPrintTreeCascade" ); - - __BEGIN__; - - CvTreeCascadeNode* node; - CvTreeCascadeNode* n; - char buf0[256]; - char buf[256]; - int level; - int i; - int max_level; - - node = root; - level = max_level = 0; - while( node ) - { - while( node->child ) { node = node->child; level++; } - if( level > max_level ) { max_level = level; } - while( node && !node->next ) { node = node->parent; level--; } - if( node ) node = node->next; - } - - printf( "\nTree Classifier\n" ); - printf( "Stage\n" ); - for( i = 0; i <= max_level; i++ ) printf( "+---" ); - printf( "+\n" ); - for( i = 0; i <= max_level; i++ ) printf( "|%3d", i ); - printf( "|\n" ); - for( i = 0; i <= max_level; i++ ) printf( "+---" ); - printf( "+\n\n" ); - - node = root; - - buf[0] = 0; - while( node ) - { - sprintf( buf + strlen( buf ), "%3d", node->idx ); - while( node->child ) - { - node = node->child; - sprintf( buf + strlen( buf ), - ((node->idx < 10) ? "---%d" : ((node->idx < 100) ? "--%d" : "-%d")), - node->idx ); - } - printf( " %s\n", buf ); - - while( node && !node->next ) { node = node->parent; } - if( node ) - { - node = node->next; - - n = node->parent; - buf[0] = 0; - while( n ) - { - if( n->next ) - sprintf( buf0, " | %s", buf ); - else - sprintf( buf0, " %s", buf ); - strcpy( buf, buf0 ); - n = n->parent; - } - printf( " %s |\n", buf ); - } - } - printf( "\n" ); - fflush( stdout ); - - __END__; -} - - - -CvIntHaarClassifier* icvLoadTreeCascadeClassifier( const char* filename, int step, - int* splits ) -{ - CvTreeCascadeClassifier* ptr = NULL; - CvTreeCascadeNode** nodes = NULL; - - CV_FUNCNAME( "icvLoadTreeCascadeClassifier" ); - - __BEGIN__; - - size_t data_size; - CvStageHaarClassifier* stage; - char stage_name[PATH_MAX]; - char* suffix; - int i, num; - FILE* f; - int result, parent=0, next=0; - int stub; - - if( !splits ) splits = &stub; - - *splits = 0; - - data_size = sizeof( *ptr ); - - CV_CALL( ptr = (CvTreeCascadeClassifier*) cvAlloc( data_size ) ); - memset( ptr, 0, data_size ); - - ptr->eval = icvEvalTreeCascadeClassifier; - ptr->release = icvReleaseTreeCascadeClassifier; - - sprintf( stage_name, "%s/", filename ); - suffix = stage_name + strlen( stage_name ); - - for( i = 0; ; i++ ) - { - sprintf( suffix, "%d/%s", i, CV_STAGE_CART_FILE_NAME ); - f = fopen( stage_name, "r" ); - if( !f ) break; - fclose( f ); - } - num = i; - - if( num < 1 ) EXIT; - - data_size = sizeof( *nodes ) * num; - CV_CALL( nodes = (CvTreeCascadeNode**) cvAlloc( data_size ) ); - - for( i = 0; i < num; i++ ) - { - sprintf( suffix, "%d/%s", i, CV_STAGE_CART_FILE_NAME ); - f = fopen( stage_name, "r" ); - CV_CALL( stage = (CvStageHaarClassifier*) - icvLoadCARTStageHaarClassifierF( f, step ) ); - - result = ( f && stage ) ? fscanf( f, "%d%d", &parent, &next ) : 0; - if( f ) fclose( f ); - - if( result != 2 ) - { - num = i; - break; - } - - printf( "Stage %d loaded\n", i ); - - if( parent >= i || (next != -1 && next != i + 1) ) - CV_ERROR( CV_StsError, "Invalid tree links" ); - - CV_CALL( nodes[i] = icvCreateTreeCascadeNode() ); - nodes[i]->stage = stage; - nodes[i]->idx = i; - nodes[i]->parent = (parent != -1 ) ? nodes[parent] : NULL; - nodes[i]->next = ( next != -1 ) ? nodes[i] : NULL; - nodes[i]->child = NULL; - } - for( i = 0; i < num; i++ ) - { - if( nodes[i]->next ) - { - (*splits)++; - nodes[i]->next = nodes[i+1]; - } - if( nodes[i]->parent && nodes[i]->parent->child == NULL ) - { - nodes[i]->parent->child = nodes[i]; - } - } - ptr->root = nodes[0]; - ptr->next_idx = num; - - __END__; - - cvFree( &nodes ); - - return (CvIntHaarClassifier*) ptr; -} - - -CvTreeCascadeNode* icvFindDeepestLeaves( CvTreeCascadeClassifier* tcc ) -{ - CvTreeCascadeNode* leaves; - - //CV_FUNCNAME( "icvFindDeepestLeaves" ); - - __BEGIN__; - - int level, cur_level; - CvTreeCascadeNode* ptr; - CvTreeCascadeNode* last; - - leaves = last = NULL; - - ptr = tcc->root; - level = -1; - cur_level = 0; - - /* find leaves with maximal level */ - while( ptr ) - { - if( ptr->child ) { ptr = ptr->child; cur_level++; } - else - { - if( cur_level == level ) - { - last->next_same_level = ptr; - ptr->next_same_level = NULL; - last = ptr; - } - if( cur_level > level ) - { - level = cur_level; - leaves = last = ptr; - ptr->next_same_level = NULL; - } - while( ptr && ptr->next == NULL ) { ptr = ptr->parent; cur_level--; } - if( ptr ) ptr = ptr->next; - } - } - - __END__; - - return leaves; -} - -/* End of file. */ diff --git a/apps/haartraining/cvhaartraining.cpp b/apps/haartraining/cvhaartraining.cpp deleted file mode 100644 index 2fcf76a4b..000000000 --- a/apps/haartraining/cvhaartraining.cpp +++ /dev/null @@ -1,3060 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * cvhaartraining.cpp - * - * training of cascade of boosted classifiers based on haar features - */ - -#include "cvhaartraining.h" -#include "_cvhaartraining.h" - -#include -#include -#include -#include -#include - -#include "highgui.h" - -#ifdef CV_VERBOSE -#include - -#ifdef _WIN32 -/* use clock() function insted of time() */ -#define TIME( arg ) (((double) clock()) / CLOCKS_PER_SEC) -#else -#define TIME( arg ) (time( arg )) -#endif /* _WIN32 */ - -#endif /* CV_VERBOSE */ - -#if defined CV_OPENMP && (defined _MSC_VER || defined CV_ICC) -#define CV_OPENMP 1 -#else -#undef CV_OPENMP -#endif - -typedef struct CvBackgroundData -{ - int count; - char** filename; - int last; - int round; - CvSize winsize; -} CvBackgroundData; - -typedef struct CvBackgroundReader -{ - CvMat src; - CvMat img; - CvPoint offset; - float scale; - float scalefactor; - float stepfactor; - CvPoint point; -} CvBackgroundReader; - -/* - * Background reader - * Created in each thread - */ -CvBackgroundReader* cvbgreader = NULL; - -#if defined CV_OPENMP -#pragma omp threadprivate(cvbgreader) -#endif - -CvBackgroundData* cvbgdata = NULL; - - -/* - * get sum image offsets for corner points - * step - row step (measured in image pixels!) of sum image - */ -#define CV_SUM_OFFSETS( p0, p1, p2, p3, rect, step ) \ - /* (x, y) */ \ - (p0) = (rect).x + (step) * (rect).y; \ - /* (x + w, y) */ \ - (p1) = (rect).x + (rect).width + (step) * (rect).y; \ - /* (x + w, y) */ \ - (p2) = (rect).x + (step) * ((rect).y + (rect).height); \ - /* (x + w, y + h) */ \ - (p3) = (rect).x + (rect).width + (step) * ((rect).y + (rect).height); - -/* - * get tilted image offsets for corner points - * step - row step (measured in image pixels!) of tilted image - */ -#define CV_TILTED_OFFSETS( p0, p1, p2, p3, rect, step ) \ - /* (x, y) */ \ - (p0) = (rect).x + (step) * (rect).y; \ - /* (x - h, y + h) */ \ - (p1) = (rect).x - (rect).height + (step) * ((rect).y + (rect).height);\ - /* (x + w, y + w) */ \ - (p2) = (rect).x + (rect).width + (step) * ((rect).y + (rect).width); \ - /* (x + w - h, y + w + h) */ \ - (p3) = (rect).x + (rect).width - (rect).height \ - + (step) * ((rect).y + (rect).width + (rect).height); - - -/* - * icvCreateIntHaarFeatures - * - * Create internal representation of haar features - * - * mode: - * 0 - BASIC = Viola - * 1 - CORE = All upright - * 2 - ALL = All features - */ -static -CvIntHaarFeatures* icvCreateIntHaarFeatures( CvSize winsize, - int mode, - int symmetric ) -{ - CvIntHaarFeatures* features = NULL; - CvTHaarFeature haarFeature; - - CvMemStorage* storage = NULL; - CvSeq* seq = NULL; - CvSeqWriter writer; - - int s0 = 36; /* minimum total area size of basic haar feature */ - int s1 = 12; /* minimum total area size of tilted haar features 2 */ - int s2 = 18; /* minimum total area size of tilted haar features 3 */ - int s3 = 24; /* minimum total area size of tilted haar features 4 */ - - int x = 0; - int y = 0; - int dx = 0; - int dy = 0; - -#if 0 - float factor = 1.0F; - - factor = ((float) winsize.width) * winsize.height / (24 * 24); - - s0 = (int) (s0 * factor); - s1 = (int) (s1 * factor); - s2 = (int) (s2 * factor); - s3 = (int) (s3 * factor); -#else - s0 = 1; - s1 = 1; - s2 = 1; - s3 = 1; -#endif - - /* CV_VECTOR_CREATE( vec, CvIntHaarFeature, size, maxsize ) */ - storage = cvCreateMemStorage(); - cvStartWriteSeq( 0, sizeof( CvSeq ), sizeof( haarFeature ), storage, &writer ); - - for( x = 0; x < winsize.width; x++ ) - { - for( y = 0; y < winsize.height; y++ ) - { - for( dx = 1; dx <= winsize.width; dx++ ) - { - for( dy = 1; dy <= winsize.height; dy++ ) - { - // haar_x2 - if ( (x+dx*2 <= winsize.width) && (y+dy <= winsize.height) ) { - if (dx*2*dy < s0) continue; - if (!symmetric || (x+x+dx*2 <=winsize.width)) { - haarFeature = cvHaarFeature( "haar_x2", - x, y, dx*2, dy, -1, - x+dx, y, dx , dy, +2 ); - /* CV_VECTOR_PUSH( vec, CvIntHaarFeature, haarFeature, size, maxsize, step ) */ - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - // haar_y2 - if ( (x+dx <= winsize.width) && (y+dy*2 <= winsize.height) ) { - if (dx*2*dy < s0) continue; - if (!symmetric || (x+x+dx <= winsize.width)) { - haarFeature = cvHaarFeature( "haar_y2", - x, y, dx, dy*2, -1, - x, y+dy, dx, dy, +2 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - // haar_x3 - if ( (x+dx*3 <= winsize.width) && (y+dy <= winsize.height) ) { - if (dx*3*dy < s0) continue; - if (!symmetric || (x+x+dx*3 <=winsize.width)) { - haarFeature = cvHaarFeature( "haar_x3", - x, y, dx*3, dy, -1, - x+dx, y, dx, dy, +3 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - // haar_y3 - if ( (x+dx <= winsize.width) && (y+dy*3 <= winsize.height) ) { - if (dx*3*dy < s0) continue; - if (!symmetric || (x+x+dx <= winsize.width)) { - haarFeature = cvHaarFeature( "haar_y3", - x, y, dx, dy*3, -1, - x, y+dy, dx, dy, +3 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - if( mode != 0 /*BASIC*/ ) { - // haar_x4 - if ( (x+dx*4 <= winsize.width) && (y+dy <= winsize.height) ) { - if (dx*4*dy < s0) continue; - if (!symmetric || (x+x+dx*4 <=winsize.width)) { - haarFeature = cvHaarFeature( "haar_x4", - x, y, dx*4, dy, -1, - x+dx, y, dx*2, dy, +2 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - // haar_y4 - if ( (x+dx <= winsize.width ) && (y+dy*4 <= winsize.height) ) { - if (dx*4*dy < s0) continue; - if (!symmetric || (x+x+dx <=winsize.width)) { - haarFeature = cvHaarFeature( "haar_y4", - x, y, dx, dy*4, -1, - x, y+dy, dx, dy*2, +2 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - } - - // x2_y2 - if ( (x+dx*2 <= winsize.width) && (y+dy*2 <= winsize.height) ) { - if (dx*4*dy < s0) continue; - if (!symmetric || (x+x+dx*2 <=winsize.width)) { - haarFeature = cvHaarFeature( "haar_x2_y2", - x , y, dx*2, dy*2, -1, - x , y , dx , dy, +2, - x+dx, y+dy, dx , dy, +2 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - if (mode != 0 /*BASIC*/) { - // point - if ( (x+dx*3 <= winsize.width) && (y+dy*3 <= winsize.height) ) { - if (dx*9*dy < s0) continue; - if (!symmetric || (x+x+dx*3 <=winsize.width)) { - haarFeature = cvHaarFeature( "haar_point", - x , y, dx*3, dy*3, -1, - x+dx, y+dy, dx , dy , +9); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - } - - if (mode == 2 /*ALL*/) { - // tilted haar_x2 (x, y, w, h, b, weight) - if ( (x+2*dx <= winsize.width) && (y+2*dx+dy <= winsize.height) && (x-dy>= 0) ) { - if (dx*2*dy < s1) continue; - - if (!symmetric || (x <= (winsize.width / 2) )) { - haarFeature = cvHaarFeature( "tilted_haar_x2", - x, y, dx*2, dy, -1, - x, y, dx , dy, +2 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - // tilted haar_y2 (x, y, w, h, b, weight) - if ( (x+dx <= winsize.width) && (y+dx+2*dy <= winsize.height) && (x-2*dy>= 0) ) { - if (dx*2*dy < s1) continue; - - if (!symmetric || (x <= (winsize.width / 2) )) { - haarFeature = cvHaarFeature( "tilted_haar_y2", - x, y, dx, 2*dy, -1, - x, y, dx, dy, +2 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - // tilted haar_x3 (x, y, w, h, b, weight) - if ( (x+3*dx <= winsize.width) && (y+3*dx+dy <= winsize.height) && (x-dy>= 0) ) { - if (dx*3*dy < s2) continue; - - if (!symmetric || (x <= (winsize.width / 2) )) { - haarFeature = cvHaarFeature( "tilted_haar_x3", - x, y, dx*3, dy, -1, - x+dx, y+dx, dx , dy, +3 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - // tilted haar_y3 (x, y, w, h, b, weight) - if ( (x+dx <= winsize.width) && (y+dx+3*dy <= winsize.height) && (x-3*dy>= 0) ) { - if (dx*3*dy < s2) continue; - - if (!symmetric || (x <= (winsize.width / 2) )) { - haarFeature = cvHaarFeature( "tilted_haar_y3", - x, y, dx, 3*dy, -1, - x-dy, y+dy, dx, dy, +3 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - - // tilted haar_x4 (x, y, w, h, b, weight) - if ( (x+4*dx <= winsize.width) && (y+4*dx+dy <= winsize.height) && (x-dy>= 0) ) { - if (dx*4*dy < s3) continue; - - if (!symmetric || (x <= (winsize.width / 2) )) { - haarFeature = cvHaarFeature( "tilted_haar_x4", - - - x, y, dx*4, dy, -1, - x+dx, y+dx, dx*2, dy, +2 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - // tilted haar_y4 (x, y, w, h, b, weight) - if ( (x+dx <= winsize.width) && (y+dx+4*dy <= winsize.height) && (x-4*dy>= 0) ) { - if (dx*4*dy < s3) continue; - - if (!symmetric || (x <= (winsize.width / 2) )) { - haarFeature = cvHaarFeature( "tilted_haar_y4", - x, y, dx, 4*dy, -1, - x-dy, y+dy, dx, 2*dy, +2 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - - - /* - - // tilted point - if ( (x+dx*3 <= winsize.width - 1) && (y+dy*3 <= winsize.height - 1) && (x-3*dy>= 0)) { - if (dx*9*dy < 36) continue; - if (!symmetric || (x <= (winsize.width / 2) )) { - haarFeature = cvHaarFeature( "tilted_haar_point", - x, y, dx*3, dy*3, -1, - x, y+dy, dx , dy, +9 ); - CV_WRITE_SEQ_ELEM( haarFeature, writer ); - } - } - */ - } - } - } - } - } - - seq = cvEndWriteSeq( &writer ); - features = (CvIntHaarFeatures*) cvAlloc( sizeof( CvIntHaarFeatures ) + - ( sizeof( CvTHaarFeature ) + sizeof( CvFastHaarFeature ) ) * seq->total ); - features->feature = (CvTHaarFeature*) (features + 1); - features->fastfeature = (CvFastHaarFeature*) ( features->feature + seq->total ); - features->count = seq->total; - features->winsize = winsize; - cvCvtSeqToArray( seq, (CvArr*) features->feature ); - cvReleaseMemStorage( &storage ); - - icvConvertToFastHaarFeature( features->feature, features->fastfeature, - features->count, (winsize.width + 1) ); - - return features; -} - -static -void icvReleaseIntHaarFeatures( CvIntHaarFeatures** intHaarFeatures ) -{ - if( intHaarFeatures != NULL && (*intHaarFeatures) != NULL ) - { - cvFree( intHaarFeatures ); - (*intHaarFeatures) = NULL; - } -} - - -void icvConvertToFastHaarFeature( CvTHaarFeature* haarFeature, - CvFastHaarFeature* fastHaarFeature, - int size, int step ) -{ - int i = 0; - int j = 0; - - for( i = 0; i < size; i++ ) - { - fastHaarFeature[i].tilted = haarFeature[i].tilted; - if( !fastHaarFeature[i].tilted ) - { - for( j = 0; j < CV_HAAR_FEATURE_MAX; j++ ) - { - fastHaarFeature[i].rect[j].weight = haarFeature[i].rect[j].weight; - if( fastHaarFeature[i].rect[j].weight == 0.0F ) - { - break; - } - CV_SUM_OFFSETS( fastHaarFeature[i].rect[j].p0, - fastHaarFeature[i].rect[j].p1, - fastHaarFeature[i].rect[j].p2, - fastHaarFeature[i].rect[j].p3, - haarFeature[i].rect[j].r, step ) - } - - } - else - { - for( j = 0; j < CV_HAAR_FEATURE_MAX; j++ ) - { - fastHaarFeature[i].rect[j].weight = haarFeature[i].rect[j].weight; - if( fastHaarFeature[i].rect[j].weight == 0.0F ) - { - break; - } - CV_TILTED_OFFSETS( fastHaarFeature[i].rect[j].p0, - fastHaarFeature[i].rect[j].p1, - fastHaarFeature[i].rect[j].p2, - fastHaarFeature[i].rect[j].p3, - haarFeature[i].rect[j].r, step ) - } - } - } -} - - -/* - * icvCreateHaarTrainingData - * - * Create haar training data used in stage training - */ -static -CvHaarTrainigData* icvCreateHaarTrainingData( CvSize winsize, int maxnumsamples ) -{ - CvHaarTrainigData* data; - - CV_FUNCNAME( "icvCreateHaarTrainingData" ); - - __BEGIN__; - - data = NULL; - uchar* ptr = NULL; - size_t datasize = 0; - - datasize = sizeof( CvHaarTrainigData ) + - /* sum and tilted */ - ( 2 * (winsize.width + 1) * (winsize.height + 1) * sizeof( sum_type ) + - sizeof( float ) + /* normfactor */ - sizeof( float ) + /* cls */ - sizeof( float ) /* weight */ - ) * maxnumsamples; - - CV_CALL( data = (CvHaarTrainigData*) cvAlloc( datasize ) ); - memset( (void*)data, 0, datasize ); - data->maxnum = maxnumsamples; - data->winsize = winsize; - ptr = (uchar*)(data + 1); - data->sum = cvMat( maxnumsamples, (winsize.width + 1) * (winsize.height + 1), - CV_SUM_MAT_TYPE, (void*) ptr ); - ptr += sizeof( sum_type ) * maxnumsamples * (winsize.width+1) * (winsize.height+1); - data->tilted = cvMat( maxnumsamples, (winsize.width + 1) * (winsize.height + 1), - CV_SUM_MAT_TYPE, (void*) ptr ); - ptr += sizeof( sum_type ) * maxnumsamples * (winsize.width+1) * (winsize.height+1); - data->normfactor = cvMat( 1, maxnumsamples, CV_32FC1, (void*) ptr ); - ptr += sizeof( float ) * maxnumsamples; - data->cls = cvMat( 1, maxnumsamples, CV_32FC1, (void*) ptr ); - ptr += sizeof( float ) * maxnumsamples; - data->weights = cvMat( 1, maxnumsamples, CV_32FC1, (void*) ptr ); - - data->valcache = NULL; - data->idxcache = NULL; - - __END__; - - return data; -} - -static -void icvReleaseHaarTrainingDataCache( CvHaarTrainigData** haarTrainingData ) -{ - if( haarTrainingData != NULL && (*haarTrainingData) != NULL ) - { - if( (*haarTrainingData)->valcache != NULL ) - { - cvReleaseMat( &(*haarTrainingData)->valcache ); - (*haarTrainingData)->valcache = NULL; - } - if( (*haarTrainingData)->idxcache != NULL ) - { - cvReleaseMat( &(*haarTrainingData)->idxcache ); - (*haarTrainingData)->idxcache = NULL; - } - } -} - -static -void icvReleaseHaarTrainingData( CvHaarTrainigData** haarTrainingData ) -{ - if( haarTrainingData != NULL && (*haarTrainingData) != NULL ) - { - icvReleaseHaarTrainingDataCache( haarTrainingData ); - - cvFree( haarTrainingData ); - } -} - -static -void icvGetTrainingDataCallback( CvMat* mat, CvMat* sampleIdx, CvMat*, - int first, int num, void* userdata ) -{ - int i = 0; - int j = 0; - float val = 0.0F; - float normfactor = 0.0F; - - CvHaarTrainingData* training_data; - CvIntHaarFeatures* haar_features; - -#ifdef CV_COL_ARRANGEMENT - assert( mat->rows >= num ); -#else - assert( mat->cols >= num ); -#endif - - training_data = ((CvUserdata*) userdata)->trainingData; - haar_features = ((CvUserdata*) userdata)->haarFeatures; - if( sampleIdx == NULL ) - { - int num_samples; - -#ifdef CV_COL_ARRANGEMENT - num_samples = mat->cols; -#else - num_samples = mat->rows; -#endif - for( i = 0; i < num_samples; i++ ) - { - for( j = 0; j < num; j++ ) - { - val = cvEvalFastHaarFeature( - ( haar_features->fastfeature - + first + j ), - (sum_type*) (training_data->sum.data.ptr - + i * training_data->sum.step), - (sum_type*) (training_data->tilted.data.ptr - + i * training_data->tilted.step) ); - normfactor = training_data->normfactor.data.fl[i]; - val = ( normfactor == 0.0F ) ? 0.0F : (val / normfactor); - -#ifdef CV_COL_ARRANGEMENT - CV_MAT_ELEM( *mat, float, j, i ) = val; -#else - CV_MAT_ELEM( *mat, float, i, j ) = val; -#endif - } - } - } - else - { - uchar* idxdata = NULL; - size_t step = 0; - int numidx = 0; - int idx = 0; - - assert( CV_MAT_TYPE( sampleIdx->type ) == CV_32FC1 ); - - idxdata = sampleIdx->data.ptr; - if( sampleIdx->rows == 1 ) - { - step = sizeof( float ); - numidx = sampleIdx->cols; - } - else - { - step = sampleIdx->step; - numidx = sampleIdx->rows; - } - - for( i = 0; i < numidx; i++ ) - { - for( j = 0; j < num; j++ ) - { - idx = (int)( *((float*) (idxdata + i * step)) ); - val = cvEvalFastHaarFeature( - ( haar_features->fastfeature - + first + j ), - (sum_type*) (training_data->sum.data.ptr - + idx * training_data->sum.step), - (sum_type*) (training_data->tilted.data.ptr - + idx * training_data->tilted.step) ); - normfactor = training_data->normfactor.data.fl[idx]; - val = ( normfactor == 0.0F ) ? 0.0F : (val / normfactor); - -#ifdef CV_COL_ARRANGEMENT - CV_MAT_ELEM( *mat, float, j, idx ) = val; -#else - CV_MAT_ELEM( *mat, float, idx, j ) = val; -#endif - - } - } - } -#if 0 /*def CV_VERBOSE*/ - if( first % 5000 == 0 ) - { - fprintf( stderr, "%3d%%\r", (int) (100.0 * first / - haar_features->count) ); - fflush( stderr ); - } -#endif /* CV_VERBOSE */ -} - -static -void icvPrecalculate( CvHaarTrainingData* data, CvIntHaarFeatures* haarFeatures, - int numprecalculated ) -{ - CV_FUNCNAME( "icvPrecalculate" ); - - __BEGIN__; - - icvReleaseHaarTrainingDataCache( &data ); - - numprecalculated -= numprecalculated % CV_STUMP_TRAIN_PORTION; - numprecalculated = MIN( numprecalculated, haarFeatures->count ); - - if( numprecalculated > 0 ) - { - //size_t datasize; - int m; - CvUserdata userdata; - - /* private variables */ - #ifdef CV_OPENMP - CvMat t_data; - CvMat t_idx; - int first; - int t_portion; - int portion = CV_STUMP_TRAIN_PORTION; - #endif /* CV_OPENMP */ - - m = data->sum.rows; - -#ifdef CV_COL_ARRANGEMENT - CV_CALL( data->valcache = cvCreateMat( numprecalculated, m, CV_32FC1 ) ); -#else - CV_CALL( data->valcache = cvCreateMat( m, numprecalculated, CV_32FC1 ) ); -#endif - CV_CALL( data->idxcache = cvCreateMat( numprecalculated, m, CV_IDX_MAT_TYPE ) ); - - userdata = cvUserdata( data, haarFeatures ); - - #ifdef CV_OPENMP - #pragma omp parallel for private(t_data, t_idx, first, t_portion) - for( first = 0; first < numprecalculated; first += portion ) - { - t_data = *data->valcache; - t_idx = *data->idxcache; - t_portion = MIN( portion, (numprecalculated - first) ); - - /* indices */ - t_idx.rows = t_portion; - t_idx.data.ptr = data->idxcache->data.ptr + first * ((size_t)t_idx.step); - - /* feature values */ -#ifdef CV_COL_ARRANGEMENT - t_data.rows = t_portion; - t_data.data.ptr = data->valcache->data.ptr + - first * ((size_t) t_data.step ); -#else - t_data.cols = t_portion; - t_data.data.ptr = data->valcache->data.ptr + - first * ((size_t) CV_ELEM_SIZE( t_data.type )); -#endif - icvGetTrainingDataCallback( &t_data, NULL, NULL, first, t_portion, - &userdata ); -#ifdef CV_COL_ARRANGEMENT - cvGetSortedIndices( &t_data, &t_idx, 0 ); -#else - cvGetSortedIndices( &t_data, &t_idx, 1 ); -#endif - -#ifdef CV_VERBOSE - putc( '.', stderr ); - fflush( stderr ); -#endif /* CV_VERBOSE */ - - } - -#ifdef CV_VERBOSE - fprintf( stderr, "\n" ); - fflush( stderr ); -#endif /* CV_VERBOSE */ - - #else - icvGetTrainingDataCallback( data->valcache, NULL, NULL, 0, numprecalculated, - &userdata ); -#ifdef CV_COL_ARRANGEMENT - cvGetSortedIndices( data->valcache, data->idxcache, 0 ); -#else - cvGetSortedIndices( data->valcache, data->idxcache, 1 ); -#endif - #endif /* CV_OPENMP */ - } - - __END__; -} - -static -void icvSplitIndicesCallback( int compidx, float threshold, - CvMat* idx, CvMat** left, CvMat** right, - void* userdata ) -{ - CvHaarTrainingData* data; - CvIntHaarFeatures* haar_features; - int i; - int m; - CvFastHaarFeature* fastfeature; - - data = ((CvUserdata*) userdata)->trainingData; - haar_features = ((CvUserdata*) userdata)->haarFeatures; - fastfeature = &haar_features->fastfeature[compidx]; - - m = data->sum.rows; - *left = cvCreateMat( 1, m, CV_32FC1 ); - *right = cvCreateMat( 1, m, CV_32FC1 ); - (*left)->cols = (*right)->cols = 0; - if( idx == NULL ) - { - for( i = 0; i < m; i++ ) - { - if( cvEvalFastHaarFeature( fastfeature, - (sum_type*) (data->sum.data.ptr + i * data->sum.step), - (sum_type*) (data->tilted.data.ptr + i * data->tilted.step) ) - < threshold * data->normfactor.data.fl[i] ) - { - (*left)->data.fl[(*left)->cols++] = (float) i; - } - else - { - (*right)->data.fl[(*right)->cols++] = (float) i; - } - } - } - else - { - uchar* idxdata; - int idxnum; - size_t idxstep; - int index; - - idxdata = idx->data.ptr; - idxnum = (idx->rows == 1) ? idx->cols : idx->rows; - idxstep = (idx->rows == 1) ? CV_ELEM_SIZE( idx->type ) : idx->step; - for( i = 0; i < idxnum; i++ ) - { - index = (int) *((float*) (idxdata + i * idxstep)); - if( cvEvalFastHaarFeature( fastfeature, - (sum_type*) (data->sum.data.ptr + index * data->sum.step), - (sum_type*) (data->tilted.data.ptr + index * data->tilted.step) ) - < threshold * data->normfactor.data.fl[index] ) - { - (*left)->data.fl[(*left)->cols++] = (float) index; - } - else - { - (*right)->data.fl[(*right)->cols++] = (float) index; - } - } - } -} - -/* - * icvCreateCARTStageClassifier - * - * Create stage classifier with trees as weak classifiers - * data - haar training data. It must be created and filled before call - * minhitrate - desired min hit rate - * maxfalsealarm - desired max false alarm rate - * symmetric - if not 0 it is assumed that samples are vertically symmetric - * numprecalculated - number of features that will be precalculated. Each precalculated - * feature need (number_of_samples*(sizeof( float ) + sizeof( short ))) bytes of memory - * weightfraction - weight trimming parameter - * numsplits - number of binary splits in each tree - * boosttype - type of applied boosting algorithm - * stumperror - type of used error if Discrete AdaBoost algorithm is applied - * maxsplits - maximum total number of splits in all weak classifiers. - * If it is not 0 then NULL returned if total number of splits exceeds . - */ -static -CvIntHaarClassifier* icvCreateCARTStageClassifier( CvHaarTrainingData* data, - CvMat* sampleIdx, - CvIntHaarFeatures* haarFeatures, - float minhitrate, - float maxfalsealarm, - int symmetric, - float weightfraction, - int numsplits, - CvBoostType boosttype, - CvStumpError stumperror, - int maxsplits ) -{ - -#ifdef CV_COL_ARRANGEMENT - int flags = CV_COL_SAMPLE; -#else - int flags = CV_ROW_SAMPLE; -#endif - - CvStageHaarClassifier* stage = NULL; - CvBoostTrainer* trainer; - CvCARTClassifier* cart = NULL; - CvCARTTrainParams trainParams; - CvMTStumpTrainParams stumpTrainParams; - //CvMat* trainData = NULL; - //CvMat* sortedIdx = NULL; - CvMat eval; - int n = 0; - int m = 0; - int numpos = 0; - int numneg = 0; - int numfalse = 0; - float sum_stage = 0.0F; - float threshold = 0.0F; - float falsealarm = 0.0F; - - //CvMat* sampleIdx = NULL; - CvMat* trimmedIdx; - //float* idxdata = NULL; - //float* tempweights = NULL; - //int idxcount = 0; - CvUserdata userdata; - - int i = 0; - int j = 0; - int idx; - int numsamples; - int numtrimmed; - - CvCARTHaarClassifier* classifier; - CvSeq* seq = NULL; - CvMemStorage* storage = NULL; - CvMat* weakTrainVals; - float alpha; - float sumalpha; - int num_splits; /* total number of splits in all weak classifiers */ - -#ifdef CV_VERBOSE - printf( "+----+----+-+---------+---------+---------+---------+\n" ); - printf( "| N |%%SMP|F| ST.THR | HR | FA | EXP. ERR|\n" ); - printf( "+----+----+-+---------+---------+---------+---------+\n" ); -#endif /* CV_VERBOSE */ - - n = haarFeatures->count; - m = data->sum.rows; - numsamples = (sampleIdx) ? MAX( sampleIdx->rows, sampleIdx->cols ) : m; - - userdata = cvUserdata( data, haarFeatures ); - - stumpTrainParams.type = ( boosttype == CV_DABCLASS ) - ? CV_CLASSIFICATION_CLASS : CV_REGRESSION; - stumpTrainParams.error = ( boosttype == CV_LBCLASS || boosttype == CV_GABCLASS ) - ? CV_SQUARE : stumperror; - stumpTrainParams.portion = CV_STUMP_TRAIN_PORTION; - stumpTrainParams.getTrainData = icvGetTrainingDataCallback; - stumpTrainParams.numcomp = n; - stumpTrainParams.userdata = &userdata; - stumpTrainParams.sortedIdx = data->idxcache; - - trainParams.count = numsplits; - trainParams.stumpTrainParams = (CvClassifierTrainParams*) &stumpTrainParams; - trainParams.stumpConstructor = cvCreateMTStumpClassifier; - trainParams.splitIdx = icvSplitIndicesCallback; - trainParams.userdata = &userdata; - - eval = cvMat( 1, m, CV_32FC1, cvAlloc( sizeof( float ) * m ) ); - - storage = cvCreateMemStorage(); - seq = cvCreateSeq( 0, sizeof( *seq ), sizeof( classifier ), storage ); - - weakTrainVals = cvCreateMat( 1, m, CV_32FC1 ); - trainer = cvBoostStartTraining( &data->cls, weakTrainVals, &data->weights, - sampleIdx, boosttype ); - num_splits = 0; - sumalpha = 0.0F; - do - { - -#ifdef CV_VERBOSE - int v_wt = 0; - int v_flipped = 0; -#endif /* CV_VERBOSE */ - - trimmedIdx = cvTrimWeights( &data->weights, sampleIdx, weightfraction ); - numtrimmed = (trimmedIdx) ? MAX( trimmedIdx->rows, trimmedIdx->cols ) : m; - -#ifdef CV_VERBOSE - v_wt = 100 * numtrimmed / numsamples; - v_flipped = 0; - -#endif /* CV_VERBOSE */ - - cart = (CvCARTClassifier*) cvCreateCARTClassifier( data->valcache, - flags, - weakTrainVals, 0, 0, 0, trimmedIdx, - &(data->weights), - (CvClassifierTrainParams*) &trainParams ); - - classifier = (CvCARTHaarClassifier*) icvCreateCARTHaarClassifier( numsplits ); - icvInitCARTHaarClassifier( classifier, cart, haarFeatures ); - - num_splits += classifier->count; - - cart->release( (CvClassifier**) &cart ); - - if( symmetric && (seq->total % 2) ) - { - float normfactor = 0.0F; - CvStumpClassifier* stump; - - /* flip haar features */ - for( i = 0; i < classifier->count; i++ ) - { - if( classifier->feature[i].desc[0] == 'h' ) - { - for( j = 0; j < CV_HAAR_FEATURE_MAX && - classifier->feature[i].rect[j].weight != 0.0F; j++ ) - { - classifier->feature[i].rect[j].r.x = data->winsize.width - - classifier->feature[i].rect[j].r.x - - classifier->feature[i].rect[j].r.width; - } - } - else - { - int tmp = 0; - - /* (x,y) -> (24-x,y) */ - /* w -> h; h -> w */ - for( j = 0; j < CV_HAAR_FEATURE_MAX && - classifier->feature[i].rect[j].weight != 0.0F; j++ ) - { - classifier->feature[i].rect[j].r.x = data->winsize.width - - classifier->feature[i].rect[j].r.x; - CV_SWAP( classifier->feature[i].rect[j].r.width, - classifier->feature[i].rect[j].r.height, tmp ); - } - } - } - icvConvertToFastHaarFeature( classifier->feature, - classifier->fastfeature, - classifier->count, data->winsize.width + 1 ); - - stumpTrainParams.getTrainData = NULL; - stumpTrainParams.numcomp = 1; - stumpTrainParams.userdata = NULL; - stumpTrainParams.sortedIdx = NULL; - - for( i = 0; i < classifier->count; i++ ) - { - for( j = 0; j < numtrimmed; j++ ) - { - idx = icvGetIdxAt( trimmedIdx, j ); - - eval.data.fl[idx] = cvEvalFastHaarFeature( &classifier->fastfeature[i], - (sum_type*) (data->sum.data.ptr + idx * data->sum.step), - (sum_type*) (data->tilted.data.ptr + idx * data->tilted.step) ); - normfactor = data->normfactor.data.fl[idx]; - eval.data.fl[idx] = ( normfactor == 0.0F ) - ? 0.0F : (eval.data.fl[idx] / normfactor); - } - - stump = (CvStumpClassifier*) trainParams.stumpConstructor( &eval, - CV_COL_SAMPLE, - weakTrainVals, 0, 0, 0, trimmedIdx, - &(data->weights), - trainParams.stumpTrainParams ); - - classifier->threshold[i] = stump->threshold; - if( classifier->left[i] <= 0 ) - { - classifier->val[-classifier->left[i]] = stump->left; - } - if( classifier->right[i] <= 0 ) - { - classifier->val[-classifier->right[i]] = stump->right; - } - - stump->release( (CvClassifier**) &stump ); - - } - - stumpTrainParams.getTrainData = icvGetTrainingDataCallback; - stumpTrainParams.numcomp = n; - stumpTrainParams.userdata = &userdata; - stumpTrainParams.sortedIdx = data->idxcache; - -#ifdef CV_VERBOSE - v_flipped = 1; -#endif /* CV_VERBOSE */ - - } /* if symmetric */ - if( trimmedIdx != sampleIdx ) - { - cvReleaseMat( &trimmedIdx ); - trimmedIdx = NULL; - } - - for( i = 0; i < numsamples; i++ ) - { - idx = icvGetIdxAt( sampleIdx, i ); - - eval.data.fl[idx] = classifier->eval( (CvIntHaarClassifier*) classifier, - (sum_type*) (data->sum.data.ptr + idx * data->sum.step), - (sum_type*) (data->tilted.data.ptr + idx * data->tilted.step), - data->normfactor.data.fl[idx] ); - } - - alpha = cvBoostNextWeakClassifier( &eval, &data->cls, weakTrainVals, - &data->weights, trainer ); - sumalpha += alpha; - - for( i = 0; i <= classifier->count; i++ ) - { - if( boosttype == CV_RABCLASS ) - { - classifier->val[i] = cvLogRatio( classifier->val[i] ); - } - classifier->val[i] *= alpha; - } - - cvSeqPush( seq, (void*) &classifier ); - - numpos = 0; - for( i = 0; i < numsamples; i++ ) - { - idx = icvGetIdxAt( sampleIdx, i ); - - if( data->cls.data.fl[idx] == 1.0F ) - { - eval.data.fl[numpos] = 0.0F; - for( j = 0; j < seq->total; j++ ) - { - classifier = *((CvCARTHaarClassifier**) cvGetSeqElem( seq, j )); - eval.data.fl[numpos] += classifier->eval( - (CvIntHaarClassifier*) classifier, - (sum_type*) (data->sum.data.ptr + idx * data->sum.step), - (sum_type*) (data->tilted.data.ptr + idx * data->tilted.step), - data->normfactor.data.fl[idx] ); - } - /* eval.data.fl[numpos] = 2.0F * eval.data.fl[numpos] - seq->total; */ - numpos++; - } - } - std::sort(eval.data.fl, eval.data.fl + numpos); - threshold = eval.data.fl[(int) ((1.0F - minhitrate) * numpos)]; - - numneg = 0; - numfalse = 0; - for( i = 0; i < numsamples; i++ ) - { - idx = icvGetIdxAt( sampleIdx, i ); - - if( data->cls.data.fl[idx] == 0.0F ) - { - numneg++; - sum_stage = 0.0F; - for( j = 0; j < seq->total; j++ ) - { - classifier = *((CvCARTHaarClassifier**) cvGetSeqElem( seq, j )); - sum_stage += classifier->eval( (CvIntHaarClassifier*) classifier, - (sum_type*) (data->sum.data.ptr + idx * data->sum.step), - (sum_type*) (data->tilted.data.ptr + idx * data->tilted.step), - data->normfactor.data.fl[idx] ); - } - /* sum_stage = 2.0F * sum_stage - seq->total; */ - if( sum_stage >= (threshold - CV_THRESHOLD_EPS) ) - { - numfalse++; - } - } - } - falsealarm = ((float) numfalse) / ((float) numneg); - -#ifdef CV_VERBOSE - { - float v_hitrate = 0.0F; - float v_falsealarm = 0.0F; - /* expected error of stage classifier regardless threshold */ - float v_experr = 0.0F; - - for( i = 0; i < numsamples; i++ ) - { - idx = icvGetIdxAt( sampleIdx, i ); - - sum_stage = 0.0F; - for( j = 0; j < seq->total; j++ ) - { - classifier = *((CvCARTHaarClassifier**) cvGetSeqElem( seq, j )); - sum_stage += classifier->eval( (CvIntHaarClassifier*) classifier, - (sum_type*) (data->sum.data.ptr + idx * data->sum.step), - (sum_type*) (data->tilted.data.ptr + idx * data->tilted.step), - data->normfactor.data.fl[idx] ); - } - /* sum_stage = 2.0F * sum_stage - seq->total; */ - if( sum_stage >= (threshold - CV_THRESHOLD_EPS) ) - { - if( data->cls.data.fl[idx] == 1.0F ) - { - v_hitrate += 1.0F; - } - else - { - v_falsealarm += 1.0F; - } - } - if( ( sum_stage >= 0.0F ) != (data->cls.data.fl[idx] == 1.0F) ) - { - v_experr += 1.0F; - } - } - v_experr /= numsamples; - printf( "|%4d|%3d%%|%c|%9f|%9f|%9f|%9f|\n", - seq->total, v_wt, ( (v_flipped) ? '+' : '-' ), - threshold, v_hitrate / numpos, v_falsealarm / numneg, - v_experr ); - printf( "+----+----+-+---------+---------+---------+---------+\n" ); - fflush( stdout ); - } -#endif /* CV_VERBOSE */ - - } while( falsealarm > maxfalsealarm && (!maxsplits || (num_splits < maxsplits) ) ); - cvBoostEndTraining( &trainer ); - - if( falsealarm > maxfalsealarm ) - { - stage = NULL; - } - else - { - stage = (CvStageHaarClassifier*) icvCreateStageHaarClassifier( seq->total, - threshold ); - cvCvtSeqToArray( seq, (CvArr*) stage->classifier ); - } - - /* CLEANUP */ - cvReleaseMemStorage( &storage ); - cvReleaseMat( &weakTrainVals ); - cvFree( &(eval.data.ptr) ); - - return (CvIntHaarClassifier*) stage; -} - - -static -CvBackgroundData* icvCreateBackgroundData( const char* filename, CvSize winsize ) -{ - CvBackgroundData* data = NULL; - - const char* dir = NULL; - char full[PATH_MAX]; - char* imgfilename = NULL; - size_t datasize = 0; - int count = 0; - FILE* input = NULL; - char* tmp = NULL; - int len = 0; - - assert( filename != NULL ); - - dir = strrchr( filename, '\\' ); - if( dir == NULL ) - { - dir = strrchr( filename, '/' ); - } - if( dir == NULL ) - { - imgfilename = &(full[0]); - } - else - { - strncpy( &(full[0]), filename, (dir - filename + 1) ); - imgfilename = &(full[(dir - filename + 1)]); - } - - input = fopen( filename, "r" ); - if( input != NULL ) - { - count = 0; - datasize = 0; - - /* count */ - while( !feof( input ) ) - { - *imgfilename = '\0'; - if( !fgets( imgfilename, PATH_MAX - (int)(imgfilename - full) - 1, input )) - break; - len = (int)strlen( imgfilename ); - for( ; len > 0 && isspace(imgfilename[len-1]); len-- ) - imgfilename[len-1] = '\0'; - if( len > 0 ) - { - if( (*imgfilename) == '#' ) continue; /* comment */ - count++; - datasize += sizeof( char ) * (strlen( &(full[0]) ) + 1); - } - } - if( count > 0 ) - { - //rewind( input ); - fseek( input, 0, SEEK_SET ); - datasize += sizeof( *data ) + sizeof( char* ) * count; - data = (CvBackgroundData*) cvAlloc( datasize ); - memset( (void*) data, 0, datasize ); - data->count = count; - data->filename = (char**) (data + 1); - data->last = 0; - data->round = 0; - data->winsize = winsize; - tmp = (char*) (data->filename + data->count); - count = 0; - while( !feof( input ) ) - { - *imgfilename = '\0'; - if( !fgets( imgfilename, PATH_MAX - (int)(imgfilename - full) - 1, input )) - break; - len = (int)strlen( imgfilename ); - if( len > 0 && imgfilename[len-1] == '\n' ) - imgfilename[len-1] = 0, len--; - if( len > 0 ) - { - if( (*imgfilename) == '#' ) continue; /* comment */ - data->filename[count++] = tmp; - strcpy( tmp, &(full[0]) ); - tmp += strlen( &(full[0]) ) + 1; - } - } - } - fclose( input ); - } - - return data; -} - -static -void icvReleaseBackgroundData( CvBackgroundData** data ) -{ - assert( data != NULL && (*data) != NULL ); - - cvFree( data ); -} - -static -CvBackgroundReader* icvCreateBackgroundReader() -{ - CvBackgroundReader* reader = NULL; - - reader = (CvBackgroundReader*) cvAlloc( sizeof( *reader ) ); - memset( (void*) reader, 0, sizeof( *reader ) ); - reader->src = cvMat( 0, 0, CV_8UC1, NULL ); - reader->img = cvMat( 0, 0, CV_8UC1, NULL ); - reader->offset = cvPoint( 0, 0 ); - reader->scale = 1.0F; - reader->scalefactor = 1.4142135623730950488016887242097F; - reader->stepfactor = 0.5F; - reader->point = reader->offset; - - return reader; -} - -static -void icvReleaseBackgroundReader( CvBackgroundReader** reader ) -{ - assert( reader != NULL && (*reader) != NULL ); - - if( (*reader)->src.data.ptr != NULL ) - { - cvFree( &((*reader)->src.data.ptr) ); - } - if( (*reader)->img.data.ptr != NULL ) - { - cvFree( &((*reader)->img.data.ptr) ); - } - - cvFree( reader ); -} - -static -void icvGetNextFromBackgroundData( CvBackgroundData* data, - CvBackgroundReader* reader ) -{ - IplImage* img = NULL; - size_t datasize = 0; - int round = 0; - int i = 0; - CvPoint offset = cvPoint(0,0); - - assert( data != NULL && reader != NULL ); - - if( reader->src.data.ptr != NULL ) - { - cvFree( &(reader->src.data.ptr) ); - reader->src.data.ptr = NULL; - } - if( reader->img.data.ptr != NULL ) - { - cvFree( &(reader->img.data.ptr) ); - reader->img.data.ptr = NULL; - } - - #ifdef CV_OPENMP - #pragma omp critical(c_background_data) - #endif /* CV_OPENMP */ - { - for( i = 0; i < data->count; i++ ) - { - round = data->round; - -//#ifdef CV_VERBOSE -// printf( "Open background image: %s\n", data->filename[data->last] ); -//#endif /* CV_VERBOSE */ - - data->last = rand() % data->count; - data->last %= data->count; - img = cvLoadImage( data->filename[data->last], 0 ); - if( !img ) - continue; - data->round += data->last / data->count; - data->round = data->round % (data->winsize.width * data->winsize.height); - - offset.x = round % data->winsize.width; - offset.y = round / data->winsize.width; - - offset.x = MIN( offset.x, img->width - data->winsize.width ); - offset.y = MIN( offset.y, img->height - data->winsize.height ); - - if( img != NULL && img->depth == IPL_DEPTH_8U && img->nChannels == 1 && - offset.x >= 0 && offset.y >= 0 ) - { - break; - } - if( img != NULL ) - cvReleaseImage( &img ); - img = NULL; - } - } - if( img == NULL ) - { - /* no appropriate image */ - -#ifdef CV_VERBOSE - printf( "Invalid background description file.\n" ); -#endif /* CV_VERBOSE */ - - assert( 0 ); - exit( 1 ); - } - datasize = sizeof( uchar ) * img->width * img->height; - reader->src = cvMat( img->height, img->width, CV_8UC1, (void*) cvAlloc( datasize ) ); - cvCopy( img, &reader->src, NULL ); - cvReleaseImage( &img ); - img = NULL; - - //reader->offset.x = round % data->winsize.width; - //reader->offset.y = round / data->winsize.width; - reader->offset = offset; - reader->point = reader->offset; - reader->scale = MAX( - ((float) data->winsize.width + reader->point.x) / ((float) reader->src.cols), - ((float) data->winsize.height + reader->point.y) / ((float) reader->src.rows) ); - - reader->img = cvMat( (int) (reader->scale * reader->src.rows + 0.5F), - (int) (reader->scale * reader->src.cols + 0.5F), - CV_8UC1, (void*) cvAlloc( datasize ) ); - cvResize( &(reader->src), &(reader->img) ); -} - - -/* - * icvGetBackgroundImage - * - * Get an image from background - * must be allocated and have size, previously passed to icvInitBackgroundReaders - * - * Usage example: - * icvInitBackgroundReaders( "bg.txt", cvSize( 24, 24 ) ); - * ... - * #pragma omp parallel - * { - * ... - * icvGetBackgourndImage( cvbgdata, cvbgreader, img ); - * ... - * } - * ... - * icvDestroyBackgroundReaders(); - */ -static -void icvGetBackgroundImage( CvBackgroundData* data, - CvBackgroundReader* reader, - CvMat* img ) -{ - CvMat mat; - - assert( data != NULL && reader != NULL && img != NULL ); - assert( CV_MAT_TYPE( img->type ) == CV_8UC1 ); - assert( img->cols == data->winsize.width ); - assert( img->rows == data->winsize.height ); - - if( reader->img.data.ptr == NULL ) - { - icvGetNextFromBackgroundData( data, reader ); - } - - mat = cvMat( data->winsize.height, data->winsize.width, CV_8UC1 ); - cvSetData( &mat, (void*) (reader->img.data.ptr + reader->point.y * reader->img.step - + reader->point.x * sizeof( uchar )), reader->img.step ); - - cvCopy( &mat, img, 0 ); - if( (int) ( reader->point.x + (1.0F + reader->stepfactor ) * data->winsize.width ) - < reader->img.cols ) - { - reader->point.x += (int) (reader->stepfactor * data->winsize.width); - } - else - { - reader->point.x = reader->offset.x; - if( (int) ( reader->point.y + (1.0F + reader->stepfactor ) * data->winsize.height ) - < reader->img.rows ) - { - reader->point.y += (int) (reader->stepfactor * data->winsize.height); - } - else - { - reader->point.y = reader->offset.y; - reader->scale *= reader->scalefactor; - if( reader->scale <= 1.0F ) - { - reader->img = cvMat( (int) (reader->scale * reader->src.rows), - (int) (reader->scale * reader->src.cols), - CV_8UC1, (void*) (reader->img.data.ptr) ); - cvResize( &(reader->src), &(reader->img) ); - } - else - { - icvGetNextFromBackgroundData( data, reader ); - } - } - } -} - - -/* - * icvInitBackgroundReaders - * - * Initialize background reading process. - * and are initialized. - * Must be called before any usage of background - * - * filename - name of background description file - * winsize - size of images will be obtained from background - * - * return 1 on success, 0 otherwise. - */ -static -int icvInitBackgroundReaders( const char* filename, CvSize winsize ) -{ - if( cvbgdata == NULL && filename != NULL ) - { - cvbgdata = icvCreateBackgroundData( filename, winsize ); - } - - if( cvbgdata ) - { - - #ifdef CV_OPENMP - #pragma omp parallel - #endif /* CV_OPENMP */ - { - #ifdef CV_OPENMP - #pragma omp critical(c_create_bg_data) - #endif /* CV_OPENMP */ - { - if( cvbgreader == NULL ) - { - cvbgreader = icvCreateBackgroundReader(); - } - } - } - - } - - return (cvbgdata != NULL); -} - - -/* - * icvDestroyBackgroundReaders - * - * Finish backgournd reading process - */ -static -void icvDestroyBackgroundReaders() -{ - /* release background reader in each thread */ - #ifdef CV_OPENMP - #pragma omp parallel - #endif /* CV_OPENMP */ - { - #ifdef CV_OPENMP - #pragma omp critical(c_release_bg_data) - #endif /* CV_OPENMP */ - { - if( cvbgreader != NULL ) - { - icvReleaseBackgroundReader( &cvbgreader ); - cvbgreader = NULL; - } - } - } - - if( cvbgdata != NULL ) - { - icvReleaseBackgroundData( &cvbgdata ); - cvbgdata = NULL; - } -} - - -/* - * icvGetAuxImages - * - * Get sum, tilted, sqsum images and calculate normalization factor - * All images must be allocated. - */ -static -void icvGetAuxImages( CvMat* img, CvMat* sum, CvMat* tilted, - CvMat* sqsum, float* normfactor ) -{ - CvRect normrect; - int p0, p1, p2, p3; - sum_type valsum = 0; - sqsum_type valsqsum = 0; - double area = 0.0; - - cvIntegral( img, sum, sqsum, tilted ); - normrect = cvRect( 1, 1, img->cols - 2, img->rows - 2 ); - CV_SUM_OFFSETS( p0, p1, p2, p3, normrect, img->cols + 1 ) - - area = normrect.width * normrect.height; - valsum = ((sum_type*) (sum->data.ptr))[p0] - ((sum_type*) (sum->data.ptr))[p1] - - ((sum_type*) (sum->data.ptr))[p2] + ((sum_type*) (sum->data.ptr))[p3]; - valsqsum = ((sqsum_type*) (sqsum->data.ptr))[p0] - - ((sqsum_type*) (sqsum->data.ptr))[p1] - - ((sqsum_type*) (sqsum->data.ptr))[p2] - + ((sqsum_type*) (sqsum->data.ptr))[p3]; - - /* sqrt( valsqsum / area - ( valsum / are )^2 ) * area */ - (*normfactor) = (float) sqrt( (double) (area * valsqsum - (double)valsum * valsum) ); -} - - -/* consumed counter */ -typedef uint64 ccounter_t; - -#define CCOUNTER_MAX CV_BIG_UINT(0xffffffffffffffff) -#define CCOUNTER_SET_ZERO(cc) ((cc) = 0) -#define CCOUNTER_INC(cc) ( (CCOUNTER_MAX > (cc) ) ? (++(cc)) : (CCOUNTER_MAX) ) -#define CCOUNTER_ADD(cc0, cc1) ( ((CCOUNTER_MAX-(cc1)) > (cc0) ) ? ((cc0) += (cc1)) : ((cc0) = CCOUNTER_MAX) ) -#define CCOUNTER_DIV(cc0, cc1) ( ((cc1) == 0) ? 0 : ( ((double)(cc0))/(double)(int64)(cc1) ) ) - - - -/* - * icvGetHaarTrainingData - * - * Unified method that can now be used for vec file, bg file and bg vec file - * - * Fill with samples, passed - */ -static -int icvGetHaarTrainingData( CvHaarTrainingData* data, int first, int count, - CvIntHaarClassifier* cascade, - CvGetHaarTrainingDataCallback callback, void* userdata, - int* consumed, double* acceptance_ratio ) -{ - int i = 0; - ccounter_t getcount = 0; - ccounter_t thread_getcount = 0; - ccounter_t consumed_count; - ccounter_t thread_consumed_count; - - /* private variables */ - CvMat img; - CvMat sum; - CvMat tilted; - CvMat sqsum; - - sum_type* sumdata; - sum_type* tilteddata; - float* normfactor; - - /* end private variables */ - - assert( data != NULL ); - assert( first + count <= data->maxnum ); - assert( cascade != NULL ); - assert( callback != NULL ); - - // if( !cvbgdata ) return 0; this check needs to be done in the callback for BG - - CCOUNTER_SET_ZERO(getcount); - CCOUNTER_SET_ZERO(thread_getcount); - CCOUNTER_SET_ZERO(consumed_count); - CCOUNTER_SET_ZERO(thread_consumed_count); - - #ifdef CV_OPENMP - #pragma omp parallel private(img, sum, tilted, sqsum, sumdata, tilteddata, \ - normfactor, thread_consumed_count, thread_getcount) - #endif /* CV_OPENMP */ - { - sumdata = NULL; - tilteddata = NULL; - normfactor = NULL; - - CCOUNTER_SET_ZERO(thread_getcount); - CCOUNTER_SET_ZERO(thread_consumed_count); - int ok = 1; - - img = cvMat( data->winsize.height, data->winsize.width, CV_8UC1, - cvAlloc( sizeof( uchar ) * data->winsize.height * data->winsize.width ) ); - sum = cvMat( data->winsize.height + 1, data->winsize.width + 1, - CV_SUM_MAT_TYPE, NULL ); - tilted = cvMat( data->winsize.height + 1, data->winsize.width + 1, - CV_SUM_MAT_TYPE, NULL ); - sqsum = cvMat( data->winsize.height + 1, data->winsize.width + 1, CV_SQSUM_MAT_TYPE, - cvAlloc( sizeof( sqsum_type ) * (data->winsize.height + 1) - * (data->winsize.width + 1) ) ); - - #ifdef CV_OPENMP - #pragma omp for schedule(static, 1) - #endif /* CV_OPENMP */ - for( i = first; (i < first + count); i++ ) - { - if( !ok ) - continue; - for( ; ; ) - { - ok = callback( &img, userdata ); - if( !ok ) - break; - - CCOUNTER_INC(thread_consumed_count); - - sumdata = (sum_type*) (data->sum.data.ptr + i * data->sum.step); - tilteddata = (sum_type*) (data->tilted.data.ptr + i * data->tilted.step); - normfactor = data->normfactor.data.fl + i; - sum.data.ptr = (uchar*) sumdata; - tilted.data.ptr = (uchar*) tilteddata; - icvGetAuxImages( &img, &sum, &tilted, &sqsum, normfactor ); - if( cascade->eval( cascade, sumdata, tilteddata, *normfactor ) != 0.0F ) - { - CCOUNTER_INC(thread_getcount); - break; - } - } - -#ifdef CV_VERBOSE - if( (i - first) % 500 == 0 ) - { - fprintf( stderr, "%3d%%\r", (int) ( 100.0 * (i - first) / count ) ); - fflush( stderr ); - } -#endif /* CV_VERBOSE */ - } - - cvFree( &(img.data.ptr) ); - cvFree( &(sqsum.data.ptr) ); - - #ifdef CV_OPENMP - #pragma omp critical (c_consumed_count) - #endif /* CV_OPENMP */ - { - /* consumed_count += thread_consumed_count; */ - CCOUNTER_ADD(getcount, thread_getcount); - CCOUNTER_ADD(consumed_count, thread_consumed_count); - } - } /* omp parallel */ - - if( consumed != NULL ) - { - *consumed = (int)consumed_count; - } - - if( acceptance_ratio != NULL ) - { - /* *acceptance_ratio = ((double) count) / consumed_count; */ - *acceptance_ratio = CCOUNTER_DIV(count, consumed_count); - } - - return static_cast(getcount); -} - -/* - * icvGetHaarTrainingDataFromBG - * - * Fill with background samples, passed - * Background reading process must be initialized before call. - */ -//static -//int icvGetHaarTrainingDataFromBG( CvHaarTrainingData* data, int first, int count, -// CvIntHaarClassifier* cascade, double* acceptance_ratio ) -//{ -// int i = 0; -// ccounter_t consumed_count; -// ccounter_t thread_consumed_count; -// -// /* private variables */ -// CvMat img; -// CvMat sum; -// CvMat tilted; -// CvMat sqsum; -// -// sum_type* sumdata; -// sum_type* tilteddata; -// float* normfactor; -// -// /* end private variables */ -// -// assert( data != NULL ); -// assert( first + count <= data->maxnum ); -// assert( cascade != NULL ); -// -// if( !cvbgdata ) return 0; -// -// CCOUNTER_SET_ZERO(consumed_count); -// CCOUNTER_SET_ZERO(thread_consumed_count); -// -// #ifdef CV_OPENMP -// #pragma omp parallel private(img, sum, tilted, sqsum, sumdata, tilteddata, -// normfactor, thread_consumed_count) -// #endif /* CV_OPENMP */ -// { -// sumdata = NULL; -// tilteddata = NULL; -// normfactor = NULL; -// -// CCOUNTER_SET_ZERO(thread_consumed_count); -// -// img = cvMat( data->winsize.height, data->winsize.width, CV_8UC1, -// cvAlloc( sizeof( uchar ) * data->winsize.height * data->winsize.width ) ); -// sum = cvMat( data->winsize.height + 1, data->winsize.width + 1, -// CV_SUM_MAT_TYPE, NULL ); -// tilted = cvMat( data->winsize.height + 1, data->winsize.width + 1, -// CV_SUM_MAT_TYPE, NULL ); -// sqsum = cvMat( data->winsize.height + 1, data->winsize.width + 1, -// CV_SQSUM_MAT_TYPE, -// cvAlloc( sizeof( sqsum_type ) * (data->winsize.height + 1) -// * (data->winsize.width + 1) ) ); -// -// #ifdef CV_OPENMP -// #pragma omp for schedule(static, 1) -// #endif /* CV_OPENMP */ -// for( i = first; i < first + count; i++ ) -// { -// for( ; ; ) -// { -// icvGetBackgroundImage( cvbgdata, cvbgreader, &img ); -// -// CCOUNTER_INC(thread_consumed_count); -// -// sumdata = (sum_type*) (data->sum.data.ptr + i * data->sum.step); -// tilteddata = (sum_type*) (data->tilted.data.ptr + i * data->tilted.step); -// normfactor = data->normfactor.data.fl + i; -// sum.data.ptr = (uchar*) sumdata; -// tilted.data.ptr = (uchar*) tilteddata; -// icvGetAuxImages( &img, &sum, &tilted, &sqsum, normfactor ); -// if( cascade->eval( cascade, sumdata, tilteddata, *normfactor ) != 0.0F ) -// { -// break; -// } -// } -// -//#ifdef CV_VERBOSE -// if( (i - first) % 500 == 0 ) -// { -// fprintf( stderr, "%3d%%\r", (int) ( 100.0 * (i - first) / count ) ); -// fflush( stderr ); -// } -//#endif /* CV_VERBOSE */ -// -// } -// -// cvFree( &(img.data.ptr) ); -// cvFree( &(sqsum.data.ptr) ); -// -// #ifdef CV_OPENMP -// #pragma omp critical (c_consumed_count) -// #endif /* CV_OPENMP */ -// { -// /* consumed_count += thread_consumed_count; */ -// CCOUNTER_ADD(consumed_count, thread_consumed_count); -// } -// } /* omp parallel */ -// -// if( acceptance_ratio != NULL ) -// { -// /* *acceptance_ratio = ((double) count) / consumed_count; */ -// *acceptance_ratio = CCOUNTER_DIV(count, consumed_count); -// } -// -// return count; -//} - -int icvGetHaarTraininDataFromVecCallback( CvMat* img, void* userdata ) -{ - uchar tmp = 0; - int r = 0; - int c = 0; - - assert( img->rows * img->cols == ((CvVecFile*) userdata)->vecsize ); - - size_t elements_read = fread( &tmp, sizeof( tmp ), 1, ((CvVecFile*) userdata)->input ); - CV_Assert(elements_read == 1); - elements_read = fread( ((CvVecFile*) userdata)->vector, sizeof( short ), - ((CvVecFile*) userdata)->vecsize, ((CvVecFile*) userdata)->input ); - CV_Assert(elements_read == (size_t)((CvVecFile*) userdata)->vecsize); - - if( feof( ((CvVecFile*) userdata)->input ) || - (((CvVecFile*) userdata)->last)++ >= ((CvVecFile*) userdata)->count ) - { - return 0; - } - - for( r = 0; r < img->rows; r++ ) - { - for( c = 0; c < img->cols; c++ ) - { - CV_MAT_ELEM( *img, uchar, r, c ) = - (uchar) ( ((CvVecFile*) userdata)->vector[r * img->cols + c] ); - } - } - - return 1; -} - -static int icvGetHaarTrainingDataFromBGCallback ( CvMat* img, void* /*userdata*/ ) -{ - if (! cvbgdata) - return 0; - - if (! cvbgreader) - return 0; - - // just in case icvGetBackgroundImage is not thread-safe ... - #ifdef CV_OPENMP - #pragma omp critical (get_background_image_callback) - #endif /* CV_OPENMP */ - { - icvGetBackgroundImage( cvbgdata, cvbgreader, img ); - } - - return 1; -} - -/* - * icvGetHaarTrainingDataFromVec - * Get training data from .vec file - */ -static -int icvGetHaarTrainingDataFromVec( CvHaarTrainingData* data, int first, int count, - CvIntHaarClassifier* cascade, - const char* filename, - int* consumed ) -{ - int getcount = 0; - - CV_FUNCNAME( "icvGetHaarTrainingDataFromVec" ); - - __BEGIN__; - - CvVecFile file; - short tmp = 0; - - file.input = NULL; - if( filename ) file.input = fopen( filename, "rb" ); - - if( file.input != NULL ) - { - size_t elements_read1 = fread( &file.count, sizeof( file.count ), 1, file.input ); - size_t elements_read2 = fread( &file.vecsize, sizeof( file.vecsize ), 1, file.input ); - size_t elements_read3 = fread( &tmp, sizeof( tmp ), 1, file.input ); - size_t elements_read4 = fread( &tmp, sizeof( tmp ), 1, file.input ); - CV_Assert(elements_read1 == 1 && elements_read2 == 1 && elements_read3 == 1 && elements_read4 == 1); - - if( !feof( file.input ) ) - { - if( file.vecsize != data->winsize.width * data->winsize.height ) - { - fclose( file.input ); - CV_ERROR( CV_StsError, "Vec file sample size mismatch" ); - } - - file.last = 0; - file.vector = (short*) cvAlloc( sizeof( *file.vector ) * file.vecsize ); - getcount = icvGetHaarTrainingData( data, first, count, cascade, - icvGetHaarTraininDataFromVecCallback, &file, consumed, NULL); - cvFree( &file.vector ); - } - fclose( file.input ); - } - - __END__; - - return getcount; -} - -/* - * icvGetHaarTrainingDataFromBG - * - * Fill with background samples, passed - * Background reading process must be initialized before call, alternaly, a file - * name to a vec file may be passed, a NULL filename indicates old behaviour - */ -static -int icvGetHaarTrainingDataFromBG( CvHaarTrainingData* data, int first, int count, - CvIntHaarClassifier* cascade, double* acceptance_ratio, const char * filename = NULL ) -{ - CV_FUNCNAME( "icvGetHaarTrainingDataFromBG" ); - - __BEGIN__; - - if (filename) - { - CvVecFile file; - short tmp = 0; - - file.input = NULL; - if( filename ) file.input = fopen( filename, "rb" ); - - if( file.input != NULL ) - { - size_t elements_read1 = fread( &file.count, sizeof( file.count ), 1, file.input ); - size_t elements_read2 = fread( &file.vecsize, sizeof( file.vecsize ), 1, file.input ); - size_t elements_read3 = fread( &tmp, sizeof( tmp ), 1, file.input ); - size_t elements_read4 = fread( &tmp, sizeof( tmp ), 1, file.input ); - CV_Assert(elements_read1 == 1 && elements_read2 == 1 && elements_read3 == 1 && elements_read4 == 1); - if( !feof( file.input ) ) - { - if( file.vecsize != data->winsize.width * data->winsize.height ) - { - fclose( file.input ); - CV_ERROR( CV_StsError, "Vec file sample size mismatch" ); - } - - file.last = 0; - file.vector = (short*) cvAlloc( sizeof( *file.vector ) * file.vecsize ); - icvGetHaarTrainingData( data, first, count, cascade, - icvGetHaarTraininDataFromVecCallback, &file, NULL, acceptance_ratio); - cvFree( &file.vector ); - } - fclose( file.input ); - } - } - else - { - icvGetHaarTrainingData( data, first, count, cascade, - icvGetHaarTrainingDataFromBGCallback, NULL, NULL, acceptance_ratio); - } - - __END__; - - return count; -} - -void cvCreateCascadeClassifier( const char* dirname, - const char* vecfilename, - const char* bgfilename, - int npos, int nneg, int nstages, - int numprecalculated, - int numsplits, - float minhitrate, float maxfalsealarm, - float weightfraction, - int mode, int symmetric, - int equalweights, - int winwidth, int winheight, - int boosttype, int stumperror ) -{ - CvCascadeHaarClassifier* cascade = NULL; - CvHaarTrainingData* data = NULL; - CvIntHaarFeatures* haar_features; - CvSize winsize; - int i = 0; - int j = 0; - int poscount = 0; - int negcount = 0; - int consumed = 0; - double false_alarm = 0; - char stagename[PATH_MAX]; - float posweight = 1.0F; - float negweight = 1.0F; - FILE* file; - -#ifdef CV_VERBOSE - double proctime = 0.0F; -#endif /* CV_VERBOSE */ - - assert( dirname != NULL ); - assert( bgfilename != NULL ); - assert( vecfilename != NULL ); - assert( nstages > 0 ); - - winsize = cvSize( winwidth, winheight ); - - cascade = (CvCascadeHaarClassifier*) icvCreateCascadeHaarClassifier( nstages ); - cascade->count = 0; - - if( icvInitBackgroundReaders( bgfilename, winsize ) ) - { - data = icvCreateHaarTrainingData( winsize, npos + nneg ); - haar_features = icvCreateIntHaarFeatures( winsize, mode, symmetric ); - -#ifdef CV_VERBOSE - printf("Number of features used : %d\n", haar_features->count); -#endif /* CV_VERBOSE */ - - for( i = 0; i < nstages; i++, cascade->count++ ) - { - sprintf( stagename, "%s%d/%s", dirname, i, CV_STAGE_CART_FILE_NAME ); - cascade->classifier[i] = - icvLoadCARTStageHaarClassifier( stagename, winsize.width + 1 ); - - if( !icvMkDir( stagename ) ) - { - -#ifdef CV_VERBOSE - printf( "UNABLE TO CREATE DIRECTORY: %s\n", stagename ); -#endif /* CV_VERBOSE */ - - break; - } - if( cascade->classifier[i] != NULL ) - { - -#ifdef CV_VERBOSE - printf( "STAGE: %d LOADED.\n", i ); -#endif /* CV_VERBOSE */ - - continue; - } - -#ifdef CV_VERBOSE - printf( "STAGE: %d\n", i ); -#endif /* CV_VERBOSE */ - - poscount = icvGetHaarTrainingDataFromVec( data, 0, npos, - (CvIntHaarClassifier*) cascade, vecfilename, &consumed ); -#ifdef CV_VERBOSE - printf( "POS: %d %d %f\n", poscount, consumed, - ((float) poscount) / consumed ); -#endif /* CV_VERBOSE */ - - if( poscount <= 0 ) - { - -#ifdef CV_VERBOSE - printf( "UNABLE TO OBTAIN POS SAMPLES\n" ); -#endif /* CV_VERBOSE */ - - break; - } - -#ifdef CV_VERBOSE - proctime = -TIME( 0 ); -#endif /* CV_VERBOSE */ - - negcount = icvGetHaarTrainingDataFromBG( data, poscount, nneg, - (CvIntHaarClassifier*) cascade, &false_alarm ); -#ifdef CV_VERBOSE - printf( "NEG: %d %g\n", negcount, false_alarm ); - printf( "BACKGROUND PROCESSING TIME: %.2f\n", - (proctime + TIME( 0 )) ); -#endif /* CV_VERBOSE */ - - if( negcount <= 0 ) - { - -#ifdef CV_VERBOSE - printf( "UNABLE TO OBTAIN NEG SAMPLES\n" ); -#endif /* CV_VERBOSE */ - - break; - } - - data->sum.rows = data->tilted.rows = poscount + negcount; - data->normfactor.cols = data->weights.cols = data->cls.cols = - poscount + negcount; - - posweight = (equalweights) ? 1.0F / (poscount + negcount) : (0.5F / poscount); - negweight = (equalweights) ? 1.0F / (poscount + negcount) : (0.5F / negcount); - for( j = 0; j < poscount; j++ ) - { - data->weights.data.fl[j] = posweight; - data->cls.data.fl[j] = 1.0F; - - } - for( j = poscount; j < poscount + negcount; j++ ) - { - data->weights.data.fl[j] = negweight; - data->cls.data.fl[j] = 0.0F; - } - -#ifdef CV_VERBOSE - proctime = -TIME( 0 ); -#endif /* CV_VERBOSE */ - - icvPrecalculate( data, haar_features, numprecalculated ); - -#ifdef CV_VERBOSE - printf( "PRECALCULATION TIME: %.2f\n", (proctime + TIME( 0 )) ); -#endif /* CV_VERBOSE */ - -#ifdef CV_VERBOSE - proctime = -TIME( 0 ); -#endif /* CV_VERBOSE */ - - cascade->classifier[i] = icvCreateCARTStageClassifier( data, NULL, - haar_features, minhitrate, maxfalsealarm, symmetric, weightfraction, - numsplits, (CvBoostType) boosttype, (CvStumpError) stumperror, 0 ); - -#ifdef CV_VERBOSE - printf( "STAGE TRAINING TIME: %.2f\n", (proctime + TIME( 0 )) ); -#endif /* CV_VERBOSE */ - - file = fopen( stagename, "w" ); - if( file != NULL ) - { - cascade->classifier[i]->save( - (CvIntHaarClassifier*) cascade->classifier[i], file ); - fclose( file ); - } - else - { - -#ifdef CV_VERBOSE - printf( "FAILED TO SAVE STAGE CLASSIFIER IN FILE %s\n", stagename ); -#endif /* CV_VERBOSE */ - - } - - } - icvReleaseIntHaarFeatures( &haar_features ); - icvReleaseHaarTrainingData( &data ); - - if( i == nstages ) - { - char xml_path[1024]; - int len = (int)strlen(dirname); - CvHaarClassifierCascade* cascade1 = 0; - strcpy( xml_path, dirname ); - if( xml_path[len-1] == '\\' || xml_path[len-1] == '/' ) - len--; - strcpy( xml_path + len, ".xml" ); - cascade1 = cvLoadHaarClassifierCascade( dirname, cvSize(winwidth,winheight) ); - if( cascade1 ) - cvSave( xml_path, cascade1 ); - cvReleaseHaarClassifierCascade( &cascade1 ); - } - } - else - { -#ifdef CV_VERBOSE - printf( "FAILED TO INITIALIZE BACKGROUND READERS\n" ); -#endif /* CV_VERBOSE */ - } - - /* CLEAN UP */ - icvDestroyBackgroundReaders(); - cascade->release( (CvIntHaarClassifier**) &cascade ); -} - -/* tree cascade classifier */ - -static int icvNumSplits( CvStageHaarClassifier* stage ) -{ - int i; - int num; - - num = 0; - for( i = 0; i < stage->count; i++ ) - { - num += ((CvCARTHaarClassifier*) stage->classifier[i])->count; - } - - return num; -} - -static void icvSetNumSamples( CvHaarTrainingData* training_data, int num ) -{ - assert( num <= training_data->maxnum ); - - training_data->sum.rows = training_data->tilted.rows = num; - training_data->normfactor.cols = num; - training_data->cls.cols = training_data->weights.cols = num; -} - -static void icvSetWeightsAndClasses( CvHaarTrainingData* training_data, - int num1, float weight1, float cls1, - int num2, float weight2, float cls2 ) -{ - int j; - - assert( num1 + num2 <= training_data->maxnum ); - - for( j = 0; j < num1; j++ ) - { - training_data->weights.data.fl[j] = weight1; - training_data->cls.data.fl[j] = cls1; - } - for( j = num1; j < num1 + num2; j++ ) - { - training_data->weights.data.fl[j] = weight2; - training_data->cls.data.fl[j] = cls2; - } -} - -static CvMat* icvGetUsedValues( CvHaarTrainingData* training_data, - int start, int num, - CvIntHaarFeatures* haar_features, - CvStageHaarClassifier* stage ) -{ - CvMat* ptr = NULL; - CvMat* feature_idx = NULL; - - CV_FUNCNAME( "icvGetUsedValues" ); - - __BEGIN__; - - int num_splits; - int i, j; - int r; - int total, last; - - num_splits = icvNumSplits( stage ); - - CV_CALL( feature_idx = cvCreateMat( 1, num_splits, CV_32SC1 ) ); - - total = 0; - for( i = 0; i < stage->count; i++ ) - { - CvCARTHaarClassifier* cart; - - cart = (CvCARTHaarClassifier*) stage->classifier[i]; - for( j = 0; j < cart->count; j++ ) - { - feature_idx->data.i[total++] = cart->compidx[j]; - } - } - std::sort(feature_idx->data.i, feature_idx->data.i + total); - - last = 0; - for( i = 1; i < total; i++ ) - { - if( feature_idx->data.i[i] != feature_idx->data.i[last] ) - { - feature_idx->data.i[++last] = feature_idx->data.i[i]; - } - } - total = last + 1; - CV_CALL( ptr = cvCreateMat( num, total, CV_32FC1 ) ); - - - #ifdef CV_OPENMP - #pragma omp parallel for - #endif - for( r = start; r < start + num; r++ ) - { - int c; - - for( c = 0; c < total; c++ ) - { - float val, normfactor; - int fnum; - - fnum = feature_idx->data.i[c]; - - val = cvEvalFastHaarFeature( haar_features->fastfeature + fnum, - (sum_type*) (training_data->sum.data.ptr - + r * training_data->sum.step), - (sum_type*) (training_data->tilted.data.ptr - + r * training_data->tilted.step) ); - normfactor = training_data->normfactor.data.fl[r]; - val = ( normfactor == 0.0F ) ? 0.0F : (val / normfactor); - CV_MAT_ELEM( *ptr, float, r - start, c ) = val; - } - } - - __END__; - - cvReleaseMat( &feature_idx ); - - return ptr; -} - -/* possible split in the tree */ -typedef struct CvSplit -{ - CvTreeCascadeNode* parent; - CvTreeCascadeNode* single_cluster; - CvTreeCascadeNode* multiple_clusters; - int num_clusters; - float single_multiple_ratio; - - struct CvSplit* next; -} CvSplit; - - -void cvCreateTreeCascadeClassifier( const char* dirname, - const char* vecfilename, - const char* bgfilename, - int npos, int nneg, int nstages, - int numprecalculated, - int numsplits, - float minhitrate, float maxfalsealarm, - float weightfraction, - int mode, int symmetric, - int equalweights, - int winwidth, int winheight, - int boosttype, int stumperror, - int maxtreesplits, int minpos, bool bg_vecfile ) -{ - CvTreeCascadeClassifier* tcc = NULL; - CvIntHaarFeatures* haar_features = NULL; - CvHaarTrainingData* training_data = NULL; - CvMat* vals = NULL; - CvMat* cluster_idx = NULL; - CvMat* idx = NULL; - CvMat* features_idx = NULL; - - CV_FUNCNAME( "cvCreateTreeCascadeClassifier" ); - - __BEGIN__; - - int i, k; - CvTreeCascadeNode* leaves; - int best_num, cur_num; - CvSize winsize; - char stage_name[PATH_MAX]; - char buf[PATH_MAX]; - char* suffix; - int total_splits; - - int poscount; - int negcount; - int consumed; - double false_alarm; - double proctime; - - int nleaves; - double required_leaf_fa_rate; - float neg_ratio; - - int max_clusters; - - max_clusters = CV_MAX_CLUSTERS; - neg_ratio = (float) nneg / npos; - - nleaves = 1 + MAX( 0, maxtreesplits ); - required_leaf_fa_rate = pow( (double) maxfalsealarm, (double) nstages ) / nleaves; - - printf( "Required leaf false alarm rate: %g\n", required_leaf_fa_rate ); - - total_splits = 0; - - winsize = cvSize( winwidth, winheight ); - - CV_CALL( cluster_idx = cvCreateMat( 1, npos + nneg, CV_32SC1 ) ); - CV_CALL( idx = cvCreateMat( 1, npos + nneg, CV_32SC1 ) ); - - CV_CALL( tcc = (CvTreeCascadeClassifier*) - icvLoadTreeCascadeClassifier( dirname, winwidth + 1, &total_splits ) ); - CV_CALL( leaves = icvFindDeepestLeaves( tcc ) ); - - CV_CALL( icvPrintTreeCascade( tcc->root ) ); - - haar_features = icvCreateIntHaarFeatures( winsize, mode, symmetric ); - - printf( "Number of features used : %d\n", haar_features->count ); - - training_data = icvCreateHaarTrainingData( winsize, npos + nneg ); - - sprintf( stage_name, "%s/", dirname ); - suffix = stage_name + strlen( stage_name ); - - if (! bg_vecfile) - if( !icvInitBackgroundReaders( bgfilename, winsize ) && nstages > 0 ) - CV_ERROR( CV_StsError, "Unable to read negative images" ); - - if( nstages > 0 ) - { - /* width-first search in the tree */ - do - { - CvSplit* first_split; - CvSplit* last_split; - CvSplit* cur_split; - - CvTreeCascadeNode* parent; - CvTreeCascadeNode* cur_node; - CvTreeCascadeNode* last_node; - - first_split = last_split = cur_split = NULL; - parent = leaves; - leaves = NULL; - do - { - int best_clusters; /* best selected number of clusters */ - float posweight, negweight; - double leaf_fa_rate; - - if( parent ) sprintf( buf, "%d", parent->idx ); - else sprintf( buf, "NULL" ); - printf( "\nParent node: %s\n\n", buf ); - - printf( "*** 1 cluster ***\n" ); - - tcc->eval = icvEvalTreeCascadeClassifierFilter; - /* find path from the root to the node */ - icvSetLeafNode( tcc, parent ); - - /* load samples */ - consumed = 0; - poscount = icvGetHaarTrainingDataFromVec( training_data, 0, npos, - (CvIntHaarClassifier*) tcc, vecfilename, &consumed ); - - printf( "POS: %d %d %f\n", poscount, consumed, ((double) poscount)/consumed ); - - if( poscount <= 0 ) - CV_ERROR( CV_StsError, "Unable to obtain positive samples" ); - - fflush( stdout ); - - proctime = -TIME( 0 ); - - nneg = (int) (neg_ratio * poscount); - negcount = icvGetHaarTrainingDataFromBG( training_data, poscount, nneg, - (CvIntHaarClassifier*) tcc, &false_alarm, bg_vecfile ? bgfilename : NULL ); - printf( "NEG: %d %g\n", negcount, false_alarm ); - - printf( "BACKGROUND PROCESSING TIME: %.2f\n", (proctime + TIME( 0 )) ); - - if( negcount <= 0 ) - CV_ERROR( CV_StsError, "Unable to obtain negative samples" ); - - leaf_fa_rate = false_alarm; - if( leaf_fa_rate <= required_leaf_fa_rate ) - { - printf( "Required leaf false alarm rate achieved. " - "Branch training terminated.\n" ); - } - else if( nleaves == 1 && tcc->next_idx == nstages ) - { - printf( "Required number of stages achieved. " - "Branch training terminated.\n" ); - } - else - { - CvTreeCascadeNode* single_cluster; - CvTreeCascadeNode* multiple_clusters; - int single_num; - - icvSetNumSamples( training_data, poscount + negcount ); - posweight = (equalweights) ? 1.0F / (poscount + negcount) : (0.5F/poscount); - negweight = (equalweights) ? 1.0F / (poscount + negcount) : (0.5F/negcount); - icvSetWeightsAndClasses( training_data, - poscount, posweight, 1.0F, negcount, negweight, 0.0F ); - - fflush( stdout ); - - /* precalculate feature values */ - proctime = -TIME( 0 ); - icvPrecalculate( training_data, haar_features, numprecalculated ); - printf( "Precalculation time: %.2f\n", (proctime + TIME( 0 )) ); - - /* train stage classifier using all positive samples */ - CV_CALL( single_cluster = icvCreateTreeCascadeNode() ); - fflush( stdout ); - - proctime = -TIME( 0 ); - single_cluster->stage = - (CvStageHaarClassifier*) icvCreateCARTStageClassifier( - training_data, NULL, haar_features, - minhitrate, maxfalsealarm, symmetric, - weightfraction, numsplits, (CvBoostType) boosttype, - (CvStumpError) stumperror, 0 ); - printf( "Stage training time: %.2f\n", (proctime + TIME( 0 )) ); - - single_num = icvNumSplits( single_cluster->stage ); - best_num = single_num; - best_clusters = 1; - multiple_clusters = NULL; - - printf( "Number of used features: %d\n", single_num ); - - if( maxtreesplits >= 0 ) - { - max_clusters = MIN( max_clusters, maxtreesplits - total_splits + 1 ); - } - - /* try clustering */ - vals = NULL; - for( k = 2; k <= max_clusters; k++ ) - { - int cluster; - int stop_clustering; - - printf( "*** %d clusters ***\n", k ); - - /* check whether clusters are big enough */ - stop_clustering = ( k * minpos > poscount ); - if( !stop_clustering ) - { - int num[CV_MAX_CLUSTERS]; - - if( k == 2 ) - { - proctime = -TIME( 0 ); - CV_CALL( vals = icvGetUsedValues( training_data, 0, poscount, - haar_features, single_cluster->stage ) ); - printf( "Getting values for clustering time: %.2f\n", (proctime + TIME(0)) ); - printf( "Value matirx size: %d x %d\n", vals->rows, vals->cols ); - fflush( stdout ); - - cluster_idx->cols = vals->rows; - for( i = 0; i < negcount; i++ ) idx->data.i[i] = poscount + i; - } - - proctime = -TIME( 0 ); - - CV_CALL( cvKMeans2( vals, k, cluster_idx, CV_TERM_CRITERIA() ) ); - - printf( "Clustering time: %.2f\n", (proctime + TIME( 0 )) ); - - for( cluster = 0; cluster < k; cluster++ ) num[cluster] = 0; - for( i = 0; i < cluster_idx->cols; i++ ) - num[cluster_idx->data.i[i]]++; - for( cluster = 0; cluster < k; cluster++ ) - { - if( num[cluster] < minpos ) - { - stop_clustering = 1; - break; - } - } - } - - if( stop_clustering ) - { - printf( "Clusters are too small. Clustering aborted.\n" ); - break; - } - - cur_num = 0; - cur_node = last_node = NULL; - for( cluster = 0; (cluster < k) && (cur_num < best_num); cluster++ ) - { - CvTreeCascadeNode* new_node; - - int num_splits; - int last_pos; - int total_pos; - - printf( "Cluster: %d\n", cluster ); - - last_pos = negcount; - for( i = 0; i < cluster_idx->cols; i++ ) - { - if( cluster_idx->data.i[i] == cluster ) - { - idx->data.i[last_pos++] = i; - } - } - idx->cols = last_pos; - - total_pos = idx->cols - negcount; - printf( "# pos: %d of %d. (%d%%)\n", total_pos, poscount, - 100 * total_pos / poscount ); - - CV_CALL( new_node = icvCreateTreeCascadeNode() ); - if( last_node ) last_node->next = new_node; - else cur_node = new_node; - last_node = new_node; - - posweight = (equalweights) - ? 1.0F / (total_pos + negcount) : (0.5F / total_pos); - negweight = (equalweights) - ? 1.0F / (total_pos + negcount) : (0.5F / negcount); - - icvSetWeightsAndClasses( training_data, - poscount, posweight, 1.0F, negcount, negweight, 0.0F ); - - /* CV_DEBUG_SAVE( idx ); */ - - fflush( stdout ); - - proctime = -TIME( 0 ); - new_node->stage = (CvStageHaarClassifier*) - icvCreateCARTStageClassifier( training_data, idx, haar_features, - minhitrate, maxfalsealarm, symmetric, - weightfraction, numsplits, (CvBoostType) boosttype, - (CvStumpError) stumperror, best_num - cur_num ); - printf( "Stage training time: %.2f\n", (proctime + TIME( 0 )) ); - - if( !(new_node->stage) ) - { - printf( "Stage training aborted.\n" ); - cur_num = best_num + 1; - } - else - { - num_splits = icvNumSplits( new_node->stage ); - cur_num += num_splits; - - printf( "Number of used features: %d\n", num_splits ); - } - } /* for each cluster */ - - if( cur_num < best_num ) - { - icvReleaseTreeCascadeNodes( &multiple_clusters ); - best_num = cur_num; - best_clusters = k; - multiple_clusters = cur_node; - } - else - { - icvReleaseTreeCascadeNodes( &cur_node ); - } - } /* try different number of clusters */ - cvReleaseMat( &vals ); - - CvSplit* curSplit; - CV_CALL( curSplit = (CvSplit*) cvAlloc( sizeof( *curSplit ) ) ); - memset(curSplit, 0, sizeof(*curSplit)); - - if( last_split ) last_split->next = curSplit; - else first_split = curSplit; - last_split = curSplit; - - curSplit->single_cluster = single_cluster; - curSplit->multiple_clusters = multiple_clusters; - curSplit->num_clusters = best_clusters; - curSplit->parent = parent; - curSplit->single_multiple_ratio = (float) single_num / best_num; - } - - if( parent ) parent = parent->next_same_level; - } while( parent ); - - /* choose which nodes should be splitted */ - do - { - float max_single_multiple_ratio; - - cur_split = NULL; - max_single_multiple_ratio = 0.0F; - last_split = first_split; - while( last_split ) - { - if( last_split->single_cluster && last_split->multiple_clusters && - last_split->single_multiple_ratio > max_single_multiple_ratio ) - { - max_single_multiple_ratio = last_split->single_multiple_ratio; - cur_split = last_split; - } - last_split = last_split->next; - } - if( cur_split ) - { - if( maxtreesplits < 0 || - cur_split->num_clusters <= maxtreesplits - total_splits + 1 ) - { - cur_split->single_cluster = NULL; - total_splits += cur_split->num_clusters - 1; - } - else - { - icvReleaseTreeCascadeNodes( &(cur_split->multiple_clusters) ); - cur_split->multiple_clusters = NULL; - } - } - } while( cur_split ); - - /* attach new nodes to the tree */ - leaves = last_node = NULL; - last_split = first_split; - while( last_split ) - { - cur_node = (last_split->multiple_clusters) - ? last_split->multiple_clusters : last_split->single_cluster; - parent = last_split->parent; - if( parent ) parent->child = cur_node; - - /* connect leaves via next_same_level and save them */ - for( ; cur_node; cur_node = cur_node->next ) - { - FILE* file; - - if( last_node ) last_node->next_same_level = cur_node; - else leaves = cur_node; - last_node = cur_node; - cur_node->parent = parent; - - cur_node->idx = tcc->next_idx; - tcc->next_idx++; - sprintf( suffix, "%d/%s", cur_node->idx, CV_STAGE_CART_FILE_NAME ); - file = NULL; - if( icvMkDir( stage_name ) && (file = fopen( stage_name, "w" )) != 0 ) - { - cur_node->stage->save( (CvIntHaarClassifier*) cur_node->stage, file ); - fprintf( file, "\n%d\n%d\n", - ((parent) ? parent->idx : -1), - ((cur_node->next) ? tcc->next_idx : -1) ); - } - else - { - printf( "Failed to save classifier into %s\n", stage_name ); - } - if( file ) fclose( file ); - } - - if( parent ) sprintf( buf, "%d", parent->idx ); - else sprintf( buf, "NULL" ); - printf( "\nParent node: %s\n", buf ); - printf( "Chosen number of splits: %d\n\n", (last_split->multiple_clusters) - ? (last_split->num_clusters - 1) : 0 ); - - cur_split = last_split; - last_split = last_split->next; - cvFree( &cur_split ); - } /* for each split point */ - - printf( "Total number of splits: %d\n", total_splits ); - - if( !(tcc->root) ) tcc->root = leaves; - CV_CALL( icvPrintTreeCascade( tcc->root ) ); - - } while( leaves ); - - /* save the cascade to xml file */ - { - char xml_path[1024]; - int len = (int)strlen(dirname); - CvHaarClassifierCascade* cascade = 0; - strcpy( xml_path, dirname ); - if( xml_path[len-1] == '\\' || xml_path[len-1] == '/' ) - len--; - strcpy( xml_path + len, ".xml" ); - cascade = cvLoadHaarClassifierCascade( dirname, cvSize(winwidth,winheight) ); - if( cascade ) - cvSave( xml_path, cascade ); - cvReleaseHaarClassifierCascade( &cascade ); - } - - } /* if( nstages > 0 ) */ - - /* check cascade performance */ - printf( "\nCascade performance\n" ); - - tcc->eval = icvEvalTreeCascadeClassifier; - - /* load samples */ - consumed = 0; - poscount = icvGetHaarTrainingDataFromVec( training_data, 0, npos, - (CvIntHaarClassifier*) tcc, vecfilename, &consumed ); - - printf( "POS: %d %d %f\n", poscount, consumed, - (consumed > 0) ? (((float) poscount)/consumed) : 0 ); - - if( poscount <= 0 ) - fprintf( stderr, "Warning: unable to obtain positive samples\n" ); - - proctime = -TIME( 0 ); - - negcount = icvGetHaarTrainingDataFromBG( training_data, poscount, nneg, - (CvIntHaarClassifier*) tcc, &false_alarm, bg_vecfile ? bgfilename : NULL ); - - printf( "NEG: %d %g\n", negcount, false_alarm ); - - printf( "BACKGROUND PROCESSING TIME: %.2f\n", (proctime + TIME( 0 )) ); - - if( negcount <= 0 ) - fprintf( stderr, "Warning: unable to obtain negative samples\n" ); - - __END__; - - if (! bg_vecfile) - icvDestroyBackgroundReaders(); - - if( tcc ) tcc->release( (CvIntHaarClassifier**) &tcc ); - icvReleaseIntHaarFeatures( &haar_features ); - icvReleaseHaarTrainingData( &training_data ); - cvReleaseMat( &cluster_idx ); - cvReleaseMat( &idx ); - cvReleaseMat( &vals ); - cvReleaseMat( &features_idx ); -} - - - -void cvCreateTrainingSamples( const char* filename, - const char* imgfilename, int bgcolor, int bgthreshold, - const char* bgfilename, int count, - int invert, int maxintensitydev, - double maxxangle, double maxyangle, double maxzangle, - int showsamples, - int winwidth, int winheight ) -{ - CvSampleDistortionData data; - - assert( filename != NULL ); - assert( imgfilename != NULL ); - - if( !icvMkDir( filename ) ) - { - fprintf( stderr, "Unable to create output file: %s\n", filename ); - return; - } - if( icvStartSampleDistortion( imgfilename, bgcolor, bgthreshold, &data ) ) - { - FILE* output = NULL; - - output = fopen( filename, "wb" ); - if( output != NULL ) - { - int hasbg; - int i; - CvMat sample; - int inverse; - - hasbg = 0; - hasbg = (bgfilename != NULL && icvInitBackgroundReaders( bgfilename, - cvSize( winwidth,winheight ) ) ); - - sample = cvMat( winheight, winwidth, CV_8UC1, cvAlloc( sizeof( uchar ) * - winheight * winwidth ) ); - - icvWriteVecHeader( output, count, sample.cols, sample.rows ); - - if( showsamples ) - { - cvNamedWindow( "Sample", CV_WINDOW_AUTOSIZE ); - } - - inverse = invert; - for( i = 0; i < count; i++ ) - { - if( hasbg ) - { - icvGetBackgroundImage( cvbgdata, cvbgreader, &sample ); - } - else - { - cvSet( &sample, cvScalar( bgcolor ) ); - } - - if( invert == CV_RANDOM_INVERT ) - { - inverse = (rand() > (RAND_MAX/2)); - } - icvPlaceDistortedSample( &sample, inverse, maxintensitydev, - maxxangle, maxyangle, maxzangle, - 0 /* nonzero means placing image without cut offs */, - 0.0 /* nozero adds random shifting */, - 0.0 /* nozero adds random scaling */, - &data ); - - if( showsamples ) - { - cvShowImage( "Sample", &sample ); - if( cvWaitKey( 0 ) == 27 ) - { - showsamples = 0; - } - } - - icvWriteVecSample( output, &sample ); - -#ifdef CV_VERBOSE - if( i % 500 == 0 ) - { - printf( "\r%3d%%", 100 * i / count ); - } -#endif /* CV_VERBOSE */ - } - icvDestroyBackgroundReaders(); - cvFree( &(sample.data.ptr) ); - fclose( output ); - } /* if( output != NULL ) */ - - icvEndSampleDistortion( &data ); - } - -#ifdef CV_VERBOSE - printf( "\r \r" ); -#endif /* CV_VERBOSE */ - -} - -#define CV_INFO_FILENAME "info.dat" - - -void cvCreateTestSamples( const char* infoname, - const char* imgfilename, int bgcolor, int bgthreshold, - const char* bgfilename, int count, - int invert, int maxintensitydev, - double maxxangle, double maxyangle, double maxzangle, - int showsamples, - int winwidth, int winheight ) -{ - CvSampleDistortionData data; - - assert( infoname != NULL ); - assert( imgfilename != NULL ); - assert( bgfilename != NULL ); - - if( !icvMkDir( infoname ) ) - { - -#if CV_VERBOSE - fprintf( stderr, "Unable to create directory hierarchy: %s\n", infoname ); -#endif /* CV_VERBOSE */ - - return; - } - if( icvStartSampleDistortion( imgfilename, bgcolor, bgthreshold, &data ) ) - { - char fullname[PATH_MAX]; - char* filename; - CvMat win; - FILE* info; - - if( icvInitBackgroundReaders( bgfilename, cvSize( 10, 10 ) ) ) - { - int i; - int x, y, width, height; - float scale; - float maxscale; - int inverse; - - if( showsamples ) - { - cvNamedWindow( "Image", CV_WINDOW_AUTOSIZE ); - } - - info = fopen( infoname, "w" ); - strcpy( fullname, infoname ); - filename = strrchr( fullname, '\\' ); - if( filename == NULL ) - { - filename = strrchr( fullname, '/' ); - } - if( filename == NULL ) - { - filename = fullname; - } - else - { - filename++; - } - - count = MIN( count, cvbgdata->count ); - inverse = invert; - for( i = 0; i < count; i++ ) - { - icvGetNextFromBackgroundData( cvbgdata, cvbgreader ); - - maxscale = MIN( 0.7F * cvbgreader->src.cols / winwidth, - 0.7F * cvbgreader->src.rows / winheight ); - if( maxscale < 1.0F ) continue; - - scale = (maxscale - 1.0F) * rand() / RAND_MAX + 1.0F; - width = (int) (scale * winwidth); - height = (int) (scale * winheight); - x = (int) ((0.1+0.8 * rand()/RAND_MAX) * (cvbgreader->src.cols - width)); - y = (int) ((0.1+0.8 * rand()/RAND_MAX) * (cvbgreader->src.rows - height)); - - cvGetSubArr( &cvbgreader->src, &win, cvRect( x, y ,width, height ) ); - if( invert == CV_RANDOM_INVERT ) - { - inverse = (rand() > (RAND_MAX/2)); - } - icvPlaceDistortedSample( &win, inverse, maxintensitydev, - maxxangle, maxyangle, maxzangle, - 1, 0.0, 0.0, &data ); - - - sprintf( filename, "%04d_%04d_%04d_%04d_%04d.jpg", - (i + 1), x, y, width, height ); - - if( info ) - { - fprintf( info, "%s %d %d %d %d %d\n", - filename, 1, x, y, width, height ); - } - - cvSaveImage( fullname, &cvbgreader->src ); - if( showsamples ) - { - cvShowImage( "Image", &cvbgreader->src ); - if( cvWaitKey( 0 ) == 27 ) - { - showsamples = 0; - } - } - } - if( info ) fclose( info ); - icvDestroyBackgroundReaders(); - } - icvEndSampleDistortion( &data ); - } -} - - -/* End of file. */ diff --git a/apps/haartraining/cvhaartraining.h b/apps/haartraining/cvhaartraining.h deleted file mode 100644 index 5a57e1773..000000000 --- a/apps/haartraining/cvhaartraining.h +++ /dev/null @@ -1,192 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * cvhaartraining.h - * - * haar training functions - */ - -#ifndef _CVHAARTRAINING_H_ -#define _CVHAARTRAINING_H_ - -/* - * cvCreateTrainingSamples - * - * Create training samples applying random distortions to sample image and - * store them in .vec file - * - * filename - .vec file name - * imgfilename - sample image file name - * bgcolor - background color for sample image - * bgthreshold - background color threshold. Pixels those colors are in range - * [bgcolor-bgthreshold, bgcolor+bgthreshold] are considered as transparent - * bgfilename - background description file name. If not NULL samples - * will be put on arbitrary background - * count - desired number of samples - * invert - if not 0 sample foreground pixels will be inverted - * if invert == CV_RANDOM_INVERT then samples will be inverted randomly - * maxintensitydev - desired max intensity deviation of foreground samples pixels - * maxxangle - max rotation angles - * maxyangle - * maxzangle - * showsamples - if not 0 samples will be shown - * winwidth - desired samples width - * winheight - desired samples height - */ -#define CV_RANDOM_INVERT 0x7FFFFFFF - -void cvCreateTrainingSamples( const char* filename, - const char* imgfilename, int bgcolor, int bgthreshold, - const char* bgfilename, int count, - int invert = 0, int maxintensitydev = 40, - double maxxangle = 1.1, - double maxyangle = 1.1, - double maxzangle = 0.5, - int showsamples = 0, - int winwidth = 24, int winheight = 24 ); - -void cvCreateTestSamples( const char* infoname, - const char* imgfilename, int bgcolor, int bgthreshold, - const char* bgfilename, int count, - int invert, int maxintensitydev, - double maxxangle, double maxyangle, double maxzangle, - int showsamples, - int winwidth, int winheight ); - -/* - * cvCreateTrainingSamplesFromInfo - * - * Create training samples from a set of marked up images and store them into .vec file - * infoname - file in which marked up image descriptions are stored - * num - desired number of samples - * showsamples - if not 0 samples will be shown - * winwidth - sample width - * winheight - sample height - * - * Return number of successfully created samples - */ -int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilename, - int num, - int showsamples, - int winwidth, int winheight ); - -/* - * cvShowVecSamples - * - * Shows samples stored in .vec file - * - * filename - * .vec file name - * winwidth - * sample width - * winheight - * sample height - * scale - * the scale each sample is adjusted to - */ -void cvShowVecSamples( const char* filename, int winwidth, int winheight, double scale ); - - -/* - * cvCreateCascadeClassifier - * - * Create cascade classifier - * dirname - directory name in which cascade classifier will be created. - * It must exist and contain subdirectories 0, 1, 2, ... (nstages-1). - * vecfilename - name of .vec file with object's images - * bgfilename - name of background description file - * bg_vecfile - true if bgfilename represents a vec file with discrete negatives - * npos - number of positive samples used in training of each stage - * nneg - number of negative samples used in training of each stage - * nstages - number of stages - * numprecalculated - number of features being precalculated. Each precalculated feature - * requires (number_of_samples*(sizeof( float ) + sizeof( short ))) bytes of memory - * numsplits - number of binary splits in each weak classifier - * 1 - stumps, 2 and more - trees. - * minhitrate - desired min hit rate of each stage - * maxfalsealarm - desired max false alarm of each stage - * weightfraction - weight trimming parameter - * mode - 0 - BASIC = Viola - * 1 - CORE = All upright - * 2 - ALL = All features - * symmetric - if not 0 vertical symmetry is assumed - * equalweights - if not 0 initial weights of all samples will be equal - * winwidth - sample width - * winheight - sample height - * boosttype - type of applied boosting algorithm - * 0 - Discrete AdaBoost - * 1 - Real AdaBoost - * 2 - LogitBoost - * 3 - Gentle AdaBoost - * stumperror - type of used error if Discrete AdaBoost algorithm is applied - * 0 - misclassification error - * 1 - gini error - * 2 - entropy error - */ -void cvCreateCascadeClassifier( const char* dirname, - const char* vecfilename, - const char* bgfilename, - int npos, int nneg, int nstages, - int numprecalculated, - int numsplits, - float minhitrate = 0.995F, float maxfalsealarm = 0.5F, - float weightfraction = 0.95F, - int mode = 0, int symmetric = 1, - int equalweights = 1, - int winwidth = 24, int winheight = 24, - int boosttype = 3, int stumperror = 0 ); - -void cvCreateTreeCascadeClassifier( const char* dirname, - const char* vecfilename, - const char* bgfilename, - int npos, int nneg, int nstages, - int numprecalculated, - int numsplits, - float minhitrate, float maxfalsealarm, - float weightfraction, - int mode, int symmetric, - int equalweights, - int winwidth, int winheight, - int boosttype, int stumperror, - int maxtreesplits, int minpos, bool bg_vecfile = false ); - -#endif /* _CVHAARTRAINING_H_ */ diff --git a/apps/haartraining/cvsamples.cpp b/apps/haartraining/cvsamples.cpp deleted file mode 100644 index b477b92be..000000000 --- a/apps/haartraining/cvsamples.cpp +++ /dev/null @@ -1,953 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * cvsamples.cpp - * - * support functions for training and test samples creation. - */ - -#include "cvhaartraining.h" -#include "_cvhaartraining.h" - -/* if ipl.h file is included then iplWarpPerspectiveQ function - is used for image transformation during samples creation; - otherwise internal cvWarpPerspective function is used */ - -//#include - -#include "cv.h" -#include "highgui.h" - -/* Calculates coefficients of perspective transformation - * which maps into rectangle ((0,0), (w,0), (w,h), (h,0)): - * - * c00*xi + c01*yi + c02 - * ui = --------------------- - * c20*xi + c21*yi + c22 - * - * c10*xi + c11*yi + c12 - * vi = --------------------- - * c20*xi + c21*yi + c22 - * - * Coefficients are calculated by solving linear system: - * / x0 y0 1 0 0 0 -x0*u0 -y0*u0 \ /c00\ /u0\ - * | x1 y1 1 0 0 0 -x1*u1 -y1*u1 | |c01| |u1| - * | x2 y2 1 0 0 0 -x2*u2 -y2*u2 | |c02| |u2| - * | x3 y3 1 0 0 0 -x3*u3 -y3*u3 |.|c10|=|u3|, - * | 0 0 0 x0 y0 1 -x0*v0 -y0*v0 | |c11| |v0| - * | 0 0 0 x1 y1 1 -x1*v1 -y1*v1 | |c12| |v1| - * | 0 0 0 x2 y2 1 -x2*v2 -y2*v2 | |c20| |v2| - * \ 0 0 0 x3 y3 1 -x3*v3 -y3*v3 / \c21/ \v3/ - * - * where: - * (xi, yi) = (quad[i][0], quad[i][1]) - * cij - coeffs[i][j], coeffs[2][2] = 1 - * (ui, vi) - rectangle vertices - */ -static void cvGetPerspectiveTransform( CvSize src_size, double quad[4][2], - double coeffs[3][3] ) -{ - //CV_FUNCNAME( "cvWarpPerspective" ); - - __BEGIN__; - - double a[8][8]; - double b[8]; - - CvMat A = cvMat( 8, 8, CV_64FC1, a ); - CvMat B = cvMat( 8, 1, CV_64FC1, b ); - CvMat X = cvMat( 8, 1, CV_64FC1, coeffs ); - - int i; - for( i = 0; i < 4; ++i ) - { - a[i][0] = quad[i][0]; a[i][1] = quad[i][1]; a[i][2] = 1; - a[i][3] = a[i][4] = a[i][5] = a[i][6] = a[i][7] = 0; - b[i] = 0; - } - for( i = 4; i < 8; ++i ) - { - a[i][3] = quad[i-4][0]; a[i][4] = quad[i-4][1]; a[i][5] = 1; - a[i][0] = a[i][1] = a[i][2] = a[i][6] = a[i][7] = 0; - b[i] = 0; - } - - int u = src_size.width - 1; - int v = src_size.height - 1; - - a[1][6] = -quad[1][0] * u; a[1][7] = -quad[1][1] * u; - a[2][6] = -quad[2][0] * u; a[2][7] = -quad[2][1] * u; - b[1] = b[2] = u; - - a[6][6] = -quad[2][0] * v; a[6][7] = -quad[2][1] * v; - a[7][6] = -quad[3][0] * v; a[7][7] = -quad[3][1] * v; - b[6] = b[7] = v; - - cvSolve( &A, &B, &X ); - - coeffs[2][2] = 1; - - __END__; -} - -/* Warps source into destination by a perspective transform */ -static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] ) -{ - CV_FUNCNAME( "cvWarpPerspective" ); - - __BEGIN__; - -#ifdef __IPL_H__ - IplImage src_stub, dst_stub; - IplImage* src_img; - IplImage* dst_img; - CV_CALL( src_img = cvGetImage( src, &src_stub ) ); - CV_CALL( dst_img = cvGetImage( dst, &dst_stub ) ); - iplWarpPerspectiveQ( src_img, dst_img, quad, IPL_WARP_R_TO_Q, - IPL_INTER_CUBIC | IPL_SMOOTH_EDGE ); -#else - - int fill_value = 0; - - double c[3][3]; /* transformation coefficients */ - double q[4][2]; /* rearranged quad */ - - int left = 0; - int right = 0; - int next_right = 0; - int next_left = 0; - double y_min = 0; - double y_max = 0; - double k_left, b_left, k_right, b_right; - - uchar* src_data; - int src_step; - CvSize src_size; - - uchar* dst_data; - int dst_step; - CvSize dst_size; - - double d = 0; - int direction = 0; - int i; - - if( !src || (!CV_IS_IMAGE( src ) && !CV_IS_MAT( src )) || - cvGetElemType( src ) != CV_8UC1 || - cvGetDims( src ) != 2 ) - { - CV_ERROR( CV_StsBadArg, - "Source must be two-dimensional array of CV_8UC1 type." ); - } - if( !dst || (!CV_IS_IMAGE( dst ) && !CV_IS_MAT( dst )) || - cvGetElemType( dst ) != CV_8UC1 || - cvGetDims( dst ) != 2 ) - { - CV_ERROR( CV_StsBadArg, - "Destination must be two-dimensional array of CV_8UC1 type." ); - } - - CV_CALL( cvGetRawData( src, &src_data, &src_step, &src_size ) ); - CV_CALL( cvGetRawData( dst, &dst_data, &dst_step, &dst_size ) ); - - CV_CALL( cvGetPerspectiveTransform( src_size, quad, c ) ); - - /* if direction > 0 then vertices in quad follow in a CW direction, - otherwise they follow in a CCW direction */ - direction = 0; - for( i = 0; i < 4; ++i ) - { - int ni = i + 1; if( ni == 4 ) ni = 0; - int pi = i - 1; if( pi == -1 ) pi = 3; - - d = (quad[i][0] - quad[pi][0])*(quad[ni][1] - quad[i][1]) - - (quad[i][1] - quad[pi][1])*(quad[ni][0] - quad[i][0]); - int cur_direction = CV_SIGN(d); - if( direction == 0 ) - { - direction = cur_direction; - } - else if( direction * cur_direction < 0 ) - { - direction = 0; - break; - } - } - if( direction == 0 ) - { - CV_ERROR( CV_StsBadArg, "Quadrangle is nonconvex or degenerated." ); - } - - /* is the index of the topmost quad vertice - if there are two such vertices is the leftmost one */ - left = 0; - for( i = 1; i < 4; ++i ) - { - if( (quad[i][1] < quad[left][1]) || - ((quad[i][1] == quad[left][1]) && (quad[i][0] < quad[left][0])) ) - { - left = i; - } - } - /* rearrange vertices in such way that they follow in a CW - direction and the first vertice is the topmost one and put them - into */ - if( direction > 0 ) - { - for( i = left; i < 4; ++i ) - { - q[i-left][0] = quad[i][0]; - q[i-left][1] = quad[i][1]; - } - for( i = 0; i < left; ++i ) - { - q[4-left+i][0] = quad[i][0]; - q[4-left+i][1] = quad[i][1]; - } - } - else - { - for( i = left; i >= 0; --i ) - { - q[left-i][0] = quad[i][0]; - q[left-i][1] = quad[i][1]; - } - for( i = 3; i > left; --i ) - { - q[4+left-i][0] = quad[i][0]; - q[4+left-i][1] = quad[i][1]; - } - } - - left = right = 0; - /* if there are two topmost points, is the index of the rightmost one - otherwise */ - if( q[left][1] == q[left+1][1] ) - { - right = 1; - } - - /* follows in a CCW direction */ - next_left = 3; - /* follows in a CW direction */ - next_right = right + 1; - - /* subtraction of 1 prevents skipping of the first row */ - y_min = q[left][1] - 1; - - /* left edge equation: y = k_left * x + b_left */ - k_left = (q[left][0] - q[next_left][0]) / - (q[left][1] - q[next_left][1]); - b_left = (q[left][1] * q[next_left][0] - - q[left][0] * q[next_left][1]) / - (q[left][1] - q[next_left][1]); - - /* right edge equation: y = k_right * x + b_right */ - k_right = (q[right][0] - q[next_right][0]) / - (q[right][1] - q[next_right][1]); - b_right = (q[right][1] * q[next_right][0] - - q[right][0] * q[next_right][1]) / - (q[right][1] - q[next_right][1]); - - for(;;) - { - int x, y; - - y_max = MIN( q[next_left][1], q[next_right][1] ); - - int iy_min = MAX( cvRound(y_min), 0 ) + 1; - int iy_max = MIN( cvRound(y_max), dst_size.height - 1 ); - - double x_min = k_left * iy_min + b_left; - double x_max = k_right * iy_min + b_right; - - /* walk through the destination quadrangle row by row */ - for( y = iy_min; y <= iy_max; ++y ) - { - int ix_min = MAX( cvRound( x_min ), 0 ); - int ix_max = MIN( cvRound( x_max ), dst_size.width - 1 ); - - for( x = ix_min; x <= ix_max; ++x ) - { - /* calculate coordinates of the corresponding source array point */ - double div = (c[2][0] * x + c[2][1] * y + c[2][2]); - double src_x = (c[0][0] * x + c[0][1] * y + c[0][2]) / div; - double src_y = (c[1][0] * x + c[1][1] * y + c[1][2]) / div; - - int isrc_x = cvFloor( src_x ); - int isrc_y = cvFloor( src_y ); - double delta_x = src_x - isrc_x; - double delta_y = src_y - isrc_y; - - uchar* s = src_data + isrc_y * src_step + isrc_x; - - int i00, i10, i01, i11; - i00 = i10 = i01 = i11 = (int) fill_value; - - /* linear interpolation using 2x2 neighborhood */ - if( isrc_x >= 0 && isrc_x <= src_size.width && - isrc_y >= 0 && isrc_y <= src_size.height ) - { - i00 = s[0]; - } - if( isrc_x >= -1 && isrc_x < src_size.width && - isrc_y >= 0 && isrc_y <= src_size.height ) - { - i10 = s[1]; - } - if( isrc_x >= 0 && isrc_x <= src_size.width && - isrc_y >= -1 && isrc_y < src_size.height ) - { - i01 = s[src_step]; - } - if( isrc_x >= -1 && isrc_x < src_size.width && - isrc_y >= -1 && isrc_y < src_size.height ) - { - i11 = s[src_step+1]; - } - - double i0 = i00 + (i10 - i00)*delta_x; - double i1 = i01 + (i11 - i01)*delta_x; - - ((uchar*)(dst_data + y * dst_step))[x] = (uchar) (i0 + (i1 - i0)*delta_y); - } - x_min += k_left; - x_max += k_right; - } - - if( (next_left == next_right) || - (next_left+1 == next_right && q[next_left][1] == q[next_right][1]) ) - { - break; - } - - if( y_max == q[next_left][1] ) - { - left = next_left; - next_left = left - 1; - - k_left = (q[left][0] - q[next_left][0]) / - (q[left][1] - q[next_left][1]); - b_left = (q[left][1] * q[next_left][0] - - q[left][0] * q[next_left][1]) / - (q[left][1] - q[next_left][1]); - } - if( y_max == q[next_right][1] ) - { - right = next_right; - next_right = right + 1; - - k_right = (q[right][0] - q[next_right][0]) / - (q[right][1] - q[next_right][1]); - b_right = (q[right][1] * q[next_right][0] - - q[right][0] * q[next_right][1]) / - (q[right][1] - q[next_right][1]); - } - y_min = y_max; - } -#endif /* #ifndef __IPL_H__ */ - - __END__; -} - -static -void icvRandomQuad( int width, int height, double quad[4][2], - double maxxangle, - double maxyangle, - double maxzangle ) -{ - double distfactor = 3.0; - double distfactor2 = 1.0; - - double halfw, halfh; - int i; - - double rotVectData[3]; - double vectData[3]; - double rotMatData[9]; - - CvMat rotVect; - CvMat rotMat; - CvMat vect; - - double d; - - rotVect = cvMat( 3, 1, CV_64FC1, &rotVectData[0] ); - rotMat = cvMat( 3, 3, CV_64FC1, &rotMatData[0] ); - vect = cvMat( 3, 1, CV_64FC1, &vectData[0] ); - - rotVectData[0] = maxxangle * (2.0 * rand() / RAND_MAX - 1.0); - rotVectData[1] = ( maxyangle - fabs( rotVectData[0] ) ) - * (2.0 * rand() / RAND_MAX - 1.0); - rotVectData[2] = maxzangle * (2.0 * rand() / RAND_MAX - 1.0); - d = (distfactor + distfactor2 * (2.0 * rand() / RAND_MAX - 1.0)) * width; - -/* - rotVectData[0] = maxxangle; - rotVectData[1] = maxyangle; - rotVectData[2] = maxzangle; - - d = distfactor * width; -*/ - - cvRodrigues2( &rotVect, &rotMat ); - - halfw = 0.5 * width; - halfh = 0.5 * height; - - quad[0][0] = -halfw; - quad[0][1] = -halfh; - quad[1][0] = halfw; - quad[1][1] = -halfh; - quad[2][0] = halfw; - quad[2][1] = halfh; - quad[3][0] = -halfw; - quad[3][1] = halfh; - - for( i = 0; i < 4; i++ ) - { - rotVectData[0] = quad[i][0]; - rotVectData[1] = quad[i][1]; - rotVectData[2] = 0.0; - cvMatMulAdd( &rotMat, &rotVect, 0, &vect ); - quad[i][0] = vectData[0] * d / (d + vectData[2]) + halfw; - quad[i][1] = vectData[1] * d / (d + vectData[2]) + halfh; - - /* - quad[i][0] += halfw; - quad[i][1] += halfh; - */ - } -} - - -int icvStartSampleDistortion( const char* imgfilename, int bgcolor, int bgthreshold, - CvSampleDistortionData* data ) -{ - memset( data, 0, sizeof( *data ) ); - data->src = cvLoadImage( imgfilename, 0 ); - if( data->src != NULL && data->src->nChannels == 1 - && data->src->depth == IPL_DEPTH_8U ) - { - int r, c; - uchar* pmask; - uchar* psrc; - uchar* perode; - uchar* pdilate; - uchar dd, de; - - data->dx = data->src->width / 2; - data->dy = data->src->height / 2; - data->bgcolor = bgcolor; - - data->mask = cvCloneImage( data->src ); - data->erode = cvCloneImage( data->src ); - data->dilate = cvCloneImage( data->src ); - - /* make mask image */ - for( r = 0; r < data->mask->height; r++ ) - { - for( c = 0; c < data->mask->width; c++ ) - { - pmask = ( (uchar*) (data->mask->imageData + r * data->mask->widthStep) - + c ); - if( bgcolor - bgthreshold <= (int) (*pmask) && - (int) (*pmask) <= bgcolor + bgthreshold ) - { - *pmask = (uchar) 0; - } - else - { - *pmask = (uchar) 255; - } - } - } - - /* extend borders of source image */ - cvErode( data->src, data->erode, 0, 1 ); - cvDilate( data->src, data->dilate, 0, 1 ); - for( r = 0; r < data->mask->height; r++ ) - { - for( c = 0; c < data->mask->width; c++ ) - { - pmask = ( (uchar*) (data->mask->imageData + r * data->mask->widthStep) - + c ); - if( (*pmask) == 0 ) - { - psrc = ( (uchar*) (data->src->imageData + r * data->src->widthStep) - + c ); - perode = - ( (uchar*) (data->erode->imageData + r * data->erode->widthStep) - + c ); - pdilate = - ( (uchar*)(data->dilate->imageData + r * data->dilate->widthStep) - + c ); - de = (uchar)(bgcolor - (*perode)); - dd = (uchar)((*pdilate) - bgcolor); - if( de >= dd && de > bgthreshold ) - { - (*psrc) = (*perode); - } - if( dd > de && dd > bgthreshold ) - { - (*psrc) = (*pdilate); - } - } - } - } - - data->img = cvCreateImage( cvSize( data->src->width + 2 * data->dx, - data->src->height + 2 * data->dy ), - IPL_DEPTH_8U, 1 ); - data->maskimg = cvCloneImage( data->img ); - - return 1; - } - - return 0; -} - -void icvPlaceDistortedSample( CvArr* background, - int inverse, int maxintensitydev, - double maxxangle, double maxyangle, double maxzangle, - int inscribe, double maxshiftf, double maxscalef, - CvSampleDistortionData* data ) -{ - double quad[4][2]; - int r, c; - uchar* pimg; - uchar* pbg; - uchar* palpha; - uchar chartmp; - int forecolordev; - float scale; - IplImage* img; - IplImage* maskimg; - CvMat stub; - CvMat* bgimg; - - CvRect cr; - CvRect roi; - - double xshift, yshift, randscale; - - icvRandomQuad( data->src->width, data->src->height, quad, - maxxangle, maxyangle, maxzangle ); - quad[0][0] += (double) data->dx; - quad[0][1] += (double) data->dy; - quad[1][0] += (double) data->dx; - quad[1][1] += (double) data->dy; - quad[2][0] += (double) data->dx; - quad[2][1] += (double) data->dy; - quad[3][0] += (double) data->dx; - quad[3][1] += (double) data->dy; - - cvSet( data->img, cvScalar( data->bgcolor ) ); - cvSet( data->maskimg, cvScalar( 0.0 ) ); - - cvWarpPerspective( data->src, data->img, quad ); - cvWarpPerspective( data->mask, data->maskimg, quad ); - - cvSmooth( data->maskimg, data->maskimg, CV_GAUSSIAN, 3, 3 ); - - bgimg = cvGetMat( background, &stub ); - - cr.x = data->dx; - cr.y = data->dy; - cr.width = data->src->width; - cr.height = data->src->height; - - if( inscribe ) - { - /* quad's circumscribing rectangle */ - cr.x = (int) MIN( quad[0][0], quad[3][0] ); - cr.y = (int) MIN( quad[0][1], quad[1][1] ); - cr.width = (int) (MAX( quad[1][0], quad[2][0] ) + 0.5F ) - cr.x; - cr.height = (int) (MAX( quad[2][1], quad[3][1] ) + 0.5F ) - cr.y; - } - - xshift = maxshiftf * rand() / RAND_MAX; - yshift = maxshiftf * rand() / RAND_MAX; - - cr.x -= (int) ( xshift * cr.width ); - cr.y -= (int) ( yshift * cr.height ); - cr.width = (int) ((1.0 + maxshiftf) * cr.width ); - cr.height = (int) ((1.0 + maxshiftf) * cr.height); - - randscale = maxscalef * rand() / RAND_MAX; - cr.x -= (int) ( 0.5 * randscale * cr.width ); - cr.y -= (int) ( 0.5 * randscale * cr.height ); - cr.width = (int) ((1.0 + randscale) * cr.width ); - cr.height = (int) ((1.0 + randscale) * cr.height); - - scale = MAX( ((float) cr.width) / bgimg->cols, ((float) cr.height) / bgimg->rows ); - - roi.x = (int) (-0.5F * (scale * bgimg->cols - cr.width) + cr.x); - roi.y = (int) (-0.5F * (scale * bgimg->rows - cr.height) + cr.y); - roi.width = (int) (scale * bgimg->cols); - roi.height = (int) (scale * bgimg->rows); - - img = cvCreateImage( cvSize( bgimg->cols, bgimg->rows ), IPL_DEPTH_8U, 1 ); - maskimg = cvCreateImage( cvSize( bgimg->cols, bgimg->rows ), IPL_DEPTH_8U, 1 ); - - cvSetImageROI( data->img, roi ); - cvResize( data->img, img ); - cvResetImageROI( data->img ); - cvSetImageROI( data->maskimg, roi ); - cvResize( data->maskimg, maskimg ); - cvResetImageROI( data->maskimg ); - - forecolordev = (int) (maxintensitydev * (2.0 * rand() / RAND_MAX - 1.0)); - - for( r = 0; r < img->height; r++ ) - { - for( c = 0; c < img->width; c++ ) - { - pimg = (uchar*) img->imageData + r * img->widthStep + c; - pbg = (uchar*) bgimg->data.ptr + r * bgimg->step + c; - palpha = (uchar*) maskimg->imageData + r * maskimg->widthStep + c; - chartmp = (uchar) MAX( 0, MIN( 255, forecolordev + (*pimg) ) ); - if( inverse ) - { - chartmp ^= 0xFF; - } - *pbg = (uchar) (( chartmp*(*palpha )+(255 - (*palpha) )*(*pbg) ) / 255); - } - } - - cvReleaseImage( &img ); - cvReleaseImage( &maskimg ); -} - -void icvEndSampleDistortion( CvSampleDistortionData* data ) -{ - if( data->src ) - { - cvReleaseImage( &data->src ); - } - if( data->mask ) - { - cvReleaseImage( &data->mask ); - } - if( data->erode ) - { - cvReleaseImage( &data->erode ); - } - if( data->dilate ) - { - cvReleaseImage( &data->dilate ); - } - if( data->img ) - { - cvReleaseImage( &data->img ); - } - if( data->maskimg ) - { - cvReleaseImage( &data->maskimg ); - } -} - -void icvWriteVecHeader( FILE* file, int count, int width, int height ) -{ - int vecsize; - short tmp; - - /* number of samples */ - fwrite( &count, sizeof( count ), 1, file ); - /* vector size */ - vecsize = width * height; - fwrite( &vecsize, sizeof( vecsize ), 1, file ); - /* min/max values */ - tmp = 0; - fwrite( &tmp, sizeof( tmp ), 1, file ); - fwrite( &tmp, sizeof( tmp ), 1, file ); -} - -void icvWriteVecSample( FILE* file, CvArr* sample ) -{ - CvMat* mat, stub; - int r, c; - short tmp; - uchar chartmp; - - mat = cvGetMat( sample, &stub ); - chartmp = 0; - fwrite( &chartmp, sizeof( chartmp ), 1, file ); - for( r = 0; r < mat->rows; r++ ) - { - for( c = 0; c < mat->cols; c++ ) - { - tmp = (short) (CV_MAT_ELEM( *mat, uchar, r, c )); - fwrite( &tmp, sizeof( tmp ), 1, file ); - } - } -} - - -int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilename, - int num, - int showsamples, - int winwidth, int winheight ) -{ - char fullname[PATH_MAX]; - char* filename; - - FILE* info; - FILE* vec; - IplImage* src=0; - IplImage* sample; - int line; - int error; - int i; - int x, y, width, height; - int total; - - assert( infoname != NULL ); - assert( vecfilename != NULL ); - - total = 0; - if( !icvMkDir( vecfilename ) ) - { - -#if CV_VERBOSE - fprintf( stderr, "Unable to create directory hierarchy: %s\n", vecfilename ); -#endif /* CV_VERBOSE */ - - return total; - } - - info = fopen( infoname, "r" ); - if( info == NULL ) - { - -#if CV_VERBOSE - fprintf( stderr, "Unable to open file: %s\n", infoname ); -#endif /* CV_VERBOSE */ - - return total; - } - - vec = fopen( vecfilename, "wb" ); - if( vec == NULL ) - { - -#if CV_VERBOSE - fprintf( stderr, "Unable to open file: %s\n", vecfilename ); -#endif /* CV_VERBOSE */ - - fclose( info ); - - return total; - } - - sample = cvCreateImage( cvSize( winwidth, winheight ), IPL_DEPTH_8U, 1 ); - - icvWriteVecHeader( vec, num, sample->width, sample->height ); - - if( showsamples ) - { - cvNamedWindow( "Sample", CV_WINDOW_AUTOSIZE ); - } - - strcpy( fullname, infoname ); - filename = strrchr( fullname, '\\' ); - if( filename == NULL ) - { - filename = strrchr( fullname, '/' ); - } - if( filename == NULL ) - { - filename = fullname; - } - else - { - filename++; - } - - for( line = 1, error = 0, total = 0; total < num ;line++ ) - { - int count; - - error = ( fscanf( info, "%s %d", filename, &count ) != 2 ); - if( !error ) - { - src = cvLoadImage( fullname, 0 ); - error = ( src == NULL ); - if( error ) - { - -#if CV_VERBOSE - fprintf( stderr, "Unable to open image: %s\n", fullname ); -#endif /* CV_VERBOSE */ - - } - } - for( i = 0; (i < count) && (total < num); i++, total++ ) - { - error = ( fscanf( info, "%d %d %d %d", &x, &y, &width, &height ) != 4 ); - if( error ) break; - cvSetImageROI( src, cvRect( x, y, width, height ) ); - cvResize( src, sample, width >= sample->width && - height >= sample->height ? CV_INTER_AREA : CV_INTER_LINEAR ); - - if( showsamples ) - { - cvShowImage( "Sample", sample ); - if( cvWaitKey( 0 ) == 27 ) - { - showsamples = 0; - } - } - icvWriteVecSample( vec, sample ); - } - - if( src ) - { - cvReleaseImage( &src ); - } - - if( error ) - { - -#if CV_VERBOSE - fprintf( stderr, "%s(%d) : parse error", infoname, line ); -#endif /* CV_VERBOSE */ - - break; - } - } - - if( sample ) - { - cvReleaseImage( &sample ); - } - - fclose( vec ); - fclose( info ); - - return total; -} - - -void cvShowVecSamples( const char* filename, int winwidth, int winheight, - double scale ) -{ - CvVecFile file; - short tmp; - int i; - CvMat* sample; - - tmp = 0; - file.input = fopen( filename, "rb" ); - - if( file.input != NULL ) - { - size_t elements_read1 = fread( &file.count, sizeof( file.count ), 1, file.input ); - size_t elements_read2 = fread( &file.vecsize, sizeof( file.vecsize ), 1, file.input ); - size_t elements_read3 = fread( &tmp, sizeof( tmp ), 1, file.input ); - size_t elements_read4 = fread( &tmp, sizeof( tmp ), 1, file.input ); - CV_Assert(elements_read1 == 1 && elements_read2 == 1 && elements_read3 == 1 && elements_read4 == 1); - - if( file.vecsize != winwidth * winheight ) - { - int guessed_w = 0; - int guessed_h = 0; - - fprintf( stderr, "Warning: specified sample width=%d and height=%d " - "does not correspond to .vec file vector size=%d.\n", - winwidth, winheight, file.vecsize ); - if( file.vecsize > 0 ) - { - guessed_w = cvFloor( sqrt( (float) file.vecsize ) ); - if( guessed_w > 0 ) - { - guessed_h = file.vecsize / guessed_w; - } - } - - if( guessed_w <= 0 || guessed_h <= 0 || guessed_w * guessed_h != file.vecsize) - { - fprintf( stderr, "Error: failed to guess sample width and height\n" ); - fclose( file.input ); - - return; - } - else - { - winwidth = guessed_w; - winheight = guessed_h; - fprintf( stderr, "Guessed width=%d, guessed height=%d\n", - winwidth, winheight ); - } - } - - if( !feof( file.input ) && scale > 0 ) - { - CvMat* scaled_sample = 0; - - file.last = 0; - file.vector = (short*) cvAlloc( sizeof( *file.vector ) * file.vecsize ); - sample = scaled_sample = cvCreateMat( winheight, winwidth, CV_8UC1 ); - if( scale != 1.0 ) - { - scaled_sample = cvCreateMat( MAX( 1, cvCeil( scale * winheight ) ), - MAX( 1, cvCeil( scale * winwidth ) ), - CV_8UC1 ); - } - cvNamedWindow( "Sample", CV_WINDOW_AUTOSIZE ); - for( i = 0; i < file.count; i++ ) - { - icvGetHaarTraininDataFromVecCallback( sample, &file ); - if( scale != 1.0 ) cvResize( sample, scaled_sample, CV_INTER_LINEAR); - cvShowImage( "Sample", scaled_sample ); - if( cvWaitKey( 0 ) == 27 ) break; - } - if( scaled_sample && scaled_sample != sample ) cvReleaseMat( &scaled_sample ); - cvReleaseMat( &sample ); - cvFree( &file.vector ); - } - fclose( file.input ); - } -} - - -/* End of file. */ diff --git a/apps/haartraining/haartraining.cpp b/apps/haartraining/haartraining.cpp deleted file mode 100644 index f85a3c1f5..000000000 --- a/apps/haartraining/haartraining.cpp +++ /dev/null @@ -1,284 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * haartraining.cpp - * - * Train cascade classifier - */ - -#include -#include -#include - -using namespace std; - -#include "cvhaartraining.h" - -int main( int argc, char* argv[] ) -{ - int i = 0; - char* nullname = (char*)"(NULL)"; - - char* vecname = NULL; - char* dirname = NULL; - char* bgname = NULL; - - bool bg_vecfile = false; - int npos = 2000; - int nneg = 2000; - int nstages = 14; - int mem = 200; - int nsplits = 1; - float minhitrate = 0.995F; - float maxfalsealarm = 0.5F; - float weightfraction = 0.95F; - int mode = 0; - int symmetric = 1; - int equalweights = 0; - int width = 24; - int height = 24; - const char* boosttypes[] = { "DAB", "RAB", "LB", "GAB" }; - int boosttype = 3; - const char* stumperrors[] = { "misclass", "gini", "entropy" }; - int stumperror = 0; - int maxtreesplits = 0; - int minpos = 500; - - if( argc == 1 ) - { - printf( "Usage: %s\n -data \n" - " -vec \n" - " -bg \n" - " [-bg-vecfile]\n" - " [-npos ]\n" - " [-nneg ]\n" - " [-nstages ]\n" - " [-nsplits ]\n" - " [-mem ]\n" - " [-sym (default)] [-nonsym]\n" - " [-minhitrate ]\n" - " [-maxfalsealarm ]\n" - " [-weighttrimming ]\n" - " [-eqw]\n" - " [-mode ]\n" - " [-w ]\n" - " [-h ]\n" - " [-bt ]\n" - " [-err ]\n" - " [-maxtreesplits ]\n" - " [-minpos ]\n", - argv[0], npos, nneg, nstages, nsplits, mem, - minhitrate, maxfalsealarm, weightfraction, width, height, - maxtreesplits, minpos ); - - return 0; - } - - for( i = 1; i < argc; i++ ) - { - if( !strcmp( argv[i], "-data" ) ) - { - dirname = argv[++i]; - } - else if( !strcmp( argv[i], "-vec" ) ) - { - vecname = argv[++i]; - } - else if( !strcmp( argv[i], "-bg" ) ) - { - bgname = argv[++i]; - } - else if( !strcmp( argv[i], "-bg-vecfile" ) ) - { - bg_vecfile = true; - } - else if( !strcmp( argv[i], "-npos" ) ) - { - npos = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-nneg" ) ) - { - nneg = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-nstages" ) ) - { - nstages = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-nsplits" ) ) - { - nsplits = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-mem" ) ) - { - mem = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-sym" ) ) - { - symmetric = 1; - } - else if( !strcmp( argv[i], "-nonsym" ) ) - { - symmetric = 0; - } - else if( !strcmp( argv[i], "-minhitrate" ) ) - { - minhitrate = (float) atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-maxfalsealarm" ) ) - { - maxfalsealarm = (float) atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-weighttrimming" ) ) - { - weightfraction = (float) atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-eqw" ) ) - { - equalweights = 1; - } - else if( !strcmp( argv[i], "-mode" ) ) - { - char* tmp = argv[++i]; - - if( !strcmp( tmp, "CORE" ) ) - { - mode = 1; - } - else if( !strcmp( tmp, "ALL" ) ) - { - mode = 2; - } - else - { - mode = 0; - } - } - else if( !strcmp( argv[i], "-w" ) ) - { - width = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-h" ) ) - { - height = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-bt" ) ) - { - i++; - if( !strcmp( argv[i], boosttypes[0] ) ) - { - boosttype = 0; - } - else if( !strcmp( argv[i], boosttypes[1] ) ) - { - boosttype = 1; - } - else if( !strcmp( argv[i], boosttypes[2] ) ) - { - boosttype = 2; - } - else - { - boosttype = 3; - } - } - else if( !strcmp( argv[i], "-err" ) ) - { - i++; - if( !strcmp( argv[i], stumperrors[0] ) ) - { - stumperror = 0; - } - else if( !strcmp( argv[i], stumperrors[1] ) ) - { - stumperror = 1; - } - else - { - stumperror = 2; - } - } - else if( !strcmp( argv[i], "-maxtreesplits" ) ) - { - maxtreesplits = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-minpos" ) ) - { - minpos = atoi( argv[++i] ); - } - } - - printf( "Data dir name: %s\n", ((dirname == NULL) ? nullname : dirname ) ); - printf( "Vec file name: %s\n", ((vecname == NULL) ? nullname : vecname ) ); - printf( "BG file name: %s, is a vecfile: %s\n", ((bgname == NULL) ? nullname : bgname ), bg_vecfile ? "yes" : "no" ); - printf( "Num pos: %d\n", npos ); - printf( "Num neg: %d\n", nneg ); - printf( "Num stages: %d\n", nstages ); - printf( "Num splits: %d (%s as weak classifier)\n", nsplits, - (nsplits == 1) ? "stump" : "tree" ); - printf( "Mem: %d MB\n", mem ); - printf( "Symmetric: %s\n", (symmetric) ? "TRUE" : "FALSE" ); - printf( "Min hit rate: %f\n", minhitrate ); - printf( "Max false alarm rate: %f\n", maxfalsealarm ); - printf( "Weight trimming: %f\n", weightfraction ); - printf( "Equal weights: %s\n", (equalweights) ? "TRUE" : "FALSE" ); - printf( "Mode: %s\n", ( (mode == 0) ? "BASIC" : ( (mode == 1) ? "CORE" : "ALL") ) ); - printf( "Width: %d\n", width ); - printf( "Height: %d\n", height ); - //printf( "Max num of precalculated features: %d\n", numprecalculated ); - printf( "Applied boosting algorithm: %s\n", boosttypes[boosttype] ); - printf( "Error (valid only for Discrete and Real AdaBoost): %s\n", - stumperrors[stumperror] ); - - printf( "Max number of splits in tree cascade: %d\n", maxtreesplits ); - printf( "Min number of positive samples per cluster: %d\n", minpos ); - - cvCreateTreeCascadeClassifier( dirname, vecname, bgname, - npos, nneg, nstages, mem, - nsplits, - minhitrate, maxfalsealarm, weightfraction, - mode, symmetric, - equalweights, width, height, - boosttype, stumperror, - maxtreesplits, minpos, bg_vecfile ); - - return 0; -} diff --git a/apps/haartraining/performance.cpp b/apps/haartraining/performance.cpp deleted file mode 100644 index cb8dda1c8..000000000 --- a/apps/haartraining/performance.cpp +++ /dev/null @@ -1,377 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of Intel Corporation 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 Intel Corporation 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. -// -//M*/ - -/* - * performance.cpp - * - * Measure performance of classifier - */ -#include "opencv2/core.hpp" - -#include "cv.h" -#include "highgui.h" - -#include -#include -#include - -#ifdef _WIN32 -/* use clock() function insted of time() */ -#define time( arg ) (((double) clock()) / CLOCKS_PER_SEC) -#endif /* _WIN32 */ - -#ifndef PATH_MAX -#define PATH_MAX 512 -#endif /* PATH_MAX */ - -typedef struct HidCascade -{ - int size; - int count; -} HidCascade; - -typedef struct ObjectPos -{ - float x; - float y; - float width; - int found; /* for reference */ - int neghbors; -} ObjectPos; - -int main( int argc, char* argv[] ) -{ - int i, j; - char* classifierdir = NULL; - //char* samplesdir = NULL; - - int saveDetected = 1; - double scale_factor = 1.2; - float maxSizeDiff = 1.5F; - float maxPosDiff = 0.3F; - - /* number of stages. if <=0 all stages are used */ - int nos = -1, nos0; - - int width = 24; - int height = 24; - - int rocsize; - - FILE* info; - char* infoname; - char fullname[PATH_MAX]; - char detfilename[PATH_MAX]; - char* filename; - char detname[] = "det-"; - - CvHaarClassifierCascade* cascade; - CvMemStorage* storage; - CvSeq* objects; - - double totaltime; - - infoname = (char*)""; - rocsize = 40; - if( argc == 1 ) - { - printf( "Usage: %s\n -data \n" - " -info \n" - " [-maxSizeDiff ]\n" - " [-maxPosDiff ]\n" - " [-sf ]\n" - " [-ni]\n" - " [-nos ]\n" - " [-rs ]\n" - " [-w ]\n" - " [-h ]\n", - argv[0], maxSizeDiff, maxPosDiff, scale_factor, nos, rocsize, - width, height ); - - return 0; - } - - for( i = 1; i < argc; i++ ) - { - if( !strcmp( argv[i], "-data" ) ) - { - classifierdir = argv[++i]; - } - else if( !strcmp( argv[i], "-info" ) ) - { - infoname = argv[++i]; - } - else if( !strcmp( argv[i], "-maxSizeDiff" ) ) - { - maxSizeDiff = (float) atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-maxPosDiff" ) ) - { - maxPosDiff = (float) atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-sf" ) ) - { - scale_factor = atof( argv[++i] ); - } - else if( !strcmp( argv[i], "-ni" ) ) - { - saveDetected = 0; - } - else if( !strcmp( argv[i], "-nos" ) ) - { - nos = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-rs" ) ) - { - rocsize = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-w" ) ) - { - width = atoi( argv[++i] ); - } - else if( !strcmp( argv[i], "-h" ) ) - { - height = atoi( argv[++i] ); - } - } - - cascade = cvLoadHaarClassifierCascade( classifierdir, cvSize( width, height ) ); - if( cascade == NULL ) - { - printf( "Unable to load classifier from %s\n", classifierdir ); - - return 1; - } - - int* numclassifiers = new int[cascade->count]; - numclassifiers[0] = cascade->stage_classifier[0].count; - for( i = 1; i < cascade->count; i++ ) - { - numclassifiers[i] = numclassifiers[i-1] + cascade->stage_classifier[i].count; - } - - storage = cvCreateMemStorage(); - - nos0 = cascade->count; - if( nos <= 0 ) - nos = nos0; - - strcpy( fullname, infoname ); - filename = strrchr( fullname, '\\' ); - if( filename == NULL ) - { - filename = strrchr( fullname, '/' ); - } - if( filename == NULL ) - { - filename = fullname; - } - else - { - filename++; - } - - info = fopen( infoname, "r" ); - totaltime = 0.0; - if( info != NULL ) - { - int x, y; - IplImage* img; - int hits, missed, falseAlarms; - int totalHits, totalMissed, totalFalseAlarms; - int found; - float distance; - - int refcount; - ObjectPos* ref; - int detcount; - ObjectPos* det; - int error=0; - - int* pos; - int* neg; - - pos = (int*) cvAlloc( rocsize * sizeof( *pos ) ); - neg = (int*) cvAlloc( rocsize * sizeof( *neg ) ); - for( i = 0; i < rocsize; i++ ) { pos[i] = neg[i] = 0; } - - printf( "+================================+======+======+======+\n" ); - printf( "| File Name | Hits |Missed| False|\n" ); - printf( "+================================+======+======+======+\n" ); - - totalHits = totalMissed = totalFalseAlarms = 0; - while( !feof( info ) ) - { - if( fscanf( info, "%s %d", filename, &refcount ) != 2 || refcount <= 0 ) break; - - img = cvLoadImage( fullname ); - if( !img ) continue; - - ref = (ObjectPos*) cvAlloc( refcount * sizeof( *ref ) ); - for( i = 0; i < refcount; i++ ) - { - int w, h; - error = (fscanf( info, "%d %d %d %d", &x, &y, &w, &h ) != 4); - if( error ) break; - ref[i].x = 0.5F * w + x; - ref[i].y = 0.5F * h + y; - ref[i].width = sqrtf( 0.5F * (w * w + h * h) ); - ref[i].found = 0; - ref[i].neghbors = 0; - } - if( !error ) - { - cvClearMemStorage( storage ); - - cascade->count = nos; - totaltime -= time( 0 ); - objects = cvHaarDetectObjects( img, cascade, storage, scale_factor, 1 ); - totaltime += time( 0 ); - cascade->count = nos0; - - detcount = ( objects ? objects->total : 0); - det = (detcount > 0) ? - ( (ObjectPos*)cvAlloc( detcount * sizeof( *det )) ) : NULL; - hits = missed = falseAlarms = 0; - for( i = 0; i < detcount; i++ ) - { - CvAvgComp r = *((CvAvgComp*) cvGetSeqElem( objects, i )); - det[i].x = 0.5F * r.rect.width + r.rect.x; - det[i].y = 0.5F * r.rect.height + r.rect.y; - det[i].width = sqrtf( 0.5F * (r.rect.width * r.rect.width + - r.rect.height * r.rect.height) ); - det[i].neghbors = r.neighbors; - - if( saveDetected ) - { - cvRectangle( img, cvPoint( r.rect.x, r.rect.y ), - cvPoint( r.rect.x + r.rect.width, r.rect.y + r.rect.height ), - CV_RGB( 255, 0, 0 ), 3 ); - } - - found = 0; - for( j = 0; j < refcount; j++ ) - { - distance = sqrtf( (det[i].x - ref[j].x) * (det[i].x - ref[j].x) + - (det[i].y - ref[j].y) * (det[i].y - ref[j].y) ); - if( (distance < ref[j].width * maxPosDiff) && - (det[i].width > ref[j].width / maxSizeDiff) && - (det[i].width < ref[j].width * maxSizeDiff) ) - { - ref[j].found = 1; - ref[j].neghbors = MAX( ref[j].neghbors, det[i].neghbors ); - found = 1; - } - } - if( !found ) - { - falseAlarms++; - neg[MIN(det[i].neghbors, rocsize - 1)]++; - } - } - for( j = 0; j < refcount; j++ ) - { - if( ref[j].found ) - { - hits++; - pos[MIN(ref[j].neghbors, rocsize - 1)]++; - } - else - { - missed++; - } - } - - totalHits += hits; - totalMissed += missed; - totalFalseAlarms += falseAlarms; - printf( "|%32.32s|%6d|%6d|%6d|\n", filename, hits, missed, falseAlarms ); - printf( "+--------------------------------+------+------+------+\n" ); - fflush( stdout ); - - if( saveDetected ) - { - strcpy( detfilename, detname ); - strcat( detfilename, filename ); - strcpy( filename, detfilename ); - cvvSaveImage( fullname, img ); - } - - if( det ) { cvFree( &det ); det = NULL; } - } /* if( !error ) */ - - cvReleaseImage( &img ); - cvFree( &ref ); - } - fclose( info ); - - printf( "|%32.32s|%6d|%6d|%6d|\n", "Total", - totalHits, totalMissed, totalFalseAlarms ); - printf( "+================================+======+======+======+\n" ); - printf( "Number of stages: %d\n", nos ); - printf( "Number of weak classifiers: %d\n", numclassifiers[nos - 1] ); - printf( "Total time: %f\n", totaltime ); - - /* print ROC to stdout */ - for( i = rocsize - 1; i > 0; i-- ) - { - pos[i-1] += pos[i]; - neg[i-1] += neg[i]; - } - fprintf( stderr, "%d\n", nos ); - for( i = 0; i < rocsize; i++ ) - { - fprintf( stderr, "\t%d\t%d\t%f\t%f\n", pos[i], neg[i], - ((float)pos[i]) / (totalHits + totalMissed), - ((float)neg[i]) / (totalHits + totalMissed) ); - } - - cvFree( &pos ); - cvFree( &neg ); - } - - delete[] numclassifiers; - - cvReleaseHaarClassifierCascade( &cascade ); - cvReleaseMemStorage( &storage ); - - return 0; -} diff --git a/apps/sft/CMakeLists.txt b/apps/sft/CMakeLists.txt deleted file mode 100644 index 05bd337c3..000000000 --- a/apps/sft/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -set(name sft) -set(the_target opencv_${name}) - -set(OPENCV_${the_target}_DEPS opencv_core opencv_softcascade opencv_highgui opencv_imgproc opencv_ml) -ocv_check_dependencies(${OPENCV_${the_target}_DEPS}) - -if(NOT OCV_DEPENDENCIES_FOUND) - return() -endif() - -project(${the_target}) - -ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include" "${OpenCV_SOURCE_DIR}/include/opencv") -ocv_include_modules(${OPENCV_${the_target}_DEPS}) - -file(GLOB ${the_target}_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) - -add_executable(${the_target} ${${the_target}_SOURCES}) - -target_link_libraries(${the_target} ${OPENCV_${the_target}_DEPS}) - -set_target_properties(${the_target} PROPERTIES - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} - INSTALL_NAME_DIR lib - OUTPUT_NAME "opencv_trainsoftcascade") - -if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(${the_target} PROPERTIES FOLDER "applications") -endif() - -install(TARGETS ${the_target} RUNTIME DESTINATION bin COMPONENT main) diff --git a/apps/sft/config.cpp b/apps/sft/config.cpp deleted file mode 100644 index 9157575a1..000000000 --- a/apps/sft/config.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of the copyright holders 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 Intel Corporation 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. -// -//M*/ - -#include -#include - -sft::Config::Config(): seed(0) {} - -void sft::Config::write(cv::FileStorage& fs) const -{ - fs << "{" - << "trainPath" << trainPath - << "testPath" << testPath - - << "modelWinSize" << modelWinSize - << "offset" << offset - << "octaves" << octaves - - << "positives" << positives - << "negatives" << negatives - << "btpNegatives" << btpNegatives - - << "shrinkage" << shrinkage - - << "treeDepth" << treeDepth - << "weaks" << weaks - << "poolSize" << poolSize - - << "cascadeName" << cascadeName - << "outXmlPath" << outXmlPath - - << "seed" << seed - << "featureType" << featureType - << "}"; -} - -void sft::Config::read(const cv::FileNode& node) -{ - trainPath = (string)node["trainPath"]; - testPath = (string)node["testPath"]; - - cv::FileNodeIterator nIt = node["modelWinSize"].end(); - modelWinSize = cv::Size((int)*(--nIt), (int)*(--nIt)); - - nIt = node["offset"].end(); - offset = cv::Point2i((int)*(--nIt), (int)*(--nIt)); - - node["octaves"] >> octaves; - - positives = (int)node["positives"]; - negatives = (int)node["negatives"]; - btpNegatives = (int)node["btpNegatives"]; - - shrinkage = (int)node["shrinkage"]; - - treeDepth = (int)node["treeDepth"]; - weaks = (int)node["weaks"]; - poolSize = (int)node["poolSize"]; - - cascadeName = (std::string)node["cascadeName"]; - outXmlPath = (std::string)node["outXmlPath"]; - - seed = (int)node["seed"]; - featureType = (std::string)node["featureType"]; -} - -void sft::write(cv::FileStorage& fs, const string&, const Config& x) -{ - x.write(fs); -} - -void sft::read(const cv::FileNode& node, Config& x, const Config& default_value) -{ - x = default_value; - - if(!node.empty()) - x.read(node); -} - -namespace { - -struct Out -{ - Out(std::ostream& _out): out(_out) {} - template - void operator ()(const T a) const {out << a << " ";} - - std::ostream& out; -private: - Out& operator=(Out const& other); -}; -} - -std::ostream& sft::operator<<(std::ostream& out, const Config& m) -{ - out << std::setw(14) << std::left << "trainPath" << m.trainPath << std::endl - << std::setw(14) << std::left << "testPath" << m.testPath << std::endl - - << std::setw(14) << std::left << "modelWinSize" << m.modelWinSize << std::endl - << std::setw(14) << std::left << "offset" << m.offset << std::endl - << std::setw(14) << std::left << "octaves"; - - Out o(out); - for_each(m.octaves.begin(), m.octaves.end(), o); - - out << std::endl - << std::setw(14) << std::left << "positives" << m.positives << std::endl - << std::setw(14) << std::left << "negatives" << m.negatives << std::endl - << std::setw(14) << std::left << "btpNegatives" << m.btpNegatives << std::endl - - << std::setw(14) << std::left << "shrinkage" << m.shrinkage << std::endl - - << std::setw(14) << std::left << "treeDepth" << m.treeDepth << std::endl - << std::setw(14) << std::left << "weaks" << m.weaks << std::endl - << std::setw(14) << std::left << "poolSize" << m.poolSize << std::endl - - << std::setw(14) << std::left << "cascadeName" << m.cascadeName << std::endl - << std::setw(14) << std::left << "outXmlPath" << m.outXmlPath << std::endl - << std::setw(14) << std::left << "seed" << m.seed << std::endl - << std::setw(14) << std::left << "featureType" << m.featureType << std::endl; - - return out; -} diff --git a/apps/sft/dataset.cpp b/apps/sft/dataset.cpp deleted file mode 100644 index dd4ba5999..000000000 --- a/apps/sft/dataset.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of the copyright holders 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 Intel Corporation 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. -// -//M*/ - -#include -#include - -#include -#include - -// in the default case data folders should be aligned as following: -// 1. positives: /octave_/pos/*.png -// 2. negatives: /octave_/neg/*.png -sft::ScaledDataset::ScaledDataset(const string& path, const int oct) -{ - dprintf("%s\n", "get dataset file names..."); - dprintf("%s\n", "Positives globing..."); - cv::glob(path + "/pos/octave_" + cv::format("%d", oct) + "/*.png", pos); - - dprintf("%s\n", "Negatives globing..."); - cv::glob(path + "/neg/octave_" + cv::format("%d", oct) + "/*.png", neg); - - // Check: files not empty - CV_Assert(pos.size() != size_t(0)); - CV_Assert(neg.size() != size_t(0)); -} - -cv::Mat sft::ScaledDataset::get(SampleType type, int idx) const -{ - const std::string& src = (type == POSITIVE)? pos[idx]: neg[idx]; - return cv::imread(src); -} - -int sft::ScaledDataset::available(SampleType type) const -{ - return (int)((type == POSITIVE)? pos.size():neg.size()); -} - -sft::ScaledDataset::~ScaledDataset(){} diff --git a/apps/sft/include/sft/common.hpp b/apps/sft/include/sft/common.hpp deleted file mode 100644 index 5c142a749..000000000 --- a/apps/sft/include/sft/common.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of the copyright holders 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 Intel Corporation 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. -// -//M*/ - -#ifndef __SFT_COMMON_HPP__ -#define __SFT_COMMON_HPP__ - -#include -#include -#include - -namespace cv {using namespace softcascade;} -namespace sft -{ - - using cv::Mat; - struct ICF; - - typedef cv::String string; - - typedef std::vector Icfvector; - typedef std::vector svector; - typedef std::vector ivector; -} - -// used for noisy printfs -//#define WITH_DEBUG_OUT - -#if defined WITH_DEBUG_OUT -# include -# define dprintf(format, ...) printf(format, ##__VA_ARGS__) -#else -# define dprintf(format, ...) -#endif - -#endif diff --git a/apps/sft/include/sft/config.hpp b/apps/sft/include/sft/config.hpp deleted file mode 100644 index c6e85b264..000000000 --- a/apps/sft/include/sft/config.hpp +++ /dev/null @@ -1,138 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of the copyright holders 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 Intel Corporation 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. -// -//M*/ - -#ifndef __SFT_CONFIG_HPP__ -#define __SFT_CONFIG_HPP__ - -#include - -#include - -namespace sft { - -struct Config -{ - Config(); - - void write(cv::FileStorage& fs) const; - - void read(const cv::FileNode& node); - - // Scaled and shrunk model size. - cv::Size model(ivector::const_iterator it) const - { - float octave = powf(2.f, (float)(*it)); - return cv::Size( cvRound(modelWinSize.width * octave) / shrinkage, - cvRound(modelWinSize.height * octave) / shrinkage ); - } - - // Scaled but, not shrunk bounding box for object in sample image. - cv::Rect bbox(ivector::const_iterator it) const - { - float octave = powf(2.f, (float)(*it)); - return cv::Rect( cvRound(offset.x * octave), cvRound(offset.y * octave), - cvRound(modelWinSize.width * octave), cvRound(modelWinSize.height * octave)); - } - - string resPath(ivector::const_iterator it) const - { - return cv::format("%s%d.xml",cascadeName.c_str(), *it); - } - - // Paths to a rescaled data - string trainPath; - string testPath; - - // Original model size. - cv::Size modelWinSize; - - // example offset into positive image - cv::Point2i offset; - - // List of octaves for which have to be trained cascades (a list of powers of two) - ivector octaves; - - // Maximum number of positives that should be used during training - int positives; - - // Initial number of negatives used during training. - int negatives; - - // Number of weak negatives to add each bootstrapping step. - int btpNegatives; - - // Inverse of scale for feature resizing - int shrinkage; - - // Depth on weak classifier's decision tree - int treeDepth; - - // Weak classifiers number in resulted cascade - int weaks; - - // Feature random pool size - int poolSize; - - // file name to store cascade - string cascadeName; - - // path to resulting cascade - string outXmlPath; - - // seed for random generation - int seed; - - // channel feature type - string featureType; - - // // bounding rectangle for actual example into example window - // cv::Rect exampleWindow; -}; - -// required for cv::FileStorage serialization -void write(cv::FileStorage& fs, const string&, const Config& x); -void read(const cv::FileNode& node, Config& x, const Config& default_value); -std::ostream& operator<<(std::ostream& out, const Config& m); - -} - -#endif diff --git a/apps/sft/include/sft/dataset.hpp b/apps/sft/include/sft/dataset.hpp deleted file mode 100644 index 7504f4033..000000000 --- a/apps/sft/include/sft/dataset.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of the copyright holders 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 Intel Corporation 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. -// -//M*/ - -#ifndef __SFT_OCTAVE_HPP__ -#define __SFT_OCTAVE_HPP__ - -#include -namespace sft -{ - -using cv::softcascade::Dataset; - -class ScaledDataset : public Dataset -{ -public: - ScaledDataset(const sft::string& path, const int octave); - - virtual cv::Mat get(SampleType type, int idx) const; - virtual int available(SampleType type) const; - virtual ~ScaledDataset(); - -private: - svector pos; - svector neg; -}; -} - -#endif diff --git a/apps/sft/sft.cpp b/apps/sft/sft.cpp deleted file mode 100644 index 79d41032e..000000000 --- a/apps/sft/sft.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's 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. -// -// * The name of the copyright holders 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 Intel Corporation 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. -// -//M*/ - -// Training application for Soft Cascades. - -#include -#include -#include -#include - -#include - -int main(int argc, char** argv) -{ - using namespace sft; - - const string keys = - "{help h usage ? | | print this message }" - "{config c | | path to configuration xml }" - ; - - cv::CommandLineParser parser(argc, argv, keys); - parser.about("Soft cascade training application."); - - if (parser.has("help")) - { - parser.printMessage(); - return 0; - } - - if (!parser.check()) - { - parser.printErrors(); - return 1; - } - - string configPath = parser.get("config"); - if (configPath.empty()) - { - std::cout << "Configuration file is missing or empty. Could not start training." << std::endl; - return 0; - } - - std::cout << "Read configuration from file " << configPath << std::endl; - cv::FileStorage fs(configPath, cv::FileStorage::READ); - if(!fs.isOpened()) - { - std::cout << "Configuration file " << configPath << " can't be opened." << std::endl; - return 1; - } - - // 1. load config - sft::Config cfg; - fs["config"] >> cfg; - std::cout << std::endl << "Training will be executed for configuration:" << std::endl << cfg << std::endl; - - // 2. check and open output file - cv::FileStorage fso(cfg.outXmlPath, cv::FileStorage::WRITE); - if(!fso.isOpened()) - { - std::cout << "Training stopped. Output classifier Xml file " << cfg.outXmlPath << " can't be opened." << std::endl; - return 1; - } - - fso << cfg.cascadeName - << "{" - << "stageType" << "BOOST" - << "featureType" << cfg.featureType - << "octavesNum" << (int)cfg.octaves.size() - << "width" << cfg.modelWinSize.width - << "height" << cfg.modelWinSize.height - << "shrinkage" << cfg.shrinkage - << "octaves" << "["; - - // 3. Train all octaves - for (ivector::const_iterator it = cfg.octaves.begin(); it != cfg.octaves.end(); ++it) - { - // a. create random feature pool - int nfeatures = cfg.poolSize; - cv::Size model = cfg.model(it); - std::cout << "Model " << model << std::endl; - - int nchannels = (cfg.featureType == "HOG6MagLuv") ? 10: 8; - - std::cout << "number of feature channels is " << nchannels << std::endl; - - cv::Ptr pool = cv::FeaturePool::create(model, nfeatures, nchannels); - nfeatures = pool->size(); - - - int npositives = cfg.positives; - int nnegatives = cfg.negatives; - int shrinkage = cfg.shrinkage; - cv::Rect boundingBox = cfg.bbox(it); - std::cout << "Object bounding box" << boundingBox << std::endl; - - typedef cv::Octave Octave; - - cv::Ptr builder = cv::ChannelFeatureBuilder::create(cfg.featureType); - std::cout << "Channel builder " << builder->info()->name() << std::endl; - cv::Ptr boost = Octave::create(boundingBox, npositives, nnegatives, *it, shrinkage, builder); - - std::string path = cfg.trainPath; - sft::ScaledDataset dataset(path, *it); - - if (boost->train(&dataset, pool, cfg.weaks, cfg.treeDepth)) - { - CvFileStorage* fout = cvOpenFileStorage(cfg.resPath(it).c_str(), 0, CV_STORAGE_WRITE); - boost->write(fout, cfg.cascadeName); - - cvReleaseFileStorage( &fout); - - cv::Mat thresholds; - boost->setRejectThresholds(thresholds); - - boost->write(fso, pool, thresholds); - - cv::FileStorage tfs(("thresholds." + cfg.resPath(it)).c_str(), cv::FileStorage::WRITE); - tfs << "thresholds" << thresholds; - - std::cout << "Octave " << *it << " was successfully trained..." << std::endl; - } - } - - fso << "]" << "}"; - fso.release(); - std::cout << "Training complete..." << std::endl; - return 0; -} diff --git a/apps/traincascade/CMakeLists.txt b/apps/traincascade/CMakeLists.txt index f36e4b247..e560ed815 100644 --- a/apps/traincascade/CMakeLists.txt +++ b/apps/traincascade/CMakeLists.txt @@ -1,4 +1,4 @@ -set(OPENCV_TRAINCASCADE_DEPS opencv_core opencv_ml opencv_imgproc opencv_photo opencv_objdetect opencv_highgui opencv_calib3d opencv_video opencv_features2d opencv_flann opencv_legacy) +set(OPENCV_TRAINCASCADE_DEPS opencv_core opencv_ml opencv_imgproc opencv_photo opencv_objdetect opencv_highgui opencv_calib3d opencv_video opencv_features2d) ocv_check_dependencies(${OPENCV_TRAINCASCADE_DEPS}) if(NOT OCV_DEPENDENCIES_FOUND) @@ -20,7 +20,7 @@ set(traincascade_files traincascade.cpp set(the_target opencv_traincascade) add_executable(${the_target} ${traincascade_files}) -target_link_libraries(${the_target} ${OPENCV_TRAINCASCADE_DEPS} opencv_haartraining_engine) +target_link_libraries(${the_target} ${OPENCV_TRAINCASCADE_DEPS}) set_target_properties(${the_target} PROPERTIES DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" diff --git a/cmake/OpenCVDetectAndroidSDK.cmake b/cmake/OpenCVDetectAndroidSDK.cmake index 7fc45108c..90e11761e 100644 --- a/cmake/OpenCVDetectAndroidSDK.cmake +++ b/cmake/OpenCVDetectAndroidSDK.cmake @@ -335,6 +335,16 @@ macro(add_android_project target path) add_dependencies(${target} ${android_proj_native_deps}) endif() + if(ANDROID_EXAMPLES_WITH_LIBS) + add_custom_target( + ${target}_copy_libs + COMMAND ${CMAKE_COMMAND} -DSRC_DIR=${OpenCV_BINARY_DIR}/lib -DDST_DIR=${android_proj_bin_dir}/libs -P ${OpenCV_SOURCE_DIR}/cmake/copyAndroidLibs.cmake + WORKING_DIRECTORY ${OpenCV_BINARY_DIR}/lib + DEPENDS "${OpenCV_BINARY_DIR}/bin/classes.jar.dephelper" opencv_java + ) + add_dependencies(${target} ${target}_copy_libs) + endif() + if(__android_project_chain) add_dependencies(${target} ${__android_project_chain}) endif() diff --git a/cmake/OpenCVDetectTBB.cmake b/cmake/OpenCVDetectTBB.cmake index fe8e100ec..8ff78bb3d 100644 --- a/cmake/OpenCVDetectTBB.cmake +++ b/cmake/OpenCVDetectTBB.cmake @@ -63,6 +63,8 @@ if(NOT HAVE_TBB) set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc10") elseif(MSVC11) set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc11") + elseif(MSVC12) + set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc12") endif() set(TBB_LIB_DIR "${_TBB_LIB_PATH}" CACHE PATH "Full path of TBB library directory") link_directories("${TBB_LIB_DIR}") diff --git a/cmake/OpenCVFindIPP.cmake b/cmake/OpenCVFindIPP.cmake index 9cb6ed018..036f59863 100644 --- a/cmake/OpenCVFindIPP.cmake +++ b/cmake/OpenCVFindIPP.cmake @@ -35,7 +35,7 @@ unset(IPP_VERSION_MINOR) unset(IPP_VERSION_BUILD) set(IPP_LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX}) -set(IPP_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) +set(IPP_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) set(IPP_X64 0) if(CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8) @@ -88,23 +88,18 @@ macro(ipp_detect_version) set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include) set(__msg) - if(EXISTS ${IPP_ROOT_DIR}/ippicv.h) + if(EXISTS ${IPP_ROOT_DIR}/include/ippicv_redefs.h) set(__msg " (ICV version)") set(HAVE_IPP_ICV_ONLY 1) - if(EXISTS ${IPP_ROOT_DIR}/ippversion.h) - _ipp_not_supported("Can't resolve IPP directory: ${IPP_ROOT_DIR}") - else() - ipp_get_version(${IPP_ROOT_DIR}/ippicv.h) - endif() - ocv_assert(IPP_VERSION_STR VERSION_GREATER "8.0") - set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/) elseif(EXISTS ${IPP_ROOT_DIR}/include/ipp.h) - ipp_get_version(${IPP_ROOT_DIR}/include/ippversion.h) - ocv_assert(IPP_VERSION_STR VERSION_GREATER "1.0") + # nothing else() _ipp_not_supported("Can't resolve IPP directory: ${IPP_ROOT_DIR}") endif() + ipp_get_version(${IPP_INCLUDE_DIRS}/ippversion.h) + ocv_assert(IPP_VERSION_STR VERSION_GREATER "1.0") + message(STATUS "found IPP${__msg}: ${_MAJOR}.${_MINOR}.${_BUILD} [${IPP_VERSION_STR}]") message(STATUS "at: ${IPP_ROOT_DIR}") @@ -113,11 +108,6 @@ macro(ipp_detect_version) endif() set(HAVE_IPP 1) - if(EXISTS ${IPP_INCLUDE_DIRS}/ipp_redefine.h) - set(HAVE_IPP_REDEFINE 1) - else() - unset(HAVE_IPP_REDEFINE) - endif() macro(_ipp_set_library_dir DIR) if(NOT EXISTS ${DIR}) @@ -126,32 +116,30 @@ macro(ipp_detect_version) set(IPP_LIBRARY_DIR ${DIR}) endmacro() - if(NOT HAVE_IPP_ICV_ONLY) - if(APPLE) - _ipp_set_library_dir(${IPP_ROOT_DIR}/lib) - elseif(IPP_X64) - _ipp_set_library_dir(${IPP_ROOT_DIR}/lib/intel64) - else() - _ipp_set_library_dir(${IPP_ROOT_DIR}/lib/ia32) - endif() + if(APPLE) + _ipp_set_library_dir(${IPP_ROOT_DIR}/lib) + elseif(IPP_X64) + _ipp_set_library_dir(${IPP_ROOT_DIR}/lib/intel64) else() - if(EXISTS ${IPP_ROOT_DIR}/lib) - set(IPP_LIBRARY_DIR ${IPP_ROOT_DIR}/lib) - else() - _ipp_not_supported("IPP ${IPP_VERSION_STR} at ${IPP_ROOT_DIR} is not supported") - endif() - if(X86_64) - _ipp_set_library_dir(${IPP_LIBRARY_DIR}/intel64) - else() - _ipp_set_library_dir(${IPP_LIBRARY_DIR}/ia32) - endif() + _ipp_set_library_dir(${IPP_ROOT_DIR}/lib/ia32) endif() macro(_ipp_add_library name) if (EXISTS ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}) - list(APPEND IPP_LIBRARIES ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}) + add_library(ipp${name} STATIC IMPORTED) + set_target_properties(ipp${name} PROPERTIES + IMPORTED_LINK_INTERFACE_LIBRARIES "" + IMPORTED_LOCATION ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX} + ) + list(APPEND IPP_LIBRARIES ipp${name}) + # CMake doesn't support "install(TARGETS ipp${name} " command with imported targets + install(FILES ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX} + DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main) + string(TOUPPER ${name} uname) + set(IPP${uname}_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_3P_LIB_INSTALL_PATH}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE) + set(IPP${uname}_LOCATION_PATH "${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE) else() - message(STATUS "Can't find IPP library: ${name}") + message(STATUS "Can't find IPP library: ${name} at ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}") endif() endmacro() @@ -221,35 +209,17 @@ if(DEFINED ENV{OPENCV_IPP_PATH} AND NOT DEFINED IPPROOT) set(IPPROOT "$ENV{OPENCV_IPP_PATH}") endif() if(NOT DEFINED IPPROOT) - set(IPPROOT "${OpenCV_SOURCE_DIR}/3rdparty/ippicv") -endif() - -# Try ICV -find_path( - IPP_ICV_H_PATH - NAMES ippicv.h - PATHS ${IPPROOT} - DOC "The path to Intel(R) IPP ICV header files" - NO_DEFAULT_PATH - NO_CMAKE_PATH) -set(IPP_ROOT_DIR ${IPP_ICV_H_PATH}) - -if(NOT IPP_ICV_H_PATH) - # Try standalone IPP - find_path( - IPP_H_PATH - NAMES ippversion.h - PATHS ${IPPROOT} - PATH_SUFFIXES include - DOC "The path to Intel(R) IPP header files" - NO_DEFAULT_PATH - NO_CMAKE_PATH) - if(IPP_H_PATH) - get_filename_component(IPP_ROOT_DIR ${IPP_H_PATH} PATH) + include("${OpenCV_SOURCE_DIR}/3rdparty/ippicv/downloader.cmake") + if(DEFINED OPENCV_ICV_PATH) + set(IPPROOT "${OPENCV_ICV_PATH}") + else() + return() endif() endif() -if(IPP_ROOT_DIR) +file(TO_CMAKE_PATH "${IPPROOT}" __IPPROOT) +if(EXISTS "${__IPPROOT}/include/ippversion.h") + set(IPP_ROOT_DIR ${__IPPROOT}) ipp_detect_version() endif() diff --git a/cmake/OpenCVFindLibsGUI.cmake b/cmake/OpenCVFindLibsGUI.cmake index a0543243e..1c13619d5 100644 --- a/cmake/OpenCVFindLibsGUI.cmake +++ b/cmake/OpenCVFindLibsGUI.cmake @@ -39,11 +39,26 @@ if(WITH_QT) endif() # --- GTK --- -ocv_clear_vars(HAVE_GTK HAVE_GTHREAD HAVE_GTKGLEXT) +ocv_clear_vars(HAVE_GTK HAVE_GTK3 HAVE_GTHREAD HAVE_GTKGLEXT) if(WITH_GTK AND NOT HAVE_QT) - CHECK_MODULE(gtk+-2.0 HAVE_GTK) + if(NOT WITH_GTK_2_X) + CHECK_MODULE(gtk+-3.0 HAVE_GTK3) + if(HAVE_GTK3) + set(HAVE_GTK TRUE) + endif() + endif() + if(NOT HAVE_GTK) + CHECK_MODULE(gtk+-2.0 HAVE_GTK) + if(HAVE_GTK AND (ALIASOF_gtk+-2.0_VERSION VERSION_LESS MIN_VER_GTK)) + message (FATAL_ERROR "GTK support requires a minimum version of ${MIN_VER_GTK} (${ALIASOF_gtk+-2.0_VERSION} found)") + set(HAVE_GTK FALSE) + endif() + endif() CHECK_MODULE(gthread-2.0 HAVE_GTHREAD) - if(WITH_OPENGL) + if(HAVE_GTK AND NOT HAVE_GTHREAD) + message(FATAL_ERROR "gthread not found. This library is required when building with GTK support") + endif() + if(WITH_OPENGL AND NOT HAVE_GTK3) CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT) endif() endif() diff --git a/cmake/OpenCVGenConfig.cmake b/cmake/OpenCVGenConfig.cmake index cdf418ec8..220772a90 100644 --- a/cmake/OpenCVGenConfig.cmake +++ b/cmake/OpenCVGenConfig.cmake @@ -83,6 +83,14 @@ endif() export(TARGETS ${OpenCVModules_TARGETS} FILE "${CMAKE_BINARY_DIR}/OpenCVModules${modules_file_suffix}.cmake") +if(TARGET ippicv) + set(USE_IPPICV TRUE) + file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV ${CMAKE_BINARY_DIR} ${IPPICV_LOCATION_PATH}) +else() + set(USE_IPPICV FALSE) + set(INSTALL_PATH_RELATIVE_IPPICV "non-existed-path") +endif() + configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" @ONLY) #support for version checking when finding opencv. find_package(OpenCV 2.3.1 EXACT) should now work. configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig-version.cmake" @ONLY) @@ -98,9 +106,6 @@ if(INSTALL_TO_MANGLED_PATHS) set(OpenCV_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OpenCV_3RDPARTY_LIB_DIRS_CONFIGCMAKE}\"") endif() -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" @ONLY) -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake" @ONLY) - if(UNIX) # ANDROID configuration is created here also #http://www.vtk.org/Wiki/CMake/Tutorials/Packaging reference # For a command "find_package( [major[.minor]] [EXACT] [REQUIRED|QUIET])" @@ -108,6 +113,15 @@ if(UNIX) # ANDROID configuration is created here also # /(share|lib)/cmake/*/ (U) # /(share|lib)/*/ (U) # /(share|lib)/*/(cmake|CMake)/ (U) + if(USE_IPPICV) + if(INSTALL_TO_MANGLED_PATHS) + file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OPENCV_CONFIG_INSTALL_PATH}-${OPENCV_VERSION}/" ${IPPICV_INSTALL_PATH}) + else() + file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OPENCV_CONFIG_INSTALL_PATH}/" ${IPPICV_INSTALL_PATH}) + endif() + endif() + configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" @ONLY) + configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake" @ONLY) if(INSTALL_TO_MANGLED_PATHS) install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}-${OPENCV_VERSION}/ COMPONENT dev) install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}-${OPENCV_VERSION}/ COMPONENT dev) @@ -131,6 +145,13 @@ if(WIN32) set(OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "\"\"") exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"" OUTPUT_VARIABLE RET_VAL) + if(USE_IPPICV) + if(BUILD_SHARED_LIBS) + file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OpenCV_INSTALL_BINARIES_PREFIX}lib" ${IPPICV_INSTALL_PATH}) + else() + file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OpenCV_INSTALL_BINARIES_PREFIX}staticlib" ${IPPICV_INSTALL_PATH}) + endif() + endif() configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" @ONLY) configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig-version.cmake" @ONLY) if(BUILD_SHARED_LIBS) diff --git a/cmake/OpenCVMinDepVersions.cmake b/cmake/OpenCVMinDepVersions.cmake index a9bede402..9dae72548 100644 --- a/cmake/OpenCVMinDepVersions.cmake +++ b/cmake/OpenCVMinDepVersions.cmake @@ -2,3 +2,4 @@ set(MIN_VER_CMAKE 2.8.7) set(MIN_VER_CUDA 4.2) set(MIN_VER_PYTHON 2.6) set(MIN_VER_ZLIB 1.2.3) +set(MIN_VER_GTK 2.18.0) diff --git a/cmake/copyAndroidLibs.cmake b/cmake/copyAndroidLibs.cmake new file mode 100644 index 000000000..4e9e17f4c --- /dev/null +++ b/cmake/copyAndroidLibs.cmake @@ -0,0 +1,8 @@ +# helper file for Android samples build + +file(GLOB_RECURSE LIBS RELATIVE ${SRC_DIR} "*.so") + +foreach(l ${LIBS}) + message(STATUS " Copying: ${l} ...") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRC_DIR}/${l} ${DST_DIR}/${l}) +endforeach() diff --git a/cmake/templates/OpenCVConfig.cmake.in b/cmake/templates/OpenCVConfig.cmake.in index 7dee995f5..24a9374ef 100644 --- a/cmake/templates/OpenCVConfig.cmake.in +++ b/cmake/templates/OpenCVConfig.cmake.in @@ -49,6 +49,18 @@ if(NOT DEFINED OpenCV_MODULES_SUFFIX) endif() endif() +if(@USE_IPPICV@) # value is defined by package builder + if(NOT TARGET ippicv) + if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_PATH_RELATIVE_IPPICV@") + add_library(ippicv STATIC IMPORTED) + set_target_properties(ippicv PROPERTIES + IMPORTED_LINK_INTERFACE_LIBRARIES "" + IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_PATH_RELATIVE_IPPICV@" + ) + endif() + endif() +endif() + if(NOT TARGET opencv_core) include(${CMAKE_CURRENT_LIST_DIR}/OpenCVModules${OpenCV_MODULES_SUFFIX}.cmake) endif() @@ -64,7 +76,11 @@ set(OpenCV_USE_CUFFT @HAVE_CUFFT@) set(OpenCV_USE_NVCUVID @HAVE_NVCUVID@) # Android API level from which OpenCV has been compiled is remembered -set(OpenCV_ANDROID_NATIVE_API_LEVEL @OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE@) +if(ANDROID) + set(OpenCV_ANDROID_NATIVE_API_LEVEL @OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE@) +else() + set(OpenCV_ANDROID_NATIVE_API_LEVEL 0) +endif() # Some additional settings are required if OpenCV is built as static libs set(OpenCV_SHARED @BUILD_SHARED_LIBS@) @@ -75,8 +91,8 @@ set(OpenCV_USE_MANGLED_PATHS @OpenCV_USE_MANGLED_PATHS_CONFIGCMAKE@) # Extract the directory where *this* file has been installed (determined at cmake run-time) get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH CACHE) -if(NOT WIN32 OR OpenCV_ANDROID_NATIVE_API_LEVEL GREATER 0) - if(OpenCV_ANDROID_NATIVE_API_LEVEL GREATER 0) +if(NOT WIN32 OR ANDROID) + if(ANDROID) set(OpenCV_INSTALL_PATH "${OpenCV_CONFIG_PATH}/../../..") else() set(OpenCV_INSTALL_PATH "${OpenCV_CONFIG_PATH}/../..") diff --git a/data/haarcascades/haarcascade_licence_plate_rus_16stages.xml b/data/haarcascades/haarcascade_licence_plate_rus_16stages.xml new file mode 100644 index 000000000..576c9e820 --- /dev/null +++ b/data/haarcascades/haarcascade_licence_plate_rus_16stages.xml @@ -0,0 +1,1404 @@ + + + + + + 64 16 + + <_> + + + <_> + + <_> + + + + <_> + 32 2 8 6 -1. + <_> + 32 4 8 2 3. + 0 + 1.6915600746870041e-002 + -9.5547717809677124e-001 + 8.9129137992858887e-001 + <_> + + <_> + + + + <_> + 0 4 6 10 -1. + <_> + 3 4 3 10 2. + 0 + 2.4228349328041077e-002 + -9.2089319229125977e-001 + 8.8723921775817871e-001 + <_> + + <_> + + + + <_> + 55 0 8 6 -1. + <_> + 55 0 4 3 2. + <_> + 59 3 4 3 2. + 0 + -1.0168660432100296e-002 + 8.8940089941024780e-001 + -7.7847331762313843e-001 + <_> + + <_> + + + + <_> + 44 7 4 9 -1. + <_> + 44 10 4 3 3. + 0 + 2.0863260142505169e-003 + -8.7998157739639282e-001 + 5.8651781082153320e-001 + -2.0683259963989258e+000 + -1 + -1 + <_> + + + <_> + + <_> + + + + <_> + 29 1 16 4 -1. + <_> + 29 3 16 2 2. + 0 + 2.9062159359455109e-002 + -8.7765061855316162e-001 + 8.5373121500015259e-001 + <_> + + <_> + + + + <_> + 0 5 9 8 -1. + <_> + 3 5 3 8 3. + 0 + 2.3903399705886841e-002 + -9.2079448699951172e-001 + 7.5155001878738403e-001 + <_> + + <_> + + + + <_> + 44 0 20 14 -1. + <_> + 44 0 10 7 2. + <_> + 54 7 10 7 2. + 0 + -3.5404648631811142e-002 + 6.7834627628326416e-001 + -9.0937072038650513e-001 + <_> + + <_> + + + + <_> + 41 7 6 9 -1. + <_> + 43 7 2 9 3. + 0 + 6.2988721765577793e-003 + -8.1054258346557617e-001 + 5.8985030651092529e-001 + <_> + + <_> + + + + <_> + 0 4 21 4 -1. + <_> + 7 4 7 4 3. + 0 + 3.4959490876644850e-003 + -9.7632282972335815e-001 + 4.5473039150238037e-001 + -1.6632349491119385e+000 + 0 + -1 + <_> + + + <_> + + <_> + + + + <_> + 31 2 11 6 -1. + <_> + 31 4 11 2 3. + 0 + 2.3864099755883217e-002 + -9.3137168884277344e-001 + 8.2478952407836914e-001 + <_> + + <_> + + + + <_> + 56 3 6 11 -1. + <_> + 59 3 3 11 2. + 0 + -2.5775209069252014e-002 + 8.5526448488235474e-001 + -8.7574672698974609e-001 + <_> + + <_> + + + + <_> + 32 14 32 2 -1. + <_> + 32 15 32 1 2. + 0 + -1.0646049864590168e-002 + 8.5167151689529419e-001 + -6.7789041996002197e-001 + <_> + + <_> + + + + <_> + 0 2 8 14 -1. + <_> + 4 2 4 14 2. + 0 + 2.7000989764928818e-002 + -8.0041092634201050e-001 + 6.4893317222595215e-001 + <_> + + <_> + + + + <_> + 19 0 22 6 -1. + <_> + 19 0 11 3 2. + <_> + 30 3 11 3 2. + 0 + 5.2989721298217773e-003 + -9.5342522859573364e-001 + 5.0140267610549927e-001 + -1.3346730470657349e+000 + 1 + -1 + <_> + + + <_> + + <_> + + + + <_> + 56 0 6 6 -1. + <_> + 56 0 3 3 2. + <_> + 59 3 3 3 2. + 0 + -6.9233630783855915e-003 + 8.2654470205307007e-001 + -8.5396027565002441e-001 + <_> + + <_> + + + + <_> + 32 0 14 12 -1. + <_> + 32 0 7 6 2. + <_> + 39 6 7 6 2. + 0 + 1.2539249658584595e-001 + -1.2996139936149120e-002 + -3.2377028808593750e+003 + <_> + + <_> + + + + <_> + 2 1 43 4 -1. + <_> + 2 3 43 2 2. + 0 + 6.3474893569946289e-002 + -6.4648061990737915e-001 + 8.2302427291870117e-001 + <_> + + <_> + + + + <_> + 34 10 30 5 -1. + <_> + 44 10 10 5 3. + 0 + 4.2217150330543518e-002 + -7.5190877914428711e-001 + 6.3705182075500488e-001 + <_> + + <_> + + + + <_> + 0 9 9 5 -1. + <_> + 3 9 3 5 3. + 0 + 2.0000640302896500e-002 + -6.2077498435974121e-001 + 6.1317932605743408e-001 + -1.6521669626235962e+000 + 2 + -1 + <_> + + + <_> + + <_> + + + + <_> + 2 1 43 6 -1. + <_> + 2 3 43 2 3. + 0 + 9.2297486960887909e-002 + -7.2764229774475098e-001 + 8.0554759502410889e-001 + <_> + + <_> + + + + <_> + 53 4 9 8 -1. + <_> + 56 4 3 8 3. + 0 + 2.7613969519734383e-002 + -7.0769268274307251e-001 + 7.3315787315368652e-001 + <_> + + <_> + + + + <_> + 36 4 14 8 -1. + <_> + 36 4 7 4 2. + <_> + 43 8 7 4 2. + 0 + 1.2465449981391430e-002 + -8.4359270334243774e-001 + 5.7046437263488770e-001 + <_> + + <_> + + + + <_> + 14 14 49 2 -1. + <_> + 14 15 49 1 2. + 0 + -2.3886829614639282e-002 + 8.2656508684158325e-001 + -5.2783298492431641e-001 + -1.4523630142211914e+000 + 3 + -1 + <_> + + + <_> + + <_> + + + + <_> + 0 5 4 9 -1. + <_> + 2 5 2 9 2. + 0 + 1.8821349367499352e-002 + -8.1122857332229614e-001 + 6.9127470254898071e-001 + <_> + + <_> + + + + <_> + 21 1 38 4 -1. + <_> + 21 3 38 2 2. + 0 + 6.1703320592641830e-002 + -7.6482647657394409e-001 + 6.4212161302566528e-001 + <_> + + <_> + + + + <_> + 44 12 18 3 -1. + <_> + 53 12 9 3 2. + 0 + -1.6298670321702957e-002 + 5.0207728147506714e-001 + -8.4020161628723145e-001 + <_> + + <_> + + + + <_> + 10 4 9 3 -1. + <_> + 13 4 3 3 3. + 0 + -4.9458951689302921e-003 + 6.1991941928863525e-001 + -6.1633539199829102e-001 + <_> + + <_> + + + + <_> + 40 4 10 4 -1. + <_> + 45 4 5 4 2. + 0 + -5.1894597709178925e-003 + 4.4975179433822632e-001 + -8.0651968717575073e-001 + <_> + + <_> + + + + <_> + 17 14 47 2 -1. + <_> + 17 15 47 1 2. + 0 + -1.8824130296707153e-002 + 6.1992841958999634e-001 + -5.5643159151077271e-001 + <_> + + <_> + + + + <_> + 8 5 4 7 -1. + <_> + 10 5 2 7 2. + 0 + 5.6571601890027523e-003 + -4.8346561193466187e-001 + 6.8647360801696777e-001 + -2.2358059883117676e+000 + 4 + -1 + <_> + + + <_> + + <_> + + + + <_> + 56 0 6 6 -1. + <_> + 56 0 3 3 2. + <_> + 59 3 3 3 2. + 0 + -9.1503243893384933e-003 + 6.8174481391906738e-001 + -7.7866071462631226e-001 + <_> + + <_> + + + + <_> + 0 0 6 6 -1. + <_> + 0 0 3 3 2. + <_> + 3 3 3 3 2. + 0 + 7.4933180585503578e-003 + -6.8696027994155884e-001 + 6.6913938522338867e-001 + <_> + + <_> + + + + <_> + 13 4 48 2 -1. + <_> + 29 4 16 2 3. + 0 + 4.5296419411897659e-002 + -7.3576509952545166e-001 + 5.9453499317169189e-001 + <_> + + <_> + + + + <_> + 42 1 6 15 -1. + <_> + 42 6 6 5 3. + 0 + 1.1669679544866085e-002 + -8.4733831882476807e-001 + 4.5461329817771912e-001 + <_> + + <_> + + + + <_> + 30 8 3 5 -1. + <_> + 31 8 1 5 3. + 0 + 2.5769430212676525e-003 + -5.8270388841629028e-001 + 7.7900522947311401e-001 + <_> + + <_> + + + + <_> + 55 10 8 6 -1. + <_> + 55 13 8 3 2. + 0 + -1.4139170525595546e-003 + 4.5126929879188538e-001 + -9.0696328878402710e-001 + -1.8782069683074951e+000 + 5 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 7 -1. + <_> + 6 6 2 7 2. + 0 + -5.3149578161537647e-003 + 6.5218788385391235e-001 + -7.9464268684387207e-001 + <_> + + <_> + + + + <_> + 56 3 6 8 -1. + <_> + 59 3 3 8 2. + 0 + -2.2906960919499397e-002 + 6.6433382034301758e-001 + -7.3633247613906860e-001 + <_> + + <_> + + + + <_> + 37 2 4 6 -1. + <_> + 37 4 4 2 3. + 0 + 9.4887977465987206e-003 + -8.2612031698226929e-001 + 4.9333500862121582e-001 + <_> + + <_> + + + + <_> + 0 10 30 6 -1. + <_> + 0 12 30 2 3. + 0 + 4.5138411223888397e-002 + -5.4704028367996216e-001 + 7.6927912235260010e-001 + <_> + + <_> + + + + <_> + 0 4 21 12 -1. + <_> + 7 4 7 12 3. + 0 + 2.5049019604921341e-002 + -8.6739641427993774e-001 + 5.2807968854904175e-001 + -1.0597369670867920e+000 + 6 + -1 + <_> + + + <_> + + <_> + + + + <_> + 44 0 1 14 -1. + <_> + 44 7 1 7 2. + 0 + 6.6414438188076019e-003 + -7.7290147542953491e-001 + 6.9723731279373169e-001 + <_> + + <_> + + + + <_> + 54 3 4 3 -1. + <_> + 56 3 2 3 2. + 0 + 2.4703629314899445e-003 + -7.4289917945861816e-001 + 6.6825848817825317e-001 + <_> + + <_> + + + + <_> + 32 0 30 6 -1. + <_> + 32 0 15 3 2. + <_> + 47 3 15 3 2. + 0 + -2.2910499945282936e-002 + 4.3986389040946960e-001 + -9.0588808059692383e-001 + <_> + + <_> + + + + <_> + 0 8 9 7 -1. + <_> + 3 8 3 7 3. + 0 + 3.4193221479654312e-002 + -6.9507479667663574e-001 + 6.2501090764999390e-001 + <_> + + <_> + + + + <_> + 30 10 3 3 -1. + <_> + 31 10 1 3 3. + 0 + 1.5060020377859473e-003 + -6.8670761585235596e-001 + 8.2241541147232056e-001 + <_> + + <_> + + + + <_> + 21 3 24 4 -1. + <_> + 29 3 8 4 3. + 0 + 1.9838380467263050e-005 + -9.2727631330490112e-001 + 6.4723730087280273e-001 + <_> + + <_> + + + + <_> + 42 3 12 6 -1. + <_> + 46 3 4 6 3. + 0 + -2.2170299416757189e-005 + 5.6555831432342529e-001 + -9.6788132190704346e-001 + -1.4993519783020020e+000 + 7 + -1 + <_> + + + <_> + + <_> + + + + <_> + 56 9 6 6 -1. + <_> + 59 9 3 6 2. + 0 + -1.1395259760320187e-002 + 7.1383631229400635e-001 + -8.7429678440093994e-001 + <_> + + <_> + + + + <_> + 6 4 1 6 -1. + <_> + 6 7 1 3 2. + 0 + -2.1864590235054493e-003 + 8.5311782360076904e-001 + -6.4777731895446777e-001 + <_> + + <_> + + + + <_> + 0 0 12 4 -1. + <_> + 0 0 6 2 2. + <_> + 6 2 6 2 2. + 0 + 2.3193720262497663e-003 + -7.6411879062652588e-001 + 7.1867972612380981e-001 + <_> + + <_> + + + + <_> + 43 12 18 2 -1. + <_> + 52 12 9 2 2. + 0 + -7.9916073009371758e-003 + 6.6442942619323730e-001 + -7.9540950059890747e-001 + <_> + + <_> + + + + <_> + 9 5 2 8 -1. + <_> + 10 5 1 8 2. + 0 + 1.4212740352377295e-003 + -6.3904231786727905e-001 + 7.5050598382949829e-001 + -8.4829801321029663e-001 + 8 + -1 + <_> + + + <_> + + <_> + + + + <_> + 1 9 6 3 -1. + <_> + 3 9 2 3 3. + 0 + 6.4091659151017666e-003 + -8.8425230979919434e-001 + 9.9953681230545044e-001 + <_> + + <_> + + + + <_> + 56 8 2 8 -1. + <_> + 56 12 2 4 2. + 0 + -6.3316390151157975e-004 + 8.3822172880172729e-001 + -9.8322170972824097e-001 + <_> + + <_> + + + + <_> + 24 2 6 13 -1. + <_> + 26 2 2 13 3. + 0 + -6.4947169448714703e-005 + 1. + -9.1822808980941772e-001 + <_> + + <_> + + + + <_> + 33 7 24 4 -1. + <_> + 41 7 8 4 3. + 0 + 5.3404141217470169e-003 + -9.4317251443862915e-001 + 9.0425151586532593e-001 + -6.0007210820913315e-002 + 9 + -1 + <_> + + + <_> + + <_> + + + + <_> + 1 1 57 4 -1. + <_> + 1 3 57 2 2. + 0 + 1.0755469650030136e-001 + -7.1647202968597412e-001 + 8.7827038764953613e-001 + <_> + + <_> + + + + <_> + 0 2 6 14 -1. + <_> + 3 2 3 14 2. + 0 + 3.1668949872255325e-002 + -8.7051069736480713e-001 + 5.8807212114334106e-001 + <_> + + <_> + + + + <_> + 52 3 6 10 -1. + <_> + 54 3 2 10 3. + 0 + -1.0572380386292934e-002 + 6.2438100576400757e-001 + -7.4027371406555176e-001 + <_> + + <_> + + + + <_> + 1 14 61 2 -1. + <_> + 1 15 61 1 2. + 0 + -2.7396259829401970e-002 + 8.9776748418807983e-001 + -5.2986758947372437e-001 + <_> + + <_> + + + + <_> + 28 0 11 12 -1. + <_> + 28 4 11 4 3. + 0 + 2.5918649509549141e-002 + -8.6482518911361694e-001 + 5.3121817111968994e-001 + -9.6125108003616333e-001 + 10 + -1 + <_> + + + <_> + + <_> + + + + <_> + 22 1 41 4 -1. + <_> + 22 3 41 2 2. + 0 + 7.1039132773876190e-002 + -7.5719678401947021e-001 + 7.5645631551742554e-001 + <_> + + <_> + + + + <_> + 41 6 6 8 -1. + <_> + 43 6 2 8 3. + 0 + 7.6241148635745049e-003 + -7.9783838987350464e-001 + 7.1733069419860840e-001 + <_> + + <_> + + + + <_> + 50 9 14 5 -1. + <_> + 57 9 7 5 2. + 0 + -2.7092639356851578e-002 + 6.0071170330047607e-001 + -8.4794402122497559e-001 + <_> + + <_> + + + + <_> + 4 1 12 5 -1. + <_> + 10 1 6 5 2. + 0 + -8.1267888890579343e-004 + 5.9364068508148193e-001 + -8.9295238256454468e-001 + <_> + + <_> + + + + <_> + 37 9 3 3 -1. + <_> + 38 9 1 3 3. + 0 + 8.3705072756856680e-004 + -6.4887362718582153e-001 + 7.8537952899932861e-001 + -1.0618970394134521e+000 + 11 + -1 + <_> + + + <_> + + <_> + + + + <_> + 54 0 10 6 -1. + <_> + 54 0 5 3 2. + <_> + 59 3 5 3 2. + 0 + -9.7556859254837036e-003 + 7.6982218027114868e-001 + -8.5293501615524292e-001 + <_> + + <_> + + + + <_> + 47 0 6 11 -1. + <_> + 49 0 2 11 3. + 0 + -8.6617246270179749e-003 + 8.4029090404510498e-001 + -7.1949690580368042e-001 + <_> + + <_> + + + + <_> + 19 2 20 2 -1. + <_> + 19 3 20 1 2. + 0 + 1.6897840425372124e-002 + -5.3601992130279541e-001 + 9.5484441518783569e-001 + <_> + + <_> + + + + <_> + 14 4 6 11 -1. + <_> + 17 4 3 11 2. + 0 + 4.7526158596156165e-005 + -7.6412862539291382e-001 + 7.5398761034011841e-001 + <_> + + <_> + + + + <_> + 31 9 33 2 -1. + <_> + 42 9 11 2 3. + 0 + 6.5607670694589615e-003 + -9.9346441030502319e-001 + 6.4864277839660645e-001 + -7.3307347297668457e-001 + 12 + -1 + <_> + + + <_> + + <_> + + + + <_> + 6 1 53 6 -1. + <_> + 6 3 53 2 3. + 0 + 1.0103269666433334e-001 + -7.3275578022003174e-001 + 8.4619927406311035e-001 + <_> + + <_> + + + + <_> + 49 9 4 6 -1. + <_> + 49 9 2 3 2. + <_> + 51 12 2 3 2. + 0 + -2.8920811018906534e-004 + 7.1564781665802002e-001 + -8.8221758604049683e-001 + <_> + + <_> + + + + <_> + 0 9 30 7 -1. + <_> + 10 9 10 7 3. + 0 + 1.0838840156793594e-002 + -8.7420248985290527e-001 + 6.0648679733276367e-001 + <_> + + <_> + + + + <_> + 40 4 6 2 -1. + <_> + 42 4 2 2 3. + 0 + 5.0803890917450190e-004 + -9.0554022789001465e-001 + 6.4213967323303223e-001 + <_> + + <_> + + + + <_> + 1 9 6 1 -1. + <_> + 3 9 2 1 3. + 0 + 2.3357039317488670e-003 + -9.2574918270111084e-001 + 8.6384928226470947e-001 + <_> + + <_> + + + + <_> + 47 3 4 10 -1. + <_> + 47 8 4 5 2. + 0 + 8.0239427916239947e-005 + -9.9618428945541382e-001 + 9.5355111360549927e-001 + <_> + + <_> + + + + <_> + 31 5 30 11 -1. + <_> + 41 5 10 11 3. + 0 + 3.2030208967626095e-003 + -1. + 1.0001050233840942e+000 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + 0. + 0. + -1. + <_> + + <_> + + + + <_> + 21 3 42 5 -1. + <_> + 35 3 14 5 3. + 0 + 2.6143440045416355e-003 + -1. + 1.0002139806747437e+000 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + 0. + 0. + -1. + <_> + + <_> + + + + <_> + 8 5 30 9 -1. + <_> + 8 8 30 3 3. + 0 + -7.0475979009643197e-004 + 1. + -9.9976968765258789e-001 + <_> + + <_> + + + + <_> + 3 12 33 3 -1. + <_> + 14 12 11 3 3. + 0 + 2.1271279547363520e-003 + -9.9694627523422241e-001 + 1.0002720355987549e+000 + <_> + + <_> + + + + <_> + 0 0 3 2 -1. + <_> + 1 0 1 2 3. + 0 + -2.4224430671893060e-004 + 1. + -1. + <_> + + <_> + + + + <_> + 46 4 3 8 -1. + <_> + 47 4 1 8 3. + 0 + 7.4700301047414541e-004 + -9.9108231067657471e-001 + 9.9941182136535645e-001 + -1.0991690158843994e+000 + 13 + -1 + <_> + + + <_> + + <_> + + + + <_> + 1 2 6 5 -1. + <_> + 3 2 2 5 3. + 0 + 1.7227890202775598e-003 + -9.3608891963958740e-001 + 8.7251222133636475e-001 + <_> + + <_> + + + + <_> + 0 3 18 5 -1. + <_> + 6 3 6 5 3. + 0 + 2.7599320746958256e-003 + -9.9757021665573120e-001 + 1.0000289678573608e+000 + <_> + + <_> + + + + <_> + 3 1 6 14 -1. + <_> + 6 1 3 14 2. + 0 + -8.9444358309265226e-005 + 1. + -9.9264812469482422e-001 + <_> + + <_> + + + + <_> + 3 6 2 10 -1. + <_> + 3 11 2 5 2. + 0 + -2.7962020249105990e-004 + 8.2833290100097656e-001 + -9.8444151878356934e-001 + <_> + + <_> + + + + <_> + 42 0 4 6 -1. + <_> + 42 0 2 3 2. + <_> + 44 3 2 3 2. + 0 + -2.7560539820115082e-005 + 1. + -9.9543339014053345e-001 + -9.1314977407455444e-001 + 14 + -1 + diff --git a/data/haarcascades/haarcascade_mcs_eyepair_big.xml b/data/haarcascades/haarcascade_mcs_eyepair_big.xml index 48048c4c6..c3ac7a1ba 100644 --- a/data/haarcascades/haarcascade_mcs_eyepair_big.xml +++ b/data/haarcascades/haarcascade_mcs_eyepair_big.xml @@ -1,86 +1,123 @@ BOOST diff --git a/data/haarcascades/haarcascade_mcs_eyepair_small.xml b/data/haarcascades/haarcascade_mcs_eyepair_small.xml index cfa4d02a3..6e22b44ea 100644 --- a/data/haarcascades/haarcascade_mcs_eyepair_small.xml +++ b/data/haarcascades/haarcascade_mcs_eyepair_small.xml @@ -1,85 +1,122 @@ BOOST diff --git a/data/haarcascades/haarcascade_mcs_leftear.xml b/data/haarcascades/haarcascade_mcs_leftear.xml index e20b95a25..359851516 100644 --- a/data/haarcascades/haarcascade_mcs_leftear.xml +++ b/data/haarcascades/haarcascade_mcs_leftear.xml @@ -1,66 +1,122 @@ - +If you have any commercial interest in this work contact mcastrillon@iusiani.ulpgc.es + +Creative Commons Attribution-NonCommercial 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial 4.0 International +Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these +terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and +conditions. + +Section 1 – Definitions. + +Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public +License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. +Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public +License. +Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. +Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. +Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. +Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. +Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. +Licensor means the individual(s) or entity(ies) granting rights under this Public License. +NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. +Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. +Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. +You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + +License grant. + Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and + produce, reproduce, and Share Adapted Material for NonCommercial purposes only. + Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + Term. The term of this Public License is specified in Section 6(a). + Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + Downstream recipients. + Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +Other rights. + Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + Patent and trademark rights are not licensed under this Public License. + To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +Attribution. + + If You Share the Licensed Material (including in modified form), You must: + retain the following if it is supplied by the Licensor with the Licensed Material: + identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + a copyright notice; + a notice that refers to this Public License; + a notice that refers to the disclaimer of warranties; + a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + in any publication cite the following paper: + @INPROCEEDINGS{Castrillon11-caepia, + author = "Castrill\'on Santana, M. and Lorenzo Navarro, J. and Hern\'andez Sosa, D. ", + title = "An Study on Ear Detection and its Applications to Face Detection", + booktitle = "Conferencia de la Asociación Española para la Inteligencia Artificial (CAEPIA)", + year = "2011", + month = "November", + address = "La Laguna, Spain", + } + indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; + if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + upon express reinstatement by the Licensor. + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. +--> BOOST HAAR diff --git a/data/haarcascades/haarcascade_mcs_lefteye.xml b/data/haarcascades/haarcascade_mcs_lefteye.xml index 00112cc23..d745e0593 100644 --- a/data/haarcascades/haarcascade_mcs_lefteye.xml +++ b/data/haarcascades/haarcascade_mcs_lefteye.xml @@ -1,85 +1,122 @@ BOOST diff --git a/data/haarcascades/haarcascade_mcs_lefteye_alt.xml b/data/haarcascades/haarcascade_mcs_lefteye_alt.xml new file mode 100644 index 000000000..085875218 --- /dev/null +++ b/data/haarcascades/haarcascade_mcs_lefteye_alt.xml @@ -0,0 +1,24071 @@ + + + + + + 18 12 + + <_> + + + <_> + + <_> + + + + <_> + 3 0 12 12 -1. + <_> + 7 4 4 4 9. + 0 + -5.4611408710479736e-001 + 8.2068818807601929e-001 + -7.5621801614761353e-001 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 0 8 18 4 2. + 0 + 1.9197000563144684e-001 + -7.4652588367462158e-001 + 5.0908601284027100e-001 + <_> + + <_> + + + + <_> + 1 6 2 1 -1. + <_> + 2 6 1 1 2. + 0 + -1.0090269643114880e-004 + 4.2689380049705505e-001 + -5.5786168575286865e-001 + <_> + + <_> + + + + <_> + 9 1 3 6 -1. + <_> + 7 3 3 2 3. + 1 + -9.2340409755706787e-002 + 4.4454950094223022e-001 + -1.2654660642147064e-001 + <_> + + <_> + + + + <_> + 9 2 6 2 -1. + <_> + 11 4 2 2 3. + 1 + -7.1513116359710693e-002 + 6.0273522138595581e-001 + -2.4365329742431641e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 5.8654979511629790e-005 + -5.7338011264801025e-001 + 2.3801539838314056e-001 + <_> + + <_> + + + + <_> + 1 8 4 2 -1. + <_> + 1 9 4 1 2. + 0 + 4.3697938963305205e-005 + -4.0486478805541992e-001 + 2.1698260307312012e-001 + <_> + + <_> + + + + <_> + 15 6 2 1 -1. + <_> + 15 6 1 1 2. + 0 + -1.0192039917455986e-004 + 1.9003869593143463e-001 + -2.0315149426460266e-001 + <_> + + <_> + + + + <_> + 1 6 2 1 -1. + <_> + 2 6 1 1 2. + 0 + 1.0126679990207776e-004 + -2.1862569451332092e-001 + 4.6297249197959900e-001 + -1.9446439743041992e+000 + -1 + -1 + <_> + + + <_> + + <_> + + + + <_> + 3 0 12 12 -1. + <_> + 7 4 4 4 9. + 0 + -7.0576202869415283e-001 + 8.1088548898696899e-001 + -6.3504821062088013e-001 + <_> + + <_> + + + + <_> + 1 4 17 8 -1. + <_> + 1 8 17 4 2. + 0 + 2.8249558806419373e-001 + -6.3604378700256348e-001 + 5.8339637517929077e-001 + <_> + + <_> + + + + <_> + 3 2 10 9 -1. + <_> + 3 5 10 3 3. + 0 + 4.9681571125984192e-001 + -2.7583679184317589e-002 + -2.0745629882812500e+003 + <_> + + <_> + + + + <_> + 9 1 2 6 -1. + <_> + 7 3 2 2 3. + 1 + -5.2082080394029617e-002 + 2.6939961314201355e-001 + -5.1909279078245163e-002 + <_> + + <_> + + + + <_> + 0 2 12 10 -1. + <_> + 0 7 12 5 2. + 0 + 8.6202162504196167e-001 + 1.9688610918819904e-003 + -2.0273730468750000e+003 + <_> + + <_> + + + + <_> + 14 5 4 4 -1. + <_> + 14 5 2 4 2. + 0 + -6.9935750216245651e-003 + 1.8710659444332123e-001 + -1.7539620399475098e-001 + <_> + + <_> + + + + <_> + 1 5 6 4 -1. + <_> + 3 5 2 4 3. + 0 + -1.8909620121121407e-002 + 3.9160171151161194e-001 + -3.6989161372184753e-001 + <_> + + <_> + + + + <_> + 9 1 2 6 -1. + <_> + 7 3 2 2 3. + 1 + -2.5043029338121414e-002 + 5.7452820241451263e-002 + -5.9267260134220123e-002 + <_> + + <_> + + + + <_> + 9 1 6 2 -1. + <_> + 11 3 2 2 3. + 1 + -5.7229399681091309e-002 + 4.6264800429344177e-001 + -2.2969110310077667e-001 + <_> + + <_> + + + + <_> + 12 9 5 2 -1. + <_> + 12 10 5 1 2. + 0 + 4.6097549784462899e-005 + -3.5773921012878418e-001 + 1.4059029519557953e-001 + <_> + + <_> + + + + <_> + 1 9 5 2 -1. + <_> + 1 10 5 1 2. + 0 + 5.8821111451834440e-005 + -4.8682320117950439e-001 + 2.3461140692234039e-001 + <_> + + <_> + + + + <_> + 6 1 6 6 -1. + <_> + 6 3 6 2 3. + 0 + 8.3586022257804871e-002 + -1.5363390743732452e-001 + 7.1024411916732788e-001 + <_> + + <_> + + + + <_> + 7 11 4 1 -1. + <_> + 8 11 2 1 2. + 0 + -4.7323051840066910e-003 + -8.1375300884246826e-001 + 1.5069650113582611e-001 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + 5.7054250501096249e-003 + 1.2084300071001053e-001 + -7.2984558343887329e-001 + <_> + + <_> + + + + <_> + 6 11 4 1 -1. + <_> + 7 11 2 1 2. + 0 + 4.2972271330654621e-003 + 7.5880967080593109e-002 + -8.0118077993392944e-001 + -1.7692639827728271e+000 + 0 + -1 + <_> + + + <_> + + <_> + + + + <_> + 8 4 2 8 -1. + <_> + 8 8 2 4 2. + 0 + 6.2623426318168640e-002 + -6.7264968156814575e-001 + 6.5457260608673096e-001 + <_> + + <_> + + + + <_> + 0 1 18 9 -1. + <_> + 6 4 6 3 9. + 0 + -7.4647617340087891e-001 + 5.7469171285629272e-001 + -4.3637180328369141e-001 + <_> + + <_> + + + + <_> + 0 5 4 4 -1. + <_> + 2 5 2 4 2. + 0 + -1.7294099554419518e-002 + 4.6898889541625977e-001 + -3.9281249046325684e-001 + <_> + + <_> + + + + <_> + 1 8 17 4 -1. + <_> + 1 10 17 2 2. + 0 + 2.1398400887846947e-002 + -5.9292298555374146e-001 + 1.9770659506320953e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -3.5737060010433197e-002 + 5.5622661113739014e-001 + -2.0223970711231232e-001 + <_> + + <_> + + + + <_> + 7 11 4 1 -1. + <_> + 8 11 2 1 2. + 0 + 3.2078200019896030e-003 + 7.4256651103496552e-002 + -7.2774058580398560e-001 + <_> + + <_> + + + + <_> + 0 7 1 4 -1. + <_> + 0 9 1 2 2. + 0 + -3.8174460642039776e-003 + -6.7518317699432373e-001 + 1.1311540007591248e-001 + <_> + + <_> + + + + <_> + 9 11 4 1 -1. + <_> + 10 11 2 1 2. + 0 + 3.7939909379929304e-003 + 8.9654907584190369e-002 + -7.3344737291336060e-001 + <_> + + <_> + + + + <_> + 7 5 4 3 -1. + <_> + 9 5 2 3 2. + 0 + -1.8273390829563141e-002 + 4.4436338543891907e-001 + -1.8418380618095398e-001 + <_> + + <_> + + + + <_> + 9 11 4 1 -1. + <_> + 10 11 2 1 2. + 0 + -5.3060338832437992e-003 + -7.0876628160476685e-001 + 7.8580521047115326e-002 + <_> + + <_> + + + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + 0 + 1.1829390190541744e-002 + 8.9572936296463013e-002 + -7.3483431339263916e-001 + <_> + + <_> + + + + <_> + 9 10 4 2 -1. + <_> + 10 10 2 2 2. + 0 + 4.8425127752125263e-003 + 4.7504398971796036e-002 + -3.6813148856163025e-001 + <_> + + <_> + + + + <_> + 5 10 4 2 -1. + <_> + 6 10 2 2 2. + 0 + 5.3384378552436829e-003 + 1.0396180301904678e-001 + -6.1680471897125244e-001 + <_> + + <_> + + + + <_> + 9 0 3 7 -1. + <_> + 10 1 1 7 3. + 1 + -2.8934059664607048e-002 + 2.3010690510272980e-001 + -9.5079377293586731e-002 + <_> + + <_> + + + + <_> + 9 0 7 3 -1. + <_> + 8 1 7 1 3. + 1 + 2.0601950585842133e-002 + -1.4737619459629059e-001 + 3.8007509708404541e-001 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 8 0 2 3 2. + 0 + -1.0493800044059753e-002 + -6.4840590953826904e-001 + 9.1139681637287140e-002 + <_> + + <_> + + + + <_> + 8 4 2 8 -1. + <_> + 8 8 2 4 2. + 0 + 6.2527976930141449e-002 + 1.6974839568138123e-001 + -2.9701429605484009e-001 + <_> + + <_> + + + + <_> + 9 2 3 6 -1. + <_> + 7 4 3 2 3. + 1 + -9.4582162797451019e-002 + 1.9255830347537994e-001 + -2.5837939232587814e-002 + -1.7514940500259399e+000 + 1 + -1 + <_> + + + <_> + + <_> + + + + <_> + 6 0 9 2 -1. + <_> + 9 3 3 2 3. + 1 + -1.5237879753112793e-001 + 7.1485751867294312e-001 + -5.8257007598876953e-001 + <_> + + <_> + + + + <_> + 6 4 11 8 -1. + <_> + 6 8 11 4 2. + 0 + 1.9623799622058868e-001 + -5.0717341899871826e-001 + 3.0529379844665527e-001 + <_> + + <_> + + + + <_> + 4 5 2 4 -1. + <_> + 4 5 2 2 2. + 1 + -3.5102769732475281e-002 + 3.8133320212364197e-001 + -4.4005489349365234e-001 + <_> + + <_> + + + + <_> + 12 2 6 2 -1. + <_> + 14 4 2 2 3. + 1 + 8.6640313267707825e-002 + -3.1253110617399216e-002 + 4.1132459044456482e-001 + <_> + + <_> + + + + <_> + 0 2 18 4 -1. + <_> + 0 4 18 2 2. + 0 + 3.6519891023635864e-001 + -1.7459569498896599e-003 + -2.0211540527343750e+003 + <_> + + <_> + + + + <_> + 7 6 6 2 -1. + <_> + 7 6 3 2 2. + 0 + -5.2979141473770142e-002 + 5.6572532653808594e-001 + -9.0168356895446777e-002 + <_> + + <_> + + + + <_> + 5 6 6 2 -1. + <_> + 8 6 3 2 2. + 0 + -1.3122299686074257e-002 + 2.8803709149360657e-001 + -3.0250340700149536e-001 + <_> + + <_> + + + + <_> + 1 10 16 2 -1. + <_> + 1 11 16 1 2. + 0 + 1.3766849588137120e-004 + -5.2591192722320557e-001 + 1.6913980245590210e-001 + <_> + + <_> + + + + <_> + 1 5 2 6 -1. + <_> + 2 5 1 6 2. + 0 + 1.3008220493793488e-001 + -4.6197711490094662e-003 + -1.0582030029296875e+003 + <_> + + <_> + + + + <_> + 14 9 4 3 -1. + <_> + 14 10 4 1 3. + 0 + -1.5327390283346176e-002 + -6.9445407390594482e-001 + 7.1856021881103516e-002 + <_> + + <_> + + + + <_> + 0 9 4 3 -1. + <_> + 0 10 4 1 3. + 0 + -9.6624903380870819e-003 + -6.1284822225570679e-001 + 9.1272346675395966e-002 + <_> + + <_> + + + + <_> + 5 0 10 6 -1. + <_> + 5 2 10 2 3. + 0 + 8.8566377758979797e-002 + -1.5997810661792755e-001 + 3.6896151304244995e-001 + <_> + + <_> + + + + <_> + 0 10 3 2 -1. + <_> + 0 11 3 1 2. + 0 + -3.7188939750194550e-003 + -6.3978141546249390e-001 + 9.2079572379589081e-002 + <_> + + <_> + + + + <_> + 4 0 11 8 -1. + <_> + 4 2 11 4 2. + 0 + -1.4510180056095123e-001 + 4.1528600454330444e-001 + -1.4322389662265778e-001 + <_> + + <_> + + + + <_> + 9 3 4 2 -1. + <_> + 9 3 2 2 2. + 1 + 1.7310230061411858e-002 + -1.5397289395332336e-001 + 4.0401691198348999e-001 + <_> + + <_> + + + + <_> + 13 8 5 2 -1. + <_> + 13 9 5 1 2. + 0 + 2.3151350615080446e-004 + -2.0172169804573059e-001 + 1.2100940197706223e-001 + <_> + + <_> + + + + <_> + 0 8 5 2 -1. + <_> + 0 9 5 1 2. + 0 + 4.4627388706430793e-004 + -3.9083960652351379e-001 + 1.2552070617675781e-001 + <_> + + <_> + + + + <_> + 12 5 4 3 -1. + <_> + 12 5 2 3 2. + 0 + 1.3271129690110683e-002 + -1.0739839822053909e-001 + 2.6234090328216553e-001 + <_> + + <_> + + + + <_> + 1 0 16 9 -1. + <_> + 5 0 8 9 2. + 0 + -1.1344719678163528e-001 + 2.6222631335258484e-001 + -2.0850320160388947e-001 + <_> + + <_> + + + + <_> + 8 11 6 1 -1. + <_> + 10 11 2 1 3. + 0 + 8.8979126885533333e-003 + 4.9091130495071411e-002 + -5.0896888971328735e-001 + <_> + + <_> + + + + <_> + 4 10 6 2 -1. + <_> + 6 10 2 2 3. + 0 + -2.4719990789890289e-002 + -7.5905930995941162e-001 + 4.9361631274223328e-002 + <_> + + <_> + + + + <_> + 12 4 3 3 -1. + <_> + 13 5 1 3 3. + 1 + -3.3265918493270874e-002 + 3.4829610586166382e-001 + -5.9630129486322403e-002 + <_> + + <_> + + + + <_> + 6 1 6 2 -1. + <_> + 8 1 2 2 3. + 0 + -2.2988099604845047e-002 + -6.5046131610870361e-001 + 6.4039543271064758e-002 + <_> + + <_> + + + + <_> + 13 0 4 4 -1. + <_> + 12 1 4 2 2. + 1 + -3.1392410397529602e-002 + 2.1976619958877563e-001 + -6.0772381722927094e-002 + <_> + + <_> + + + + <_> + 5 0 4 4 -1. + <_> + 6 1 2 4 2. + 1 + -4.7737959772348404e-002 + 5.1002371311187744e-001 + -7.2028681635856628e-002 + <_> + + <_> + + + + <_> + 10 5 6 3 -1. + <_> + 12 5 2 3 3. + 0 + 3.2071519643068314e-002 + -7.6109372079372406e-002 + 2.5640499591827393e-001 + <_> + + <_> + + + + <_> + 1 0 15 6 -1. + <_> + 6 2 5 2 9. + 0 + 4.4289338588714600e-001 + -6.8526968359947205e-002 + 5.6304061412811279e-001 + <_> + + <_> + + + + <_> + 10 5 6 3 -1. + <_> + 12 5 2 3 3. + 0 + -1.1486619710922241e-002 + 1.5239420533180237e-001 + -4.0200568735599518e-002 + <_> + + <_> + + + + <_> + 2 5 6 3 -1. + <_> + 4 5 2 3 3. + 0 + -1.9018840044736862e-002 + 3.1413850188255310e-001 + -1.2248709797859192e-001 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + -6.8585639819502831e-003 + -6.6252797842025757e-001 + 5.7304140180349350e-002 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 8 9 2 3 2. + 0 + 9.8197776824235916e-003 + 4.3627310544252396e-002 + -6.7724108695983887e-001 + <_> + + <_> + + + + <_> + 2 0 14 4 -1. + <_> + 2 1 14 2 2. + 0 + -7.0927143096923828e-002 + 5.4129147529602051e-001 + -7.2669401764869690e-002 + <_> + + <_> + + + + <_> + 5 0 7 4 -1. + <_> + 5 1 7 2 2. + 0 + 2.3212930187582970e-002 + -1.1495050042867661e-001 + 2.9792940616607666e-001 + <_> + + <_> + + + + <_> + 9 0 4 1 -1. + <_> + 10 0 2 1 2. + 0 + -6.4186761155724525e-003 + -4.9147358536720276e-001 + 3.9359170943498611e-002 + <_> + + <_> + + + + <_> + 1 8 3 3 -1. + <_> + 1 9 3 1 3. + 0 + 1.4896850101649761e-002 + 4.8360548913478851e-002 + -5.7956790924072266e-001 + <_> + + <_> + + + + <_> + 10 7 7 2 -1. + <_> + 10 8 7 1 2. + 0 + 3.0226260423660278e-003 + -1.1061940342187881e-001 + 5.2919808775186539e-002 + <_> + + <_> + + + + <_> + 5 0 4 2 -1. + <_> + 6 0 2 2 2. + 0 + -6.6905869171023369e-003 + -4.3806540966033936e-001 + 6.6940046846866608e-002 + <_> + + <_> + + + + <_> + 10 5 3 2 -1. + <_> + 11 5 1 2 3. + 0 + 7.2806091047823429e-003 + -6.5536737442016602e-002 + 2.7438428997993469e-001 + -1.9025980234146118e+000 + 2 + -1 + <_> + + + <_> + + <_> + + + + <_> + 9 1 6 3 -1. + <_> + 11 3 2 3 3. + 1 + -1.0395430028438568e-001 + 6.2448638677597046e-001 + -5.9380972385406494e-001 + <_> + + <_> + + + + <_> + 14 5 4 3 -1. + <_> + 14 5 2 3 2. + 0 + -9.0995300561189651e-003 + 2.8107839822769165e-001 + -2.3319789767265320e-001 + <_> + + <_> + + + + <_> + 0 0 15 12 -1. + <_> + 0 4 15 4 3. + 0 + 1.1043469905853271e+000 + 1.3428430538624525e-003 + -1.8338730468750000e+003 + <_> + + <_> + + + + <_> + 7 4 10 8 -1. + <_> + 7 8 10 4 2. + 0 + 1.5152810513973236e-001 + -5.4776471853256226e-001 + 1.7032749950885773e-001 + <_> + + <_> + + + + <_> + 0 5 4 3 -1. + <_> + 2 5 2 3 2. + 0 + -1.8869370222091675e-002 + 5.1096087694168091e-001 + -3.8751450181007385e-001 + <_> + + <_> + + + + <_> + 9 2 4 6 -1. + <_> + 10 3 2 6 2. + 1 + -2.5966409593820572e-002 + 5.9833060950040817e-002 + -8.0629907548427582e-002 + <_> + + <_> + + + + <_> + 9 2 6 4 -1. + <_> + 8 3 6 2 2. + 1 + -3.3599171787500381e-002 + 4.0842789411544800e-001 + -3.2333779335021973e-001 + <_> + + <_> + + + + <_> + 7 2 6 4 -1. + <_> + 7 3 6 2 2. + 0 + -3.8244638592004776e-002 + 4.9302589893341064e-001 + -1.6094090044498444e-001 + <_> + + <_> + + + + <_> + 0 6 6 6 -1. + <_> + 0 9 6 3 2. + 0 + 2.1556170657277107e-002 + -5.7558798789978027e-001 + 1.5593230724334717e-001 + <_> + + <_> + + + + <_> + 0 0 18 3 -1. + <_> + 6 0 6 3 3. + 0 + -5.5178638547658920e-002 + 3.1259340047836304e-001 + -2.3921109735965729e-001 + <_> + + <_> + + + + <_> + 6 6 2 2 -1. + <_> + 6 6 1 1 2. + <_> + 7 7 1 1 2. + 0 + -3.8735559210181236e-003 + 5.4549610614776611e-001 + -1.0063389688730240e-001 + <_> + + <_> + + + + <_> + 9 11 6 1 -1. + <_> + 11 11 2 1 3. + 0 + -1.4108420349657536e-002 + -7.3762410879135132e-001 + 5.7357121258974075e-002 + <_> + + <_> + + + + <_> + 0 6 2 4 -1. + <_> + 0 8 2 2 2. + 0 + -6.0528269968926907e-003 + -5.5406332015991211e-001 + 7.6832607388496399e-002 + <_> + + <_> + + + + <_> + 8 10 6 2 -1. + <_> + 10 10 2 2 3. + 0 + 1.8572619184851646e-002 + 3.2866738736629486e-002 + -6.4792937040328979e-001 + <_> + + <_> + + + + <_> + 4 10 6 2 -1. + <_> + 6 10 2 2 3. + 0 + 1.2845859862864017e-002 + 7.3656037449836731e-002 + -5.7360821962356567e-001 + <_> + + <_> + + + + <_> + 11 5 4 3 -1. + <_> + 12 5 2 3 2. + 0 + 1.0417309589684010e-002 + -1.0239619761705399e-001 + 2.5212439894676208e-001 + <_> + + <_> + + + + <_> + 0 10 5 2 -1. + <_> + 0 11 5 1 2. + 0 + -5.2642878144979477e-003 + -5.9819197654724121e-001 + 6.9865286350250244e-002 + <_> + + <_> + + + + <_> + 2 10 16 2 -1. + <_> + 10 10 8 1 2. + <_> + 2 11 8 1 2. + 0 + 2.7880489826202393e-002 + 4.3994851410388947e-002 + -5.0984817743301392e-001 + <_> + + <_> + + + + <_> + 4 2 9 3 -1. + <_> + 4 3 9 1 3. + 0 + 2.3825490847229958e-002 + -1.2183369696140289e-001 + 3.1688851118087769e-001 + <_> + + <_> + + + + <_> + 6 1 8 4 -1. + <_> + 6 2 8 2 2. + 0 + -2.0250659435987473e-002 + 3.3406090736389160e-001 + -1.0055329650640488e-001 + <_> + + <_> + + + + <_> + 3 0 9 4 -1. + <_> + 3 1 9 2 2. + 0 + 3.2774340361356735e-002 + -1.2221919745206833e-001 + 3.1050428748130798e-001 + <_> + + <_> + + + + <_> + 9 9 2 1 -1. + <_> + 9 9 1 1 2. + 1 + -1.1297949822619557e-004 + 1.0250750184059143e-001 + -2.0995940268039703e-001 + <_> + + <_> + + + + <_> + 2 4 12 5 -1. + <_> + 8 4 6 5 2. + 0 + -9.5565170049667358e-002 + 3.0095851421356201e-001 + -1.3452769815921783e-001 + <_> + + <_> + + + + <_> + 10 0 4 2 -1. + <_> + 11 0 2 2 2. + 0 + 6.3593629747629166e-003 + 6.4052909612655640e-002 + -4.9904870986938477e-001 + <_> + + <_> + + + + <_> + 3 5 4 3 -1. + <_> + 4 5 2 3 2. + 0 + -7.0063141174614429e-003 + 3.0243200063705444e-001 + -1.1930730193853378e-001 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 5 1 3 3. + 0 + 1.7500750720500946e-002 + -5.7251829653978348e-002 + 4.4421580433845520e-001 + <_> + + <_> + + + + <_> + 6 10 4 2 -1. + <_> + 7 10 2 2 2. + 0 + -7.2048557922244072e-003 + -6.1189258098602295e-001 + 6.4432121813297272e-002 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 5 1 3 3. + 0 + -5.6282947771251202e-003 + 2.4128329753875732e-001 + -8.9441202580928802e-002 + <_> + + <_> + + + + <_> + 4 11 4 1 -1. + <_> + 5 11 2 1 2. + 0 + -4.9876999109983444e-003 + -6.7359071969985962e-001 + 5.8322191238403320e-002 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 5 1 3 3. + 0 + 2.3166439495980740e-003 + -8.9238733053207397e-002 + 1.2162160128355026e-001 + <_> + + <_> + + + + <_> + 5 5 3 3 -1. + <_> + 6 5 1 3 3. + 0 + -6.7102159373462200e-003 + 3.7631779909133911e-001 + -9.5407336950302124e-002 + <_> + + <_> + + + + <_> + 11 0 4 2 -1. + <_> + 12 0 2 2 2. + 0 + 5.0830701366066933e-003 + 7.4287436902523041e-002 + -3.9065170288085938e-001 + <_> + + <_> + + + + <_> + 4 0 8 9 -1. + <_> + 4 3 8 3 3. + 0 + 1.8377199769020081e-001 + -6.3876979053020477e-002 + 5.6611680984497070e-001 + <_> + + <_> + + + + <_> + 0 0 18 6 -1. + <_> + 0 3 18 3 2. + 0 + -6.0653341934084892e-003 + 1.4651310443878174e-001 + -2.5797340273857117e-001 + <_> + + <_> + + + + <_> + 3 0 6 2 -1. + <_> + 5 0 2 2 3. + 0 + -2.0235970616340637e-002 + -5.4194480180740356e-001 + 5.7601358741521835e-002 + <_> + + <_> + + + + <_> + 14 7 4 3 -1. + <_> + 14 8 4 1 3. + 0 + -2.6110339909791946e-002 + -6.0285919904708862e-001 + 1.7485620453953743e-002 + <_> + + <_> + + + + <_> + 9 1 6 3 -1. + <_> + 11 3 2 3 3. + 1 + -1.0403200238943100e-001 + -2.4455690383911133e-001 + 1.2605750560760498e-001 + <_> + + <_> + + + + <_> + 7 5 6 3 -1. + <_> + 9 6 2 1 9. + 0 + -5.3566411137580872e-002 + 2.5159069895744324e-001 + -1.0152529925107956e-001 + <_> + + <_> + + + + <_> + 6 5 4 2 -1. + <_> + 7 5 2 2 2. + 0 + -6.7835198715329170e-003 + 3.3641210198402405e-001 + -9.6368037164211273e-002 + <_> + + <_> + + + + <_> + 14 7 4 3 -1. + <_> + 14 8 4 1 3. + 0 + 3.0316449701786041e-002 + 1.7477709800004959e-002 + -6.0695719718933105e-001 + <_> + + <_> + + + + <_> + 0 7 4 3 -1. + <_> + 0 8 4 1 3. + 0 + 2.0985240116715431e-002 + 4.0398400276899338e-002 + -7.3442429304122925e-001 + <_> + + <_> + + + + <_> + 6 10 6 2 -1. + <_> + 8 10 2 2 3. + 0 + 1.9706780090928078e-002 + 3.1928699463605881e-002 + -7.5477129220962524e-001 + -1.8514059782028198e+000 + 3 + -1 + <_> + + + <_> + + <_> + + + + <_> + 2 2 9 8 -1. + <_> + 2 4 9 4 2. + 0 + -1.7423079907894135e-001 + 6.1390841007232666e-001 + -4.7894141077995300e-001 + <_> + + <_> + + + + <_> + 9 6 6 2 -1. + <_> + 11 6 2 2 3. + 0 + 3.7291038781404495e-002 + -2.7487620711326599e-001 + 6.9311857223510742e-001 + <_> + + <_> + + + + <_> + 7 2 2 2 -1. + <_> + 7 2 2 1 2. + 1 + 7.1578949689865112e-002 + 3.4122820943593979e-002 + -1.7707500000000000e+003 + <_> + + <_> + + + + <_> + 9 3 4 3 -1. + <_> + 9 3 2 3 2. + 1 + -5.8419991284608841e-002 + 9.5094732940196991e-002 + -3.5735588520765305e-002 + <_> + + <_> + + + + <_> + 9 3 3 4 -1. + <_> + 9 3 3 2 2. + 1 + -6.8234533071517944e-002 + 4.3610438704490662e-001 + -2.7024009823799133e-001 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 4.6446189284324646e-002 + -5.3858101367950439e-001 + 1.2908129394054413e-001 + <_> + + <_> + + + + <_> + 1 4 4 6 -1. + <_> + 3 4 2 6 2. + 0 + -1.8313050270080566e-002 + 2.4637509882450104e-001 + -2.9880639910697937e-001 + <_> + + <_> + + + + <_> + 9 2 1 6 -1. + <_> + 7 4 1 2 3. + 1 + 4.5683261007070541e-002 + -1.9792109727859497e-002 + 2.9861330986022949e-001 + <_> + + <_> + + + + <_> + 9 2 6 1 -1. + <_> + 11 4 2 1 3. + 1 + -3.8607221096754074e-002 + 3.2478851079940796e-001 + -1.9968329370021820e-001 + <_> + + <_> + + + + <_> + 4 2 10 4 -1. + <_> + 4 3 10 2 2. + 0 + -5.3359329700469971e-002 + 5.1778447628021240e-001 + -1.1112260073423386e-001 + <_> + + <_> + + + + <_> + 5 3 7 3 -1. + <_> + 5 4 7 1 3. + 0 + 2.5140959769487381e-002 + -9.0483076870441437e-002 + 5.9572058916091919e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 6 0 6 12 3. + 0 + -2.1597529947757721e-001 + 2.0755149424076080e-001 + -2.4115790426731110e-001 + <_> + + <_> + + + + <_> + 6 2 6 3 -1. + <_> + 6 3 6 1 3. + 0 + 2.9019270092248917e-002 + -1.0131660103797913e-001 + 4.7087991237640381e-001 + <_> + + <_> + + + + <_> + 14 2 4 10 -1. + <_> + 14 7 4 5 2. + 0 + 1.4864710159599781e-002 + -2.8045138716697693e-001 + 1.1898139864206314e-001 + <_> + + <_> + + + + <_> + 6 6 2 2 -1. + <_> + 6 6 1 1 2. + <_> + 7 7 1 1 2. + 0 + -3.2239339780062437e-003 + 4.2325741052627563e-001 + -1.0377889871597290e-001 + <_> + + <_> + + + + <_> + 8 10 4 2 -1. + <_> + 9 10 2 2 2. + 0 + -5.6671360507607460e-003 + -5.9137248992919922e-001 + 9.7125522792339325e-002 + <_> + + <_> + + + + <_> + 0 7 4 4 -1. + <_> + 0 9 4 2 2. + 0 + 1.0033809667220339e-004 + -4.6385771036148071e-001 + 7.2615653276443481e-002 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 9 0 9 6 2. + <_> + 0 6 9 6 2. + 0 + -3.6071398854255676e-001 + -6.1538481712341309e-001 + 5.5276088416576385e-002 + <_> + + <_> + + + + <_> + 0 10 2 2 -1. + <_> + 0 11 2 1 2. + 0 + -3.1085009686648846e-003 + -5.7536369562149048e-001 + 6.0731589794158936e-002 + <_> + + <_> + + + + <_> + 7 11 6 1 -1. + <_> + 9 11 2 1 3. + 0 + 6.1288890428841114e-003 + 7.4672959744930267e-002 + -5.2534508705139160e-001 + <_> + + <_> + + + + <_> + 7 5 3 3 -1. + <_> + 8 6 1 1 9. + 0 + -2.2192759439349174e-002 + 3.2507351040840149e-001 + -1.1742109805345535e-001 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 8 0 2 3 3. + 0 + -2.9342940077185631e-002 + -6.4161187410354614e-001 + 4.9035649746656418e-002 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 8 0 2 3 2. + 0 + 7.7600688673555851e-003 + 6.9918327033519745e-002 + -4.5949921011924744e-001 + <_> + + <_> + + + + <_> + 6 0 7 3 -1. + <_> + 6 1 7 1 3. + 0 + 1.7340639606118202e-002 + -1.0505460202693939e-001 + 2.8804540634155273e-001 + <_> + + <_> + + + + <_> + 2 2 9 8 -1. + <_> + 2 4 9 4 2. + 0 + -1.7411990463733673e-001 + -2.7445599436759949e-001 + 1.2657789885997772e-001 + <_> + + <_> + + + + <_> + 5 0 10 6 -1. + <_> + 5 2 10 2 3. + 0 + 1.1415860056877136e-001 + -9.0350322425365448e-002 + 2.8193458914756775e-001 + <_> + + <_> + + + + <_> + 4 0 10 2 -1. + <_> + 4 1 10 1 2. + 0 + -3.4428309649229050e-002 + 4.5843648910522461e-001 + -7.3989093303680420e-002 + <_> + + <_> + + + + <_> + 12 10 6 2 -1. + <_> + 15 10 3 1 2. + <_> + 12 11 3 1 2. + 0 + 9.6141622634604573e-005 + -1.2745319306850433e-001 + 1.1268970370292664e-001 + <_> + + <_> + + + + <_> + 4 5 3 3 -1. + <_> + 5 5 1 3 3. + 0 + -4.9724201671779156e-003 + 2.7802708745002747e-001 + -1.0591570287942886e-001 + <_> + + <_> + + + + <_> + 13 4 3 2 -1. + <_> + 13 4 3 1 2. + 1 + -6.3664510846138000e-002 + 5.5961591005325317e-001 + -2.6394790038466454e-003 + <_> + + <_> + + + + <_> + 5 4 2 3 -1. + <_> + 5 4 1 3 2. + 1 + -2.6674149557948112e-002 + 4.9559178948402405e-001 + -6.9073468446731567e-002 + <_> + + <_> + + + + <_> + 12 10 6 2 -1. + <_> + 15 10 3 1 2. + <_> + 12 11 3 1 2. + 0 + 1.4223149977624416e-002 + 3.5259280353784561e-002 + -4.1093349456787109e-001 + <_> + + <_> + + + + <_> + 0 10 6 2 -1. + <_> + 0 10 3 1 2. + <_> + 3 11 3 1 2. + 0 + 3.2638079574098811e-005 + -1.8650929629802704e-001 + 1.4809480309486389e-001 + <_> + + <_> + + + + <_> + 1 10 16 2 -1. + <_> + 9 10 8 1 2. + <_> + 1 11 8 1 2. + 0 + 2.3983500897884369e-002 + 4.9719810485839844e-002 + -5.1264011859893799e-001 + <_> + + <_> + + + + <_> + 7 0 9 2 -1. + <_> + 10 3 3 2 3. + 1 + -5.0319589674472809e-002 + 8.3218432962894440e-002 + -2.9233419895172119e-001 + <_> + + <_> + + + + <_> + 8 0 4 2 -1. + <_> + 9 0 2 2 2. + 0 + -1.1278240010142326e-002 + -6.7043042182922363e-001 + 3.4270301461219788e-002 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -3.5662490874528885e-002 + 2.2888509929180145e-001 + -1.3197310268878937e-001 + <_> + + <_> + + + + <_> + 8 0 6 2 -1. + <_> + 10 0 2 2 3. + 0 + 2.1419739350676537e-002 + 3.7937160581350327e-002 + -4.5889899134635925e-001 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + -3.4534449223428965e-003 + 3.3343398571014404e-001 + -7.5317703187465668e-002 + <_> + + <_> + + + + <_> + 8 10 4 2 -1. + <_> + 9 10 2 2 2. + 0 + 5.8356970548629761e-003 + 3.6585651338100433e-002 + -3.8631778955459595e-001 + <_> + + <_> + + + + <_> + 6 10 4 2 -1. + <_> + 7 10 2 2 2. + 0 + 5.0293467938899994e-003 + 5.2214898169040680e-002 + -5.0938832759857178e-001 + <_> + + <_> + + + + <_> + 9 5 2 3 -1. + <_> + 8 6 2 1 3. + 1 + 3.3139381557703018e-002 + -2.7443800121545792e-002 + 3.2198739051818848e-001 + <_> + + <_> + + + + <_> + 9 5 3 2 -1. + <_> + 10 6 1 2 3. + 1 + -8.7034106254577637e-003 + 1.7421320080757141e-001 + -1.4240099489688873e-001 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + -8.2512637600302696e-003 + -6.9030272960662842e-001 + 3.4187458455562592e-002 + <_> + + <_> + + + + <_> + 0 3 1 4 -1. + <_> + 0 5 1 2 2. + 0 + -1.4581499621272087e-002 + -6.0555249452590942e-001 + 3.1542379409074783e-002 + <_> + + <_> + + + + <_> + 9 3 4 3 -1. + <_> + 9 3 2 3 2. + 1 + -1.1998149752616882e-001 + 3.4346449375152588e-001 + -1.8667690455913544e-002 + <_> + + <_> + + + + <_> + 9 3 3 4 -1. + <_> + 9 3 3 2 2. + 1 + -6.8040207028388977e-002 + -2.2389249503612518e-001 + 9.7281388938426971e-002 + <_> + + <_> + + + + <_> + 10 0 3 7 -1. + <_> + 11 1 1 7 3. + 1 + -3.5576358437538147e-002 + 9.8187446594238281e-002 + -2.1791150793433189e-002 + <_> + + <_> + + + + <_> + 8 0 7 3 -1. + <_> + 7 1 7 1 3. + 1 + -3.0443429946899414e-002 + 2.4923379719257355e-001 + -9.3816317617893219e-002 + <_> + + <_> + + + + <_> + 12 5 4 4 -1. + <_> + 13 5 2 4 2. + 0 + -5.6799547746777534e-003 + 2.1073240041732788e-001 + -1.0627429932355881e-001 + <_> + + <_> + + + + <_> + 0 4 2 4 -1. + <_> + 0 5 2 2 2. + 0 + 9.0224146842956543e-003 + 4.8349138349294662e-002 + -4.5440268516540527e-001 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 9 4 9 4 2. + <_> + 0 8 9 4 2. + 0 + 2.6591160893440247e-001 + 2.9608080163598061e-002 + -6.3526999950408936e-001 + <_> + + <_> + + + + <_> + 2 4 4 5 -1. + <_> + 3 4 2 5 2. + 0 + -3.5959859378635883e-003 + 1.3883949816226959e-001 + -1.4947269856929779e-001 + -1.7941249608993530e+000 + 4 + -1 + <_> + + + <_> + + <_> + + + + <_> + 6 0 9 2 -1. + <_> + 9 3 3 2 3. + 1 + -1.8246339261531830e-001 + 6.5487307310104370e-001 + -4.6831071376800537e-001 + <_> + + <_> + + + + <_> + 2 4 15 3 -1. + <_> + 7 4 5 3 3. + 0 + -6.9158546626567841e-002 + 2.5979688763618469e-001 + -3.5439720749855042e-001 + <_> + + <_> + + + + <_> + 4 2 4 4 -1. + <_> + 5 3 2 4 2. + 1 + -5.1030728965997696e-002 + 6.5509510040283203e-001 + -2.4366210401058197e-001 + <_> + + <_> + + + + <_> + 14 6 4 6 -1. + <_> + 16 6 2 3 2. + <_> + 14 9 2 3 2. + 0 + 6.6160508431494236e-003 + -1.4317570626735687e-001 + 1.9473850727081299e-001 + <_> + + <_> + + + + <_> + 0 6 4 6 -1. + <_> + 0 6 2 3 2. + <_> + 2 9 2 3 2. + 0 + 4.6910191886126995e-003 + -3.7824809551239014e-001 + 1.7687709629535675e-001 + <_> + + <_> + + + + <_> + 16 2 2 10 -1. + <_> + 16 7 2 5 2. + 0 + -2.8749920427799225e-002 + -3.2157620787620544e-001 + 1.8641479313373566e-002 + <_> + + <_> + + + + <_> + 0 2 2 10 -1. + <_> + 0 7 2 5 2. + 0 + 1.0602179827401415e-004 + -4.5742839574813843e-001 + 1.3976849615573883e-001 + <_> + + <_> + + + + <_> + 12 3 3 3 -1. + <_> + 11 4 3 1 3. + 1 + 1.1274269782006741e-002 + -9.0355128049850464e-002 + 2.1887609362602234e-001 + <_> + + <_> + + + + <_> + 6 3 3 3 -1. + <_> + 7 4 1 3 3. + 1 + -2.7582680806517601e-002 + 4.1455930471420288e-001 + -1.3666220009326935e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 2.3641479492653161e-004 + -4.6728670597076416e-001 + 1.1781200021505356e-001 + <_> + + <_> + + + + <_> + 9 2 6 3 -1. + <_> + 11 4 2 3 3. + 1 + -1.1871670186519623e-001 + 3.1791681051254272e-001 + -1.6469870507717133e-001 + <_> + + <_> + + + + <_> + 12 0 2 9 -1. + <_> + 9 3 2 3 3. + 1 + 1.9392369687557220e-001 + 5.0983601249754429e-003 + -8.0679917335510254e-001 + <_> + + <_> + + + + <_> + 6 0 9 2 -1. + <_> + 9 3 3 2 3. + 1 + -1.8230450153350830e-001 + -3.8811311125755310e-001 + 1.5172429382801056e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 0 4 18 4 3. + 0 + -2.5526711344718933e-001 + 1.5723639726638794e-001 + -4.0902090072631836e-001 + <_> + + <_> + + + + <_> + 4 4 10 2 -1. + <_> + 4 5 10 1 2. + 0 + 2.4411959573626518e-002 + -1.1094090342521667e-001 + 4.6774199604988098e-001 + <_> + + <_> + + + + <_> + 8 0 2 2 -1. + <_> + 8 0 1 2 2. + 0 + 2.8254329663468525e-005 + -2.1161890029907227e-001 + 2.0330640673637390e-001 + <_> + + <_> + + + + <_> + 5 2 8 4 -1. + <_> + 5 3 8 2 2. + 0 + 2.8164679184556007e-002 + -1.1879099905490875e-001 + 3.5778549313545227e-001 + <_> + + <_> + + + + <_> + 16 8 2 4 -1. + <_> + 16 9 2 2 2. + 0 + -1.2130060233175755e-002 + -6.4840310811996460e-001 + 6.2937177717685699e-002 + <_> + + <_> + + + + <_> + 5 11 6 1 -1. + <_> + 7 11 2 1 3. + 0 + -9.7364839166402817e-003 + -6.3039177656173706e-001 + 5.1388788968324661e-002 + <_> + + <_> + + + + <_> + 0 0 18 6 -1. + <_> + 6 0 6 6 3. + 0 + -1.6935800015926361e-001 + 2.0276680588722229e-001 + -1.8470560014247894e-001 + <_> + + <_> + + + + <_> + 4 0 10 4 -1. + <_> + 4 1 10 2 2. + 0 + 3.0143039301037788e-002 + -1.2960250675678253e-001 + 2.7041170001029968e-001 + <_> + + <_> + + + + <_> + 16 8 2 4 -1. + <_> + 16 9 2 2 2. + 0 + 1.2918629683554173e-002 + 3.7680979818105698e-002 + -4.9257808923721313e-001 + <_> + + <_> + + + + <_> + 3 5 6 2 -1. + <_> + 3 5 3 1 2. + <_> + 6 6 3 1 2. + 0 + -7.4791330844163895e-003 + 3.2607930898666382e-001 + -1.0927549749612808e-001 + <_> + + <_> + + + + <_> + 8 0 3 2 -1. + <_> + 9 0 1 2 3. + 0 + -6.3150310888886452e-003 + -5.7017749547958374e-001 + 5.1293510943651199e-002 + <_> + + <_> + + + + <_> + 0 8 2 4 -1. + <_> + 0 9 2 2 2. + 0 + -5.5133788846433163e-003 + -4.2573130130767822e-001 + 6.7410148680210114e-002 + <_> + + <_> + + + + <_> + 4 0 10 3 -1. + <_> + 4 1 10 1 3. + 0 + -2.5038039311766624e-002 + 3.4961760044097900e-001 + -1.0028000175952911e-001 + <_> + + <_> + + + + <_> + 3 0 2 3 -1. + <_> + 2 1 2 1 3. + 1 + 1.5786489471793175e-002 + 6.5336212515830994e-002 + -4.7719699144363403e-001 + <_> + + <_> + + + + <_> + 9 6 3 1 -1. + <_> + 10 6 1 1 3. + 0 + -2.0188970956951380e-003 + 2.0141409337520599e-001 + -1.3781909644603729e-001 + <_> + + <_> + + + + <_> + 0 3 3 3 -1. + <_> + 0 4 3 1 3. + 0 + 1.5845090150833130e-002 + 4.6465918421745300e-002 + -6.0951578617095947e-001 + <_> + + <_> + + + + <_> + 9 10 2 1 -1. + <_> + 9 10 1 1 2. + 0 + 4.4102370738983154e-003 + 1.5361309982836246e-002 + -6.8296772241592407e-001 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + 5.4094279184937477e-003 + -7.9418838024139404e-002 + 3.7774890661239624e-001 + <_> + + <_> + + + + <_> + 10 9 3 3 -1. + <_> + 11 9 1 3 3. + 0 + -9.1723483055830002e-003 + -5.0129491090774536e-001 + 4.2223211377859116e-002 + <_> + + <_> + + + + <_> + 5 5 2 4 -1. + <_> + 5 5 1 2 2. + <_> + 6 7 1 2 2. + 0 + 5.8078318834304810e-003 + -9.7935520112514496e-002 + 3.0242648720741272e-001 + <_> + + <_> + + + + <_> + 9 10 2 1 -1. + <_> + 9 10 1 1 2. + 0 + 9.6367846708744764e-005 + -1.2192639708518982e-001 + 1.6515390574932098e-001 + <_> + + <_> + + + + <_> + 7 10 4 1 -1. + <_> + 8 10 2 1 2. + 0 + -9.0094821644015610e-005 + 1.8640710413455963e-001 + -1.6429470479488373e-001 + <_> + + <_> + + + + <_> + 5 1 9 4 -1. + <_> + 5 2 9 2 2. + 0 + -4.2277779430150986e-002 + 4.2195519804954529e-001 + -5.8824878185987473e-002 + <_> + + <_> + + + + <_> + 6 3 6 4 -1. + <_> + 6 4 6 2 2. + 0 + -2.1149210631847382e-002 + 2.0251630246639252e-001 + -1.3794210553169250e-001 + <_> + + <_> + + + + <_> + 16 10 2 2 -1. + <_> + 16 11 2 1 2. + 0 + 8.2650636613834649e-005 + -1.9383859634399414e-001 + 1.1907099932432175e-001 + <_> + + <_> + + + + <_> + 7 0 4 2 -1. + <_> + 8 0 2 2 2. + 0 + 8.7700327858328819e-003 + 4.4557921588420868e-002 + -5.6677401065826416e-001 + <_> + + <_> + + + + <_> + 7 0 7 8 -1. + <_> + 7 2 7 4 2. + 0 + 1.1755479872226715e-001 + -4.2800500988960266e-002 + 3.6108881235122681e-001 + <_> + + <_> + + + + <_> + 0 5 2 4 -1. + <_> + 0 6 2 2 2. + 0 + 9.6330074593424797e-003 + 5.1822990179061890e-002 + -5.2042788267135620e-001 + <_> + + <_> + + + + <_> + 13 8 5 3 -1. + <_> + 13 9 5 1 3. + 0 + -2.0586889237165451e-002 + -4.0654578804969788e-001 + 2.5355400517582893e-002 + <_> + + <_> + + + + <_> + 5 3 5 3 -1. + <_> + 4 4 5 1 3. + 1 + -2.6531819254159927e-002 + 3.0200049281120300e-001 + -7.8816160559654236e-002 + <_> + + <_> + + + + <_> + 10 6 2 4 -1. + <_> + 11 6 1 2 2. + <_> + 10 8 1 2 2. + 0 + 1.0697710327804089e-002 + -3.5472430288791656e-002 + 2.2002260386943817e-001 + <_> + + <_> + + + + <_> + 0 8 5 3 -1. + <_> + 0 9 5 1 3. + 0 + 2.2925930097699165e-002 + 3.5583890974521637e-002 + -6.5233951807022095e-001 + <_> + + <_> + + + + <_> + 15 0 2 2 -1. + <_> + 15 0 1 2 2. + 1 + -1.6979500651359558e-002 + -3.5206571221351624e-001 + 2.8009910136461258e-002 + <_> + + <_> + + + + <_> + 3 0 2 2 -1. + <_> + 3 0 2 1 2. + 1 + 1.8478220328688622e-002 + 4.4543039053678513e-002 + -5.0304412841796875e-001 + <_> + + <_> + + + + <_> + 10 6 2 4 -1. + <_> + 11 6 1 2 2. + <_> + 10 8 1 2 2. + 0 + -4.4793421402573586e-003 + 2.5836798548698425e-001 + -4.2940050363540649e-002 + <_> + + <_> + + + + <_> + 6 6 2 4 -1. + <_> + 6 6 1 2 2. + <_> + 7 8 1 2 2. + 0 + 5.6482921354472637e-003 + -8.1515468657016754e-002 + 2.7649441361427307e-001 + <_> + + <_> + + + + <_> + 10 9 3 3 -1. + <_> + 11 9 1 3 3. + 0 + 7.8102410770952702e-003 + 3.8798350840806961e-002 + -4.4269979000091553e-001 + <_> + + <_> + + + + <_> + 5 9 3 3 -1. + <_> + 6 9 1 3 3. + 0 + -9.2882793396711349e-003 + -5.6610691547393799e-001 + 3.7403721362352371e-002 + <_> + + <_> + + + + <_> + 11 11 2 1 -1. + <_> + 11 11 1 1 2. + 0 + -9.3019756604917347e-005 + 1.2570169568061829e-001 + -1.2166970223188400e-001 + <_> + + <_> + + + + <_> + 0 1 4 11 -1. + <_> + 2 1 2 11 2. + 0 + 1.2011100351810455e-001 + -2.8434859588742256e-002 + 7.4229037761688232e-001 + -1.7087210416793823e+000 + 5 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.5502790957689285e-002 + 7.6810652017593384e-001 + -3.4562450647354126e-001 + <_> + + <_> + + + + <_> + 6 1 10 9 -1. + <_> + 6 4 10 3 3. + 0 + -2.0711760222911835e-001 + 3.3520048856735229e-001 + -3.5342261195182800e-001 + <_> + + <_> + + + + <_> + 5 3 3 3 -1. + <_> + 6 4 1 3 3. + 1 + -3.8090940564870834e-002 + 6.4589887857437134e-001 + -1.9888919591903687e-001 + <_> + + <_> + + + + <_> + 14 5 4 3 -1. + <_> + 14 5 2 3 2. + 1 + -1.1236749589443207e-002 + 1.9605120643973351e-002 + -1.3818189501762390e-001 + <_> + + <_> + + + + <_> + 1 4 2 5 -1. + <_> + 2 4 1 5 2. + 0 + -4.5111398212611675e-003 + 2.2876060009002686e-001 + -3.1510901451110840e-001 + <_> + + <_> + + + + <_> + 9 6 3 1 -1. + <_> + 10 6 1 1 3. + 0 + -1.9242960261180997e-003 + 2.1156929433345795e-001 + -1.3428880274295807e-001 + <_> + + <_> + + + + <_> + 0 6 7 6 -1. + <_> + 0 9 7 3 2. + 0 + 4.1934859007596970e-002 + -4.9654480814933777e-001 + 1.0631070286035538e-001 + <_> + + <_> + + + + <_> + 9 6 3 1 -1. + <_> + 10 6 1 1 3. + 0 + 3.3527929335832596e-003 + -7.7351443469524384e-002 + 3.3729350566864014e-001 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + 5.6215040385723114e-003 + -8.1691898405551910e-002 + 4.6233668923377991e-001 + <_> + + <_> + + + + <_> + 3 5 12 6 -1. + <_> + 7 5 4 6 3. + 0 + -2.0378379151225090e-002 + 1.3168209791183472e-001 + -3.5178178548812866e-001 + <_> + + <_> + + + + <_> + 5 9 8 3 -1. + <_> + 7 9 4 3 2. + 0 + -3.2714441418647766e-002 + -6.3405597209930420e-001 + 7.7019467949867249e-002 + <_> + + <_> + + + + <_> + 4 0 10 3 -1. + <_> + 4 0 5 3 2. + 0 + 1.9768450409173965e-002 + -2.1647900342941284e-001 + 1.9565519690513611e-001 + <_> + + <_> + + + + <_> + 3 10 12 2 -1. + <_> + 3 11 12 1 2. + 0 + 2.9163479339331388e-003 + -3.5658559203147888e-001 + 9.7441449761390686e-002 + <_> + + <_> + + + + <_> + 12 4 2 3 -1. + <_> + 11 5 2 1 3. + 1 + -1.1110129766166210e-002 + 1.6842029988765717e-001 + -1.1107269674539566e-001 + <_> + + <_> + + + + <_> + 4 4 10 2 -1. + <_> + 4 5 10 1 2. + 0 + 2.0324539393186569e-002 + -9.7157396376132965e-002 + 3.7280368804931641e-001 + <_> + + <_> + + + + <_> + 12 4 2 3 -1. + <_> + 11 5 2 1 3. + 1 + -4.3062889017164707e-003 + 3.4338738769292831e-002 + -3.7133701145648956e-002 + <_> + + <_> + + + + <_> + 6 4 3 2 -1. + <_> + 7 5 1 2 3. + 1 + -2.1981669589877129e-002 + 3.8905361294746399e-001 + -1.0749849677085876e-001 + <_> + + <_> + + + + <_> + 15 9 3 3 -1. + <_> + 15 10 3 1 3. + 0 + 1.0463249869644642e-002 + 5.8108348399400711e-002 + -4.9651509523391724e-001 + <_> + + <_> + + + + <_> + 0 0 2 12 -1. + <_> + 0 6 2 6 2. + 0 + -3.6034088581800461e-002 + -4.9659618735313416e-001 + 6.0606569051742554e-002 + <_> + + <_> + + + + <_> + 8 9 6 3 -1. + <_> + 10 9 2 3 3. + 0 + -2.8891820460557938e-002 + -5.7386201620101929e-001 + 3.3857319504022598e-002 + <_> + + <_> + + + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + 0 + 1.1050649918615818e-002 + 4.5335989445447922e-002 + -5.9945368766784668e-001 + <_> + + <_> + + + + <_> + 14 9 4 3 -1. + <_> + 14 10 4 1 3. + 0 + -1.1056279763579369e-002 + -4.3665930628776550e-001 + 4.1093189269304276e-002 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -1.7272779718041420e-002 + 1.7343489825725555e-001 + -1.7528730630874634e-001 + <_> + + <_> + + + + <_> + 4 0 10 4 -1. + <_> + 4 1 10 2 2. + 0 + -3.6496959626674652e-002 + 3.9858031272888184e-001 + -8.1219650804996490e-002 + <_> + + <_> + + + + <_> + 0 9 4 3 -1. + <_> + 0 10 4 1 3. + 0 + -8.0351969227194786e-003 + -5.2099347114562988e-001 + 6.8034321069717407e-002 + <_> + + <_> + + + + <_> + 6 0 7 4 -1. + <_> + 6 1 7 2 2. + 0 + 3.9475150406360626e-002 + -9.3318670988082886e-002 + 3.1671538949012756e-001 + <_> + + <_> + + + + <_> + 4 0 4 3 -1. + <_> + 5 0 2 3 2. + 0 + 9.7668059170246124e-003 + 6.1611980199813843e-002 + -4.7003281116485596e-001 + <_> + + <_> + + + + <_> + 10 3 2 3 -1. + <_> + 10 4 2 1 3. + 0 + 1.4267800375819206e-002 + -4.1417431086301804e-002 + 3.2682031393051147e-001 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 5 6 3 1 3. + 1 + -1.4627629891037941e-002 + 2.5459268689155579e-001 + -9.2211320996284485e-002 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -3.7443440407514572e-002 + 2.1452540159225464e-001 + -1.1371590197086334e-001 + <_> + + <_> + + + + <_> + 4 0 4 3 -1. + <_> + 5 0 2 3 2. + 0 + -7.8959967941045761e-003 + -4.2572760581970215e-001 + 6.0067750513553619e-002 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 0 11 9 1 2. + 0 + 7.7234968543052673e-002 + 3.8733281195163727e-002 + -5.4066091775894165e-001 + <_> + + <_> + + + + <_> + 0 7 1 4 -1. + <_> + 0 8 1 2 2. + 0 + 5.0929659046232700e-003 + 4.5729279518127441e-002 + -4.5329090952873230e-001 + <_> + + <_> + + + + <_> + 7 2 4 3 -1. + <_> + 7 3 4 1 3. + 0 + 8.4982849657535553e-003 + -1.1133170127868652e-001 + 1.9510190188884735e-001 + <_> + + <_> + + + + <_> + 2 0 11 8 -1. + <_> + 2 2 11 4 2. + 0 + -1.3983149826526642e-001 + 2.7004420757293701e-001 + -1.1368890106678009e-001 + <_> + + <_> + + + + <_> + 4 1 12 11 -1. + <_> + 4 1 6 11 2. + 0 + 2.3544949293136597e-001 + -3.8515809923410416e-002 + 2.3026439547538757e-001 + <_> + + <_> + + + + <_> + 3 11 8 1 -1. + <_> + 5 11 4 1 2. + 0 + 1.0409420356154442e-002 + 4.4020529836416245e-002 + -5.2599149942398071e-001 + <_> + + <_> + + + + <_> + 10 3 2 4 -1. + <_> + 10 4 2 2 2. + 0 + -4.2654508724808693e-003 + 1.0057310014963150e-001 + -1.2344259768724442e-001 + <_> + + <_> + + + + <_> + 6 3 4 4 -1. + <_> + 6 4 4 2 2. + 0 + 1.1060579679906368e-002 + -8.1759817898273468e-002 + 3.6806258559226990e-001 + <_> + + <_> + + + + <_> + 15 2 3 4 -1. + <_> + 15 3 3 2 2. + 0 + -1.7567450180649757e-002 + -3.7257051467895508e-001 + 4.9060110002756119e-002 + <_> + + <_> + + + + <_> + 0 6 2 3 -1. + <_> + 0 7 2 1 3. + 0 + 1.1153019964694977e-002 + 3.1007820740342140e-002 + -6.5017551183700562e-001 + <_> + + <_> + + + + <_> + 15 0 3 3 -1. + <_> + 16 1 1 3 3. + 1 + 1.4512670226395130e-002 + 4.9902249127626419e-002 + -3.2837110757827759e-001 + <_> + + <_> + + + + <_> + 3 0 3 3 -1. + <_> + 2 1 3 1 3. + 1 + -2.2447660565376282e-002 + -4.2730820178985596e-001 + 5.1438558846712112e-002 + <_> + + <_> + + + + <_> + 7 9 8 3 -1. + <_> + 9 9 4 3 2. + 0 + -1.1137849651277065e-004 + 1.0777100175619125e-001 + -1.4144800603389740e-001 + <_> + + <_> + + + + <_> + 6 4 3 5 -1. + <_> + 7 4 1 5 3. + 0 + -6.8043689243495464e-003 + 2.5245690345764160e-001 + -8.8355191051959991e-002 + <_> + + <_> + + + + <_> + 14 8 2 2 -1. + <_> + 15 8 1 1 2. + <_> + 14 9 1 1 2. + 0 + 1.1319419718347490e-004 + -9.0738296508789063e-002 + 1.1057420074939728e-001 + <_> + + <_> + + + + <_> + 2 8 2 2 -1. + <_> + 2 8 1 1 2. + <_> + 3 9 1 1 2. + 0 + 9.8332180641591549e-005 + -1.4923529326915741e-001 + 1.4092969894409180e-001 + <_> + + <_> + + + + <_> + 5 0 8 3 -1. + <_> + 7 0 4 3 2. + 0 + -4.1529871523380280e-002 + -5.3849858045578003e-001 + 3.7263870239257813e-002 + <_> + + <_> + + + + <_> + 2 8 2 2 -1. + <_> + 2 8 1 1 2. + <_> + 3 9 1 1 2. + 0 + -8.4064602560829371e-005 + 1.7529909312725067e-001 + -1.1037810146808624e-001 + <_> + + <_> + + + + <_> + 3 7 15 4 -1. + <_> + 8 7 5 4 3. + 0 + -6.0910630971193314e-002 + 6.7305542528629303e-002 + -5.1418140530586243e-002 + <_> + + <_> + + + + <_> + 0 0 14 12 -1. + <_> + 7 0 7 12 2. + 0 + 2.8795659542083740e-001 + -4.7617539763450623e-002 + 4.4013059139251709e-001 + <_> + + <_> + + + + <_> + 12 1 4 6 -1. + <_> + 14 1 2 3 2. + <_> + 12 4 2 3 2. + 0 + 6.4567220397293568e-003 + -1.1678449809551239e-001 + 1.9663040339946747e-001 + <_> + + <_> + + + + <_> + 1 1 14 4 -1. + <_> + 1 2 14 2 2. + 0 + 3.3024981617927551e-002 + -1.1936070024967194e-001 + 2.1602100133895874e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.5381961166858673e-002 + -3.8685059547424316e-001 + 5.3844269365072250e-002 + <_> + + <_> + + + + <_> + 0 3 3 3 -1. + <_> + 0 4 3 1 3. + 0 + -2.0128320902585983e-002 + -6.3146728277206421e-001 + 3.5852450877428055e-002 + <_> + + <_> + + + + <_> + 5 2 9 3 -1. + <_> + 5 3 9 1 3. + 0 + -2.9262129217386246e-002 + 3.1658959388732910e-001 + -7.7322661876678467e-002 + <_> + + <_> + + + + <_> + 6 0 2 3 -1. + <_> + 5 1 2 1 3. + 1 + -2.1860150620341301e-002 + -5.4143399000167847e-001 + 3.9601378142833710e-002 + <_> + + <_> + + + + <_> + 7 5 4 4 -1. + <_> + 8 5 2 4 2. + 0 + -7.7890069223940372e-003 + 1.6942089796066284e-001 + -1.2422429770231247e-001 + <_> + + <_> + + + + <_> + 3 9 8 3 -1. + <_> + 5 9 4 3 2. + 0 + -3.8938779383897781e-002 + -5.5230420827865601e-001 + 3.6004111170768738e-002 + <_> + + <_> + + + + <_> + 8 9 6 3 -1. + <_> + 10 9 2 3 3. + 0 + 2.9549999162554741e-002 + 1.2396270409226418e-002 + -4.6334400773048401e-001 + <_> + + <_> + + + + <_> + 7 6 3 1 -1. + <_> + 8 6 1 1 3. + 0 + 5.7805092073976994e-003 + -4.6647120267152786e-002 + 4.0929031372070313e-001 + <_> + + <_> + + + + <_> + 8 9 6 3 -1. + <_> + 10 9 2 3 3. + 0 + -1.6484359279274940e-002 + -1.6388489305973053e-001 + 3.5984411835670471e-002 + <_> + + <_> + + + + <_> + 4 10 2 1 -1. + <_> + 5 10 1 1 2. + 0 + -7.8519893577322364e-005 + 1.3505099713802338e-001 + -1.4988400042057037e-001 + <_> + + <_> + + + + <_> + 14 0 4 4 -1. + <_> + 13 1 4 2 2. + 1 + 5.7466499507427216e-002 + -1.0657619684934616e-002 + 2.4209600687026978e-001 + <_> + + <_> + + + + <_> + 4 0 4 4 -1. + <_> + 5 1 2 4 2. + 1 + -4.9877569079399109e-002 + 4.3212598562240601e-001 + -3.9752040058374405e-002 + -1.6544970273971558e+000 + 6 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.3002170249819756e-002 + -3.5921901464462280e-001 + 7.2445052862167358e-001 + <_> + + <_> + + + + <_> + 6 4 11 8 -1. + <_> + 6 8 11 4 2. + 0 + 2.8081539273262024e-001 + -3.1760689616203308e-001 + 2.8313899040222168e-001 + <_> + + <_> + + + + <_> + 0 4 16 8 -1. + <_> + 4 4 8 8 2. + 0 + -1.0230190306901932e-001 + 2.7121749520301819e-001 + -4.0805050730705261e-001 + <_> + + <_> + + + + <_> + 14 2 1 9 -1. + <_> + 14 5 1 3 3. + 0 + -7.0124780759215355e-003 + 9.5718100666999817e-002 + -1.6140650212764740e-001 + <_> + + <_> + + + + <_> + 0 6 15 2 -1. + <_> + 5 6 5 2 3. + 0 + 2.9238969087600708e-001 + -2.9914049082435668e-004 + -1.5149759521484375e+003 + <_> + + <_> + + + + <_> + 10 4 3 4 -1. + <_> + 9 5 3 2 2. + 1 + -2.8283270075917244e-002 + 2.6549229025840759e-001 + -1.3133880496025085e-001 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + 3.6253510043025017e-003 + -2.3768079280853271e-001 + 4.5994341373443604e-001 + <_> + + <_> + + + + <_> + 10 1 1 6 -1. + <_> + 8 3 1 2 3. + 1 + -2.9781410470604897e-002 + 2.1161870658397675e-001 + -1.3860809616744518e-002 + <_> + + <_> + + + + <_> + 3 2 1 9 -1. + <_> + 3 5 1 3 3. + 0 + -1.6370929777622223e-002 + 1.9874550402164459e-001 + -3.2648208737373352e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 6.4193690195679665e-003 + -3.6268979310989380e-001 + 1.1069930344820023e-001 + <_> + + <_> + + + + <_> + 9 1 6 2 -1. + <_> + 11 3 2 2 3. + 1 + -5.7248339056968689e-002 + 1.9361220300197601e-001 + -2.6778540015220642e-001 + <_> + + <_> + + + + <_> + 11 5 3 3 -1. + <_> + 12 5 1 3 3. + 0 + 8.4205381572246552e-003 + -1.3904230296611786e-001 + 2.9838430881500244e-001 + <_> + + <_> + + + + <_> + 4 5 3 3 -1. + <_> + 5 5 1 3 3. + 0 + -5.7426397688686848e-003 + 3.2052099704742432e-001 + -1.0433880239725113e-001 + <_> + + <_> + + + + <_> + 9 6 4 1 -1. + <_> + 10 6 2 1 2. + 0 + -3.6206389777362347e-003 + 1.6167849302291870e-001 + -6.5803676843643188e-002 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -1.8714519217610359e-002 + 1.9818380475044250e-001 + -1.6230210661888123e-001 + <_> + + <_> + + + + <_> + 8 0 6 3 -1. + <_> + 10 0 2 3 3. + 0 + -4.3710019439458847e-002 + -7.4743181467056274e-001 + 4.9251399934291840e-002 + <_> + + <_> + + + + <_> + 5 0 6 6 -1. + <_> + 5 2 6 2 3. + 0 + -7.1742817759513855e-002 + 4.3014928698539734e-001 + -8.6288601160049438e-002 + <_> + + <_> + + + + <_> + 8 0 6 4 -1. + <_> + 10 0 2 4 3. + 0 + -3.6524080205708742e-003 + 1.3674829900264740e-001 + -1.4051650464534760e-001 + <_> + + <_> + + + + <_> + 5 6 4 1 -1. + <_> + 6 6 2 1 2. + 0 + -3.2031999435275793e-003 + 3.3417999744415283e-001 + -1.0332349687814713e-001 + <_> + + <_> + + + + <_> + 8 0 6 3 -1. + <_> + 10 0 2 3 3. + 0 + -2.8293890878558159e-002 + -3.2057279348373413e-001 + 4.5155089348554611e-002 + <_> + + <_> + + + + <_> + 4 0 6 4 -1. + <_> + 6 0 2 4 3. + 0 + -2.3787179961800575e-002 + -4.5069369673728943e-001 + 6.9767661392688751e-002 + <_> + + <_> + + + + <_> + 9 10 6 2 -1. + <_> + 11 10 2 2 3. + 0 + -3.1126540154218674e-002 + -7.7986258268356323e-001 + 1.2120390310883522e-002 + <_> + + <_> + + + + <_> + 3 10 6 2 -1. + <_> + 5 10 2 2 3. + 0 + -1.9434019923210144e-002 + -6.2219220399856567e-001 + 3.9394930005073547e-002 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 6 1 6 1 3. + 0 + -2.0646529272198677e-002 + 3.6222419142723083e-001 + -8.2135513424873352e-002 + <_> + + <_> + + + + <_> + 4 0 7 3 -1. + <_> + 4 1 7 1 3. + 0 + 1.6532849520444870e-002 + -1.1575960367918015e-001 + 2.7401360869407654e-001 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 8 9 2 3 2. + 0 + -9.4688721001148224e-003 + -6.1177402734756470e-001 + 4.4638238847255707e-002 + <_> + + <_> + + + + <_> + 3 9 1 2 -1. + <_> + 3 10 1 1 2. + 0 + 1.5371610061265528e-004 + -2.5191861391067505e-001 + 9.6505373716354370e-002 + <_> + + <_> + + + + <_> + 2 3 16 9 -1. + <_> + 2 3 8 9 2. + 0 + 2.5918158888816833e-001 + -4.7843091189861298e-002 + 2.3324379324913025e-001 + <_> + + <_> + + + + <_> + 6 4 6 6 -1. + <_> + 8 4 2 6 3. + 0 + -2.5841780006885529e-002 + 1.7269480228424072e-001 + -1.4205309748649597e-001 + <_> + + <_> + + + + <_> + 6 0 12 11 -1. + <_> + 6 0 6 11 2. + 0 + -3.9961761236190796e-001 + -2.4384410679340363e-001 + 1.7345370724797249e-002 + <_> + + <_> + + + + <_> + 0 0 14 12 -1. + <_> + 7 0 7 12 2. + 0 + 2.1105909347534180e-001 + -6.1212010681629181e-002 + 4.1000100970268250e-001 + <_> + + <_> + + + + <_> + 16 3 2 4 -1. + <_> + 16 4 2 2 2. + 0 + -1.6058450564742088e-002 + -6.0403078794479370e-001 + 5.7624060660600662e-002 + <_> + + <_> + + + + <_> + 1 3 6 4 -1. + <_> + 1 3 3 2 2. + <_> + 4 5 3 2 2. + 0 + -1.6918450593948364e-002 + 1.9921250641345978e-001 + -1.2271139770746231e-001 + <_> + + <_> + + + + <_> + 15 2 3 4 -1. + <_> + 15 3 3 2 2. + 0 + 1.4193099923431873e-002 + 5.4869029670953751e-002 + -3.7617999315261841e-001 + <_> + + <_> + + + + <_> + 0 2 3 4 -1. + <_> + 0 3 3 2 2. + 0 + -2.4758260697126389e-002 + -7.1052777767181396e-001 + 3.3381890505552292e-002 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 9 0 9 6 2. + <_> + 0 6 9 6 2. + 0 + -3.8228559494018555e-001 + -6.2711232900619507e-001 + 3.2499440014362335e-002 + <_> + + <_> + + + + <_> + 6 3 2 5 -1. + <_> + 6 3 1 5 2. + 1 + -2.6878060773015022e-002 + 3.0796620249748230e-001 + -7.3240749537944794e-002 + <_> + + <_> + + + + <_> + 14 0 3 2 -1. + <_> + 15 1 1 2 3. + 1 + 1.3228660449385643e-002 + 6.9501012563705444e-002 + -4.0926951169967651e-001 + <_> + + <_> + + + + <_> + 6 2 6 3 -1. + <_> + 6 3 6 1 3. + 0 + 2.9470060020685196e-002 + -8.1747382879257202e-002 + 2.9929721355438232e-001 + <_> + + <_> + + + + <_> + 4 0 10 1 -1. + <_> + 4 0 5 1 2. + 0 + 6.3013629987835884e-003 + -1.4912730455398560e-001 + 1.6093279421329498e-001 + <_> + + <_> + + + + <_> + 4 0 2 3 -1. + <_> + 3 1 2 1 3. + 1 + -2.0139260217547417e-002 + -5.0678992271423340e-001 + 4.0891159325838089e-002 + <_> + + <_> + + + + <_> + 3 2 13 4 -1. + <_> + 3 3 13 2 2. + 0 + -4.9374740570783615e-002 + 2.5256040692329407e-001 + -8.5726343095302582e-002 + <_> + + <_> + + + + <_> + 5 2 3 4 -1. + <_> + 6 3 1 4 3. + 1 + 1.9452260807156563e-002 + -7.3688283562660217e-002 + 3.0949079990386963e-001 + <_> + + <_> + + + + <_> + 13 4 4 7 -1. + <_> + 13 4 2 7 2. + 0 + -3.2352220267057419e-002 + 2.1833789348602295e-001 + -6.8243682384490967e-002 + <_> + + <_> + + + + <_> + 0 8 7 2 -1. + <_> + 0 9 7 1 2. + 0 + 1.5072959649842232e-004 + -3.2836580276489258e-001 + 6.6381722688674927e-002 + <_> + + <_> + + + + <_> + 13 6 2 6 -1. + <_> + 13 8 2 2 3. + 0 + -6.1889938078820705e-003 + 1.3249829411506653e-001 + -7.4239932000637054e-002 + <_> + + <_> + + + + <_> + 3 6 2 6 -1. + <_> + 3 8 2 2 3. + 0 + 6.3619641587138176e-003 + -1.2829330563545227e-001 + 1.5975730121135712e-001 + <_> + + <_> + + + + <_> + 2 5 16 4 -1. + <_> + 10 5 8 2 2. + <_> + 2 7 8 2 2. + 0 + 1.2205489724874496e-001 + 3.1172819435596466e-002 + -5.6808418035507202e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 10 9 1 2. + <_> + 9 11 9 1 2. + 0 + 2.7129599824547768e-002 + 3.4967660903930664e-002 + -5.5332547426223755e-001 + <_> + + <_> + + + + <_> + 14 10 2 2 -1. + <_> + 15 10 1 1 2. + <_> + 14 11 1 1 2. + 0 + 1.5683429955970496e-004 + -1.0362909734249115e-001 + 1.1349440366029739e-001 + <_> + + <_> + + + + <_> + 2 4 2 7 -1. + <_> + 3 4 1 7 2. + 0 + -5.7905660942196846e-003 + 1.3157980144023895e-001 + -1.3856770098209381e-001 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + 1.8190830014646053e-003 + -7.3361650109291077e-002 + 1.6932620108127594e-001 + <_> + + <_> + + + + <_> + 3 0 4 4 -1. + <_> + 4 0 2 4 2. + 0 + -1.8002679571509361e-002 + -5.8490717411041260e-001 + 3.2903790473937988e-002 + <_> + + <_> + + + + <_> + 7 0 4 4 -1. + <_> + 7 1 4 2 2. + 0 + -1.8526639789342880e-002 + 3.2005688548088074e-001 + -6.2653139233589172e-002 + <_> + + <_> + + + + <_> + 6 1 5 3 -1. + <_> + 6 2 5 1 3. + 0 + 2.0345499739050865e-002 + -8.0804906785488129e-002 + 2.5780761241912842e-001 + <_> + + <_> + + + + <_> + 16 5 2 3 -1. + <_> + 16 6 2 1 3. + 0 + -1.6274280846118927e-002 + -5.7635939121246338e-001 + 2.5872429832816124e-002 + <_> + + <_> + + + + <_> + 0 5 2 3 -1. + <_> + 0 6 2 1 3. + 0 + 8.5418839007616043e-003 + 3.3990539610385895e-002 + -4.9847429990768433e-001 + <_> + + <_> + + + + <_> + 6 0 6 2 -1. + <_> + 8 0 2 2 3. + 0 + -2.0960260182619095e-002 + -4.7946169972419739e-001 + 3.4324679523706436e-002 + <_> + + <_> + + + + <_> + 5 3 3 3 -1. + <_> + 6 4 1 3 3. + 1 + 1.5699770301580429e-002 + -6.5722920000553131e-002 + 2.9684039950370789e-001 + <_> + + <_> + + + + <_> + 12 6 2 4 -1. + <_> + 12 7 2 2 2. + 0 + 1.7905479762703180e-003 + -6.5733380615711212e-002 + 9.4904549419879913e-002 + <_> + + <_> + + + + <_> + 0 3 1 4 -1. + <_> + 0 4 1 2 2. + 0 + 5.4030250757932663e-003 + 3.9892349392175674e-002 + -4.1660529375076294e-001 + <_> + + <_> + + + + <_> + 16 5 2 4 -1. + <_> + 16 5 1 4 2. + 0 + -4.7734947875142097e-003 + 2.7001398801803589e-001 + -1.5953589975833893e-001 + <_> + + <_> + + + + <_> + 4 6 2 4 -1. + <_> + 4 7 2 2 2. + 0 + 2.9232229571789503e-003 + -1.0599870234727859e-001 + 1.8253239989280701e-001 + <_> + + <_> + + + + <_> + 16 5 2 4 -1. + <_> + 16 5 1 4 2. + 0 + 3.9620529860258102e-003 + -5.7123549282550812e-002 + 2.0644719898700714e-001 + <_> + + <_> + + + + <_> + 4 8 4 4 -1. + <_> + 5 8 2 4 2. + 0 + 1.2356759980320930e-002 + 4.0755268186330795e-002 + -4.4443848729133606e-001 + <_> + + <_> + + + + <_> + 16 5 2 4 -1. + <_> + 16 5 1 4 2. + 0 + -1.2156190350651741e-002 + 1.8296989798545837e-001 + -3.4999419003725052e-002 + <_> + + <_> + + + + <_> + 0 5 2 4 -1. + <_> + 1 5 1 4 2. + 0 + -3.7678279913961887e-003 + 1.4462789893150330e-001 + -1.2491580098867416e-001 + <_> + + <_> + + + + <_> + 15 0 3 2 -1. + <_> + 15 0 3 1 2. + 1 + 1.9276840612292290e-002 + -6.2840022146701813e-002 + 1.9151060283184052e-001 + <_> + + <_> + + + + <_> + 2 0 2 2 -1. + <_> + 2 0 1 2 2. + 1 + -5.4216519929468632e-003 + 2.1568669378757477e-001 + -8.9786492288112640e-002 + <_> + + <_> + + + + <_> + 16 6 2 4 -1. + <_> + 16 7 2 2 2. + 0 + -2.0339300855994225e-002 + -5.9200441837310791e-001 + 1.6503969207406044e-002 + <_> + + <_> + + + + <_> + 0 6 2 4 -1. + <_> + 0 7 2 2 2. + 0 + 1.1275880038738251e-002 + 3.1583100557327271e-002 + -5.1892447471618652e-001 + <_> + + <_> + + + + <_> + 14 0 3 2 -1. + <_> + 15 0 1 2 3. + 0 + -9.7946176538243890e-005 + 1.4691540598869324e-001 + -1.6081510484218597e-001 + <_> + + <_> + + + + <_> + 1 0 3 2 -1. + <_> + 2 0 1 2 3. + 0 + -1.6277630347758532e-003 + 1.8870960175991058e-001 + -9.3803331255912781e-002 + <_> + + <_> + + + + <_> + 16 0 2 12 -1. + <_> + 16 6 2 6 2. + 0 + 8.7238460779190063e-002 + 5.5480118840932846e-002 + -2.6414340734481812e-001 + -1.7957290410995483e+000 + 7 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.7292431592941284e-002 + 6.6972970962524414e-001 + -3.2153728604316711e-001 + <_> + + <_> + + + + <_> + 0 2 18 6 -1. + <_> + 6 4 6 2 9. + 0 + -5.4918038845062256e-001 + 4.3484970927238464e-001 + -2.9871198534965515e-001 + <_> + + <_> + + + + <_> + 0 5 4 3 -1. + <_> + 2 5 2 3 2. + 0 + -1.2416520155966282e-002 + 2.6745811104774475e-001 + -3.9999490976333618e-001 + <_> + + <_> + + + + <_> + 2 10 14 2 -1. + <_> + 2 11 14 1 2. + 0 + 7.2453971952199936e-003 + -4.2438769340515137e-001 + 2.0234079658985138e-001 + <_> + + <_> + + + + <_> + 0 4 16 8 -1. + <_> + 0 8 16 4 2. + 0 + 3.6846119165420532e-001 + -3.5139828920364380e-001 + 2.0377729833126068e-001 + <_> + + <_> + + + + <_> + 11 6 4 2 -1. + <_> + 12 6 2 2 2. + 0 + 1.1723440140485764e-002 + -1.8664820492267609e-001 + 3.3893829584121704e-001 + <_> + + <_> + + + + <_> + 5 1 8 1 -1. + <_> + 9 1 4 1 2. + 0 + -5.2209510467946529e-003 + 2.1541909873485565e-001 + -2.0584990084171295e-001 + <_> + + <_> + + + + <_> + 3 1 15 6 -1. + <_> + 8 3 5 2 9. + 0 + 5.2216267585754395e-001 + -7.7104539377614856e-004 + 5.6350582838058472e-001 + <_> + + <_> + + + + <_> + 2 8 2 4 -1. + <_> + 2 9 2 2 2. + 0 + 1.0613870108500123e-004 + -2.3261800408363342e-001 + 1.3210240006446838e-001 + <_> + + <_> + + + + <_> + 14 3 3 1 -1. + <_> + 15 4 1 1 3. + 1 + -1.8034329637885094e-002 + -6.0396319627761841e-001 + 3.4430969506502151e-002 + <_> + + <_> + + + + <_> + 0 4 10 2 -1. + <_> + 0 4 5 1 2. + <_> + 5 5 5 1 2. + 0 + -2.3259000852704048e-002 + 3.5783469676971436e-001 + -8.5259757936000824e-002 + <_> + + <_> + + + + <_> + 9 4 3 2 -1. + <_> + 9 5 3 1 2. + 0 + 1.0407639667391777e-002 + -5.1958288997411728e-002 + 3.1198269128799438e-001 + <_> + + <_> + + + + <_> + 4 2 1 3 -1. + <_> + 3 3 1 1 3. + 1 + -1.1971450410783291e-002 + -4.9050408601760864e-001 + 5.4528221487998962e-002 + <_> + + <_> + + + + <_> + 10 3 2 4 -1. + <_> + 10 5 2 2 2. + 0 + -3.7426669150590897e-003 + 4.4125020503997803e-002 + -5.3650841116905212e-002 + <_> + + <_> + + + + <_> + 6 3 2 4 -1. + <_> + 6 5 2 2 2. + 0 + 1.8917659297585487e-002 + -8.1747300922870636e-002 + 4.1203048825263977e-001 + <_> + + <_> + + + + <_> + 14 10 1 2 -1. + <_> + 14 11 1 1 2. + 0 + 1.1007690045516938e-004 + -1.3551560044288635e-001 + 8.5857532918453217e-002 + <_> + + <_> + + + + <_> + 0 9 4 3 -1. + <_> + 0 10 4 1 3. + 0 + 1.3918640092015266e-002 + 4.8517379909753799e-002 + -5.8116322755813599e-001 + <_> + + <_> + + + + <_> + 9 5 1 3 -1. + <_> + 8 6 1 1 3. + 1 + -1.0104410350322723e-002 + 1.5834890305995941e-001 + -6.0111179947853088e-002 + <_> + + <_> + + + + <_> + 2 6 6 2 -1. + <_> + 4 6 2 2 3. + 0 + -1.8620710819959641e-002 + 2.7867808938026428e-001 + -1.0338810086250305e-001 + <_> + + <_> + + + + <_> + 15 9 1 2 -1. + <_> + 15 10 1 1 2. + 0 + 5.7289921678602695e-003 + 2.8767310082912445e-002 + -3.4044471383094788e-001 + <_> + + <_> + + + + <_> + 2 9 1 2 -1. + <_> + 2 10 1 1 2. + 0 + 9.1226633230689913e-005 + -2.5967589020729065e-001 + 1.1362390220165253e-001 + <_> + + <_> + + + + <_> + 9 3 2 4 -1. + <_> + 8 4 2 2 2. + 1 + -1.7600089311599731e-002 + 8.0204762518405914e-002 + -6.6199533641338348e-002 + <_> + + <_> + + + + <_> + 6 5 4 6 -1. + <_> + 6 5 2 3 2. + <_> + 8 8 2 3 2. + 0 + 5.6003769859671593e-003 + -1.7382130026817322e-001 + 1.4224979281425476e-001 + <_> + + <_> + + + + <_> + 5 1 8 3 -1. + <_> + 7 1 4 3 2. + 0 + -4.1345998644828796e-002 + -6.0982871055603027e-001 + 3.9992429316043854e-002 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 9 0 9 1 2. + 0 + 3.1171320006251335e-002 + -8.9795216917991638e-002 + 2.6572328805923462e-001 + <_> + + <_> + + + + <_> + 4 0 10 1 -1. + <_> + 4 0 5 1 2. + 0 + 9.2339180409908295e-003 + -1.3240410387516022e-001 + 1.7500220239162445e-001 + <_> + + <_> + + + + <_> + 5 6 3 1 -1. + <_> + 6 6 1 1 3. + 0 + -2.9637310653924942e-003 + 2.7044069766998291e-001 + -8.2514546811580658e-002 + <_> + + <_> + + + + <_> + 13 0 3 12 -1. + <_> + 14 0 1 12 3. + 0 + -1.0435279691591859e-003 + 1.2740360200405121e-001 + -1.4733490347862244e-001 + <_> + + <_> + + + + <_> + 2 0 3 12 -1. + <_> + 3 0 1 12 3. + 0 + -3.6916971206665039e-002 + -5.5704081058502197e-001 + 4.0161561220884323e-002 + <_> + + <_> + + + + <_> + 12 5 3 7 -1. + <_> + 13 5 1 7 3. + 0 + -3.4235499333590269e-003 + 1.6954079270362854e-001 + -1.0382679849863052e-001 + <_> + + <_> + + + + <_> + 3 5 3 7 -1. + <_> + 4 5 1 7 3. + 0 + -3.4884609282016754e-002 + -7.6003962755203247e-001 + 2.8784649446606636e-002 + <_> + + <_> + + + + <_> + 12 3 4 1 -1. + <_> + 13 4 2 1 2. + 1 + -1.4949830074328929e-004 + 5.8567389845848083e-002 + -8.6837686598300934e-002 + <_> + + <_> + + + + <_> + 0 3 2 2 -1. + <_> + 0 4 2 1 2. + 0 + -8.4154512733221054e-003 + -4.5848670601844788e-001 + 4.6183209866285324e-002 + <_> + + <_> + + + + <_> + 12 3 4 1 -1. + <_> + 13 4 2 1 2. + 1 + 2.5011990219354630e-002 + -1.2734670192003250e-002 + 1.5709209442138672e-001 + <_> + + <_> + + + + <_> + 6 3 1 4 -1. + <_> + 5 4 1 2 2. + 1 + -9.9370932730380446e-005 + 9.6763700246810913e-002 + -2.2434939444065094e-001 + <_> + + <_> + + + + <_> + 8 3 5 2 -1. + <_> + 8 4 5 1 2. + 0 + 2.1338040009140968e-002 + -2.7949279174208641e-002 + 4.5690038800239563e-001 + <_> + + <_> + + + + <_> + 6 4 6 5 -1. + <_> + 8 4 2 5 3. + 0 + -1.9381210207939148e-002 + 1.3209809362888336e-001 + -1.5854920446872711e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.7130910456180573e-002 + -4.0985769033432007e-001 + 6.9916889071464539e-002 + <_> + + <_> + + + + <_> + 6 3 3 5 -1. + <_> + 7 4 1 5 3. + 1 + 3.7448350340127945e-002 + -4.7214321792125702e-002 + 4.6269690990447998e-001 + <_> + + <_> + + + + <_> + 14 2 3 3 -1. + <_> + 13 3 3 1 3. + 1 + -1.6145069152116776e-002 + 1.5716019272804260e-001 + -6.5406262874603271e-002 + <_> + + <_> + + + + <_> + 4 2 3 3 -1. + <_> + 5 3 1 3 3. + 1 + 1.3192090205848217e-002 + -9.3616731464862823e-002 + 2.3192650079727173e-001 + <_> + + <_> + + + + <_> + 8 9 3 3 -1. + <_> + 9 9 1 3 3. + 0 + 7.4546551331877708e-003 + 3.3262088894844055e-002 + -4.8058581352233887e-001 + <_> + + <_> + + + + <_> + 7 9 3 3 -1. + <_> + 8 9 1 3 3. + 0 + 6.5358411520719528e-003 + 3.9861779659986496e-002 + -5.2071362733840942e-001 + <_> + + <_> + + + + <_> + 17 4 1 4 -1. + <_> + 17 5 1 2 2. + 0 + -1.1007690045516938e-004 + 1.0615369677543640e-001 + -1.4794890582561493e-001 + <_> + + <_> + + + + <_> + 6 4 6 5 -1. + <_> + 9 4 3 5 2. + 0 + -5.4008360952138901e-002 + 2.6703369617462158e-001 + -7.9568542540073395e-002 + <_> + + <_> + + + + <_> + 2 1 16 11 -1. + <_> + 2 1 8 11 2. + 0 + -2.1774560213088989e-001 + 1.6545580327510834e-001 + -5.5510718375444412e-002 + <_> + + <_> + + + + <_> + 6 0 4 3 -1. + <_> + 7 0 2 3 2. + 0 + 1.2961000204086304e-002 + 3.8905121386051178e-002 + -5.3931367397308350e-001 + <_> + + <_> + + + + <_> + 8 3 2 3 -1. + <_> + 8 4 2 1 3. + 0 + -1.4969130046665668e-002 + 3.0878359079360962e-001 + -7.2156012058258057e-002 + <_> + + <_> + + + + <_> + 0 4 1 4 -1. + <_> + 0 5 1 2 2. + 0 + 5.1595158874988556e-003 + 4.1552640497684479e-002 + -4.4410169124603271e-001 + <_> + + <_> + + + + <_> + 11 11 2 1 -1. + <_> + 11 11 1 1 2. + 0 + -1.0106719855684787e-004 + 1.3232690095901489e-001 + -1.2352719902992249e-001 + <_> + + <_> + + + + <_> + 9 4 4 1 -1. + <_> + 10 5 2 1 2. + 1 + -1.2458950281143188e-002 + 1.4162090420722961e-001 + -1.2240760028362274e-001 + <_> + + <_> + + + + <_> + 7 2 4 3 -1. + <_> + 7 3 4 1 3. + 0 + -1.8788089975714684e-002 + 2.9809600114822388e-001 + -6.1062760651111603e-002 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -2.9027970507740974e-002 + 1.8160690367221832e-001 + -1.0429889708757401e-001 + <_> + + <_> + + + + <_> + 6 1 6 3 -1. + <_> + 6 2 6 1 3. + 0 + -1.2969439849257469e-002 + 2.6630058884620667e-001 + -7.0843391120433807e-002 + <_> + + <_> + + + + <_> + 0 3 16 4 -1. + <_> + 0 4 16 2 2. + 0 + -4.8657860606908798e-002 + 1.8037420511245728e-001 + -1.1353269964456558e-001 + <_> + + <_> + + + + <_> + 11 11 2 1 -1. + <_> + 11 11 1 1 2. + 0 + 1.0443449718877673e-004 + -1.1833500117063522e-001 + 1.7454829812049866e-001 + <_> + + <_> + + + + <_> + 5 11 2 1 -1. + <_> + 6 11 1 1 2. + 0 + -1.3140009832568467e-004 + 1.4330400526523590e-001 + -1.4002929627895355e-001 + <_> + + <_> + + + + <_> + 4 0 14 12 -1. + <_> + 4 0 7 12 2. + 0 + -7.7764278650283813e-001 + -8.1180518865585327e-001 + 4.8811929300427437e-003 + <_> + + <_> + + + + <_> + 0 0 14 12 -1. + <_> + 7 0 7 12 2. + 0 + 3.0272060632705688e-001 + -4.6920161694288254e-002 + 4.6565508842468262e-001 + <_> + + <_> + + + + <_> + 15 7 1 4 -1. + <_> + 15 8 1 2 2. + 0 + 1.2083619832992554e-002 + 1.3714229688048363e-002 + -4.8584228754043579e-001 + <_> + + <_> + + + + <_> + 2 7 1 4 -1. + <_> + 2 8 1 2 2. + 0 + 8.3657556388061494e-005 + -1.4557360112667084e-001 + 1.2107980251312256e-001 + <_> + + <_> + + + + <_> + 1 8 17 4 -1. + <_> + 1 10 17 2 2. + 0 + 1.2459480203688145e-002 + -3.1913518905639648e-001 + 4.5050200074911118e-002 + <_> + + <_> + + + + <_> + 1 8 12 3 -1. + <_> + 5 8 4 3 3. + 0 + -9.6598379313945770e-002 + -4.7412630915641785e-001 + 3.4393358975648880e-002 + <_> + + <_> + + + + <_> + 13 2 4 3 -1. + <_> + 12 3 4 1 3. + 1 + 8.3489827811717987e-003 + -6.4854227006435394e-002 + 1.3588410615921021e-001 + <_> + + <_> + + + + <_> + 5 1 4 3 -1. + <_> + 6 1 2 3 2. + 0 + -9.6687171608209610e-003 + -3.8394901156425476e-001 + 4.5654650777578354e-002 + <_> + + <_> + + + + <_> + 13 2 4 3 -1. + <_> + 12 3 4 1 3. + 1 + -2.0871540531516075e-002 + 1.1647360026836395e-001 + -4.6159781515598297e-002 + <_> + + <_> + + + + <_> + 5 2 3 4 -1. + <_> + 6 3 1 4 3. + 1 + 2.4644650518894196e-002 + -6.0594830662012100e-002 + 2.8827700018882751e-001 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 6 11 6 1 3. + 0 + -1.3068989850580692e-002 + 1.7769919335842133e-001 + -1.0170739889144897e-001 + <_> + + <_> + + + + <_> + 0 5 2 4 -1. + <_> + 0 6 2 2 2. + 0 + 1.0740649886429310e-002 + 3.3637721091508865e-002 + -5.8304959535598755e-001 + <_> + + <_> + + + + <_> + 11 11 2 1 -1. + <_> + 11 11 1 1 2. + 0 + -5.6638391688466072e-003 + -8.2890021800994873e-001 + 1.0463479906320572e-002 + <_> + + <_> + + + + <_> + 5 11 2 1 -1. + <_> + 6 11 1 1 2. + 0 + 1.3703710283152759e-004 + -1.0685860365629196e-001 + 1.6701389849185944e-001 + <_> + + <_> + + + + <_> + 9 10 4 2 -1. + <_> + 10 10 2 2 2. + 0 + 7.2855940088629723e-003 + 2.0125189796090126e-002 + -4.8965498805046082e-001 + <_> + + <_> + + + + <_> + 1 10 2 2 -1. + <_> + 1 10 1 1 2. + <_> + 2 11 1 1 2. + 0 + 1.0730550275184214e-004 + -1.1978050321340561e-001 + 1.2677900493144989e-001 + <_> + + <_> + + + + <_> + 15 10 2 2 -1. + <_> + 16 10 1 1 2. + <_> + 15 11 1 1 2. + 0 + -1.1701670155161992e-004 + 1.2513719499111176e-001 + -8.4742642939090729e-002 + <_> + + <_> + + + + <_> + 1 10 2 2 -1. + <_> + 1 10 1 1 2. + <_> + 2 11 1 1 2. + 0 + -1.0570519953034818e-004 + 1.5671330690383911e-001 + -1.0472840070724487e-001 + <_> + + <_> + + + + <_> + 9 10 4 2 -1. + <_> + 10 10 2 2 2. + 0 + -9.8277851939201355e-003 + -4.2486619949340820e-001 + 1.2776750139892101e-002 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 8 0 2 3 2. + 0 + -1.0262790136039257e-002 + -4.7308981418609619e-001 + 3.1395319849252701e-002 + <_> + + <_> + + + + <_> + 3 6 12 2 -1. + <_> + 7 6 4 2 3. + 0 + -1.1773769743740559e-002 + 7.4253700673580170e-002 + -1.9689300656318665e-001 + <_> + + <_> + + + + <_> + 0 9 2 3 -1. + <_> + 0 10 2 1 3. + 0 + -3.9177751168608665e-003 + -3.1191331148147583e-001 + 4.5671850442886353e-002 + <_> + + <_> + + + + <_> + 5 0 11 2 -1. + <_> + 5 1 11 1 2. + 0 + 2.3346070200204849e-002 + -5.2008550614118576e-002 + 1.7973770201206207e-001 + <_> + + <_> + + + + <_> + 6 0 3 2 -1. + <_> + 6 1 3 1 2. + 0 + -2.2126040421426296e-003 + 1.5479539334774017e-001 + -1.0545700043439865e-001 + <_> + + <_> + + + + <_> + 8 0 10 4 -1. + <_> + 8 1 10 2 2. + 0 + 1.4761550724506378e-001 + 7.4690231122076511e-003 + -8.0544400215148926e-001 + <_> + + <_> + + + + <_> + 0 0 10 4 -1. + <_> + 0 1 10 2 2. + 0 + 7.2484388947486877e-003 + -1.5604910254478455e-001 + 1.2632860243320465e-001 + <_> + + <_> + + + + <_> + 6 0 8 3 -1. + <_> + 6 1 8 1 3. + 0 + -2.1801209077239037e-002 + 2.4090659618377686e-001 + -6.4087331295013428e-002 + <_> + + <_> + + + + <_> + 0 10 3 2 -1. + <_> + 0 11 3 1 2. + 0 + -3.1350140925496817e-003 + -3.7679758667945862e-001 + 4.4631399214267731e-002 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 9 4 9 4 2. + <_> + 0 8 9 4 2. + 0 + 2.9509729146957397e-001 + 1.6203410923480988e-002 + -8.1572759151458740e-001 + <_> + + <_> + + + + <_> + 0 2 18 8 -1. + <_> + 0 4 18 4 2. + 0 + -5.1936417818069458e-001 + -6.4044600725173950e-001 + 1.7519079148769379e-002 + -1.6902129650115967e+000 + 8 + -1 + <_> + + + <_> + + <_> + + + + <_> + 7 4 3 2 -1. + <_> + 7 4 3 1 2. + 1 + -3.4664139151573181e-002 + 6.5977567434310913e-001 + -3.1582540273666382e-001 + <_> + + <_> + + + + <_> + 10 4 7 3 -1. + <_> + 10 5 7 1 3. + 0 + -1.1273490265011787e-002 + 2.3457850515842438e-001 + -1.5769450366497040e-001 + <_> + + <_> + + + + <_> + 5 2 4 4 -1. + <_> + 6 3 2 4 2. + 1 + -4.1530959308147430e-002 + 4.2379489541053772e-001 + -2.8518509864807129e-001 + <_> + + <_> + + + + <_> + 0 4 18 7 -1. + <_> + 6 4 6 7 3. + 0 + -2.0448620617389679e-001 + 1.8061810731887817e-001 + -3.2812160253524780e-001 + <_> + + <_> + + + + <_> + 4 2 3 4 -1. + <_> + 3 3 3 2 2. + 1 + -4.1392319835722446e-003 + 1.4234000444412231e-001 + -3.6734649538993835e-001 + <_> + + <_> + + + + <_> + 3 0 12 8 -1. + <_> + 6 0 6 8 2. + 0 + -1.1119210161268711e-002 + 7.2978653013706207e-002 + -1.3348829746246338e-001 + <_> + + <_> + + + + <_> + 0 8 8 4 -1. + <_> + 0 10 8 2 2. + 0 + 6.3189188949763775e-003 + -5.1101410388946533e-001 + 6.5231300890445709e-002 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + -2.7547220233827829e-003 + 3.2231101393699646e-001 + -7.8560419380664825e-002 + <_> + + <_> + + + + <_> + 4 4 10 2 -1. + <_> + 4 5 10 1 2. + 0 + 1.5909250825643539e-002 + -1.1302089691162109e-001 + 3.5444441437721252e-001 + <_> + + <_> + + + + <_> + 9 3 2 4 -1. + <_> + 8 4 2 2 2. + 1 + -3.4309048205614090e-002 + 1.4863179624080658e-001 + -5.9663631021976471e-002 + <_> + + <_> + + + + <_> + 7 4 1 2 -1. + <_> + 7 4 1 1 2. + 1 + 9.5747098384890705e-005 + -2.0395369827747345e-001 + 2.1945419907569885e-001 + <_> + + <_> + + + + <_> + 2 0 16 12 -1. + <_> + 2 6 16 6 2. + 0 + 1.2961600720882416e-001 + -2.5850468873977661e-001 + 1.4311419427394867e-001 + <_> + + <_> + + + + <_> + 9 5 3 1 -1. + <_> + 10 6 1 1 3. + 1 + -3.7369730416685343e-003 + 1.5821619331836700e-001 + -2.3684109747409821e-001 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 6 0 3 3 2. + 0 + 5.9748939238488674e-003 + -2.0868189632892609e-001 + 1.5647380053997040e-001 + <_> + + <_> + + + + <_> + 0 2 10 4 -1. + <_> + 0 2 5 2 2. + <_> + 5 4 5 2 2. + 0 + -6.5518669784069061e-002 + 2.7740669250488281e-001 + -9.4154737889766693e-002 + <_> + + <_> + + + + <_> + 9 0 4 4 -1. + <_> + 10 0 2 4 2. + 0 + -1.5643499791622162e-002 + -6.5276598930358887e-001 + 5.8415610343217850e-002 + <_> + + <_> + + + + <_> + 3 5 4 2 -1. + <_> + 3 5 2 1 2. + <_> + 5 6 2 1 2. + 0 + -5.3621069528162479e-003 + 3.0472820997238159e-001 + -9.0583823621273041e-002 + <_> + + <_> + + + + <_> + 15 1 3 2 -1. + <_> + 16 2 1 2 3. + 1 + 8.4986742585897446e-003 + 9.4854839146137238e-002 + -3.7641200423240662e-001 + <_> + + <_> + + + + <_> + 3 1 2 3 -1. + <_> + 2 2 2 1 3. + 1 + -2.2054940462112427e-002 + -5.6978279352188110e-001 + 4.1174288839101791e-002 + <_> + + <_> + + + + <_> + 9 10 4 2 -1. + <_> + 10 10 2 2 2. + 0 + 8.9925974607467651e-003 + 1.1008080095052719e-002 + -6.8029582500457764e-001 + <_> + + <_> + + + + <_> + 7 6 2 2 -1. + <_> + 7 6 1 1 2. + <_> + 8 7 1 1 2. + 0 + 2.6960580144077539e-003 + -8.6102768778800964e-002 + 2.7503418922424316e-001 + <_> + + <_> + + + + <_> + 9 10 4 2 -1. + <_> + 10 10 2 2 2. + 0 + -7.4433060362935066e-003 + -4.6109339594841003e-001 + 2.5336729362607002e-002 + <_> + + <_> + + + + <_> + 0 6 2 6 -1. + <_> + 0 6 1 3 2. + <_> + 1 9 1 3 2. + 0 + 1.1906769941560924e-004 + -2.0586380362510681e-001 + 1.0493390262126923e-001 + <_> + + <_> + + + + <_> + 17 4 1 8 -1. + <_> + 17 8 1 4 2. + 0 + 3.6572828888893127e-002 + 4.1884351521730423e-002 + -2.6558640599250793e-001 + <_> + + <_> + + + + <_> + 0 4 1 8 -1. + <_> + 0 8 1 4 2. + 0 + 1.0328489588573575e-003 + -2.8002429008483887e-001 + 8.4565736353397369e-002 + <_> + + <_> + + + + <_> + 11 4 6 2 -1. + <_> + 14 4 3 1 2. + <_> + 11 5 3 1 2. + 0 + 5.5017122067511082e-003 + -8.3080992102622986e-002 + 1.7881210148334503e-001 + <_> + + <_> + + + + <_> + 1 4 6 2 -1. + <_> + 1 4 3 1 2. + <_> + 4 5 3 1 2. + 0 + -4.2574931867420673e-003 + 1.8285669386386871e-001 + -1.2856319546699524e-001 + <_> + + <_> + + + + <_> + 10 0 4 4 -1. + <_> + 11 0 2 4 2. + 0 + -1.0948719864245504e-004 + 1.1554790288209915e-001 + -1.7279610037803650e-001 + <_> + + <_> + + + + <_> + 4 0 4 4 -1. + <_> + 5 0 2 4 2. + 0 + 1.3575569726526737e-002 + 4.7628160566091537e-002 + -4.7959300875663757e-001 + <_> + + <_> + + + + <_> + 16 4 2 3 -1. + <_> + 16 5 2 1 3. + 0 + -1.3205070048570633e-002 + -5.5575007200241089e-001 + 2.9028749093413353e-002 + <_> + + <_> + + + + <_> + 0 4 2 3 -1. + <_> + 0 5 2 1 3. + 0 + 9.1635938733816147e-003 + 3.5378590226173401e-002 + -5.2760952711105347e-001 + <_> + + <_> + + + + <_> + 17 0 1 12 -1. + <_> + 17 4 1 4 3. + 0 + -3.6201209295541048e-003 + 1.2984579801559448e-001 + -2.5827971100807190e-001 + <_> + + <_> + + + + <_> + 9 2 6 3 -1. + <_> + 8 3 6 1 3. + 1 + -2.8150960803031921e-002 + 1.8013629317283630e-001 + -1.2052509933710098e-001 + <_> + + <_> + + + + <_> + 17 0 1 12 -1. + <_> + 17 4 1 4 3. + 0 + -7.5367003679275513e-002 + -2.5096911191940308e-001 + 1.4794659800827503e-002 + <_> + + <_> + + + + <_> + 5 4 2 2 -1. + <_> + 5 4 1 1 2. + <_> + 6 5 1 1 2. + 0 + -1.0179110104218125e-003 + 1.9308570027351379e-001 + -1.0838530212640762e-001 + <_> + + <_> + + + + <_> + 4 0 14 12 -1. + <_> + 4 0 7 12 2. + 0 + -2.0971980690956116e-001 + 7.4706457555294037e-002 + -3.4369520843029022e-002 + <_> + + <_> + + + + <_> + 0 0 1 12 -1. + <_> + 0 4 1 4 3. + 0 + -4.5241750776767731e-002 + -3.0122849345207214e-001 + 6.1180669814348221e-002 + <_> + + <_> + + + + <_> + 17 5 1 4 -1. + <_> + 17 6 1 2 2. + 0 + -1.0068370029330254e-002 + -3.1977829337120056e-001 + 1.5929570421576500e-002 + <_> + + <_> + + + + <_> + 0 5 1 4 -1. + <_> + 0 6 1 2 2. + 0 + 3.3460659906268120e-003 + 5.1246169954538345e-002 + -3.5894161462783813e-001 + <_> + + <_> + + + + <_> + 9 2 1 3 -1. + <_> + 9 3 1 1 3. + 0 + -4.8623997718095779e-003 + 2.8305920958518982e-001 + -6.4877010881900787e-002 + <_> + + <_> + + + + <_> + 6 2 5 2 -1. + <_> + 6 3 5 1 2. + 0 + 9.2780962586402893e-003 + -6.8402752280235291e-002 + 3.2526910305023193e-001 + <_> + + <_> + + + + <_> + 6 0 11 4 -1. + <_> + 6 1 11 2 2. + 0 + 2.8777100145816803e-002 + -7.4719488620758057e-002 + 1.4238749444484711e-001 + <_> + + <_> + + + + <_> + 5 10 4 2 -1. + <_> + 6 10 2 2 2. + 0 + 5.2759349346160889e-003 + 4.1597399860620499e-002 + -4.2687159776687622e-001 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -3.6956008523702621e-002 + 1.8709599971771240e-001 + -9.9286213517189026e-002 + <_> + + <_> + + + + <_> + 4 0 2 1 -1. + <_> + 5 0 1 1 2. + 0 + 1.1527239985298365e-004 + -1.2309949845075607e-001 + 1.6146050393581390e-001 + <_> + + <_> + + + + <_> + 2 1 16 10 -1. + <_> + 2 1 8 10 2. + 0 + 1.0096299648284912e-001 + -6.3704922795295715e-002 + 1.3727569580078125e-001 + <_> + + <_> + + + + <_> + 0 0 14 12 -1. + <_> + 7 0 7 12 2. + 0 + 1.7564980685710907e-001 + -5.5898111313581467e-002 + 3.2327750325202942e-001 + <_> + + <_> + + + + <_> + 12 0 2 1 -1. + <_> + 12 0 1 1 2. + 0 + -7.0847300812602043e-003 + -6.1462122201919556e-001 + 1.9988279789686203e-002 + <_> + + <_> + + + + <_> + 2 6 4 4 -1. + <_> + 3 6 2 4 2. + 0 + -5.4999678395688534e-003 + 1.5109080076217651e-001 + -1.2012190371751785e-001 + <_> + + <_> + + + + <_> + 12 0 2 1 -1. + <_> + 12 0 1 1 2. + 0 + 1.1683329648803920e-004 + -6.3201643526554108e-002 + 1.0248489677906036e-001 + <_> + + <_> + + + + <_> + 4 0 2 1 -1. + <_> + 5 0 1 1 2. + 0 + -1.2892209633719176e-004 + 1.5073929727077484e-001 + -1.2984649837017059e-001 + <_> + + <_> + + + + <_> + 12 0 3 4 -1. + <_> + 13 0 1 4 3. + 0 + 1.0021899826824665e-002 + 4.4182330369949341e-002 + -4.2501309514045715e-001 + <_> + + <_> + + + + <_> + 2 2 8 1 -1. + <_> + 4 4 4 1 2. + 1 + -6.4188748598098755e-002 + -4.0792858600616455e-001 + 4.2033798992633820e-002 + <_> + + <_> + + + + <_> + 12 0 3 4 -1. + <_> + 13 0 1 4 3. + 0 + -1.6842419281601906e-002 + -5.1279681921005249e-001 + 2.1104399114847183e-002 + <_> + + <_> + + + + <_> + 3 0 3 4 -1. + <_> + 4 0 1 4 3. + 0 + 7.4764918535947800e-003 + 4.9902040511369705e-002 + -3.2437339425086975e-001 + <_> + + <_> + + + + <_> + 13 1 4 4 -1. + <_> + 15 1 2 2 2. + <_> + 13 3 2 2 2. + 0 + 7.5663411989808083e-003 + -6.9152683019638062e-002 + 1.9746780395507813e-001 + <_> + + <_> + + + + <_> + 1 1 6 4 -1. + <_> + 1 1 3 2 2. + <_> + 4 3 3 2 2. + 0 + -1.8151780590415001e-002 + 1.8264299631118774e-001 + -9.8603516817092896e-002 + <_> + + <_> + + + + <_> + 8 0 4 2 -1. + <_> + 8 1 4 1 2. + 0 + -1.5309340320527554e-002 + 2.5585418939590454e-001 + -5.7670980691909790e-002 + <_> + + <_> + + + + <_> + 4 10 6 1 -1. + <_> + 6 10 2 1 3. + 0 + -1.2537280097603798e-002 + -6.0015022754669189e-001 + 3.1305689364671707e-002 + <_> + + <_> + + + + <_> + 10 2 1 6 -1. + <_> + 8 4 1 2 3. + 1 + -1.1186859756708145e-001 + -7.3224097490310669e-001 + 5.4572842782363296e-004 + <_> + + <_> + + + + <_> + 8 2 6 1 -1. + <_> + 10 4 2 1 3. + 1 + -1.6405830159783363e-002 + 7.0568412542343140e-002 + -2.3586690425872803e-001 + <_> + + <_> + + + + <_> + 10 5 4 3 -1. + <_> + 11 5 2 3 2. + 0 + -1.1206840164959431e-002 + 2.9805409908294678e-001 + -4.6159930527210236e-002 + <_> + + <_> + + + + <_> + 5 0 4 3 -1. + <_> + 6 0 2 3 2. + 0 + 9.1227758675813675e-003 + 4.7872390598058701e-002 + -3.7525078654289246e-001 + <_> + + <_> + + + + <_> + 9 6 2 2 -1. + <_> + 10 6 1 1 2. + <_> + 9 7 1 1 2. + 0 + -2.4092409876175225e-004 + 1.4520640671253204e-001 + -1.2162090092897415e-001 + <_> + + <_> + + + + <_> + 4 10 10 2 -1. + <_> + 4 11 10 1 2. + 0 + 3.3112149685621262e-003 + -2.1473629772663116e-001 + 7.5015850365161896e-002 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + 1.0689670452848077e-003 + -8.6991913616657257e-002 + 1.4234369993209839e-001 + <_> + + <_> + + + + <_> + 3 2 3 10 -1. + <_> + 4 2 1 10 3. + 0 + -4.2576111853122711e-002 + -7.0083147287368774e-001 + 2.2004570811986923e-002 + <_> + + <_> + + + + <_> + 0 3 18 6 -1. + <_> + 9 3 9 3 2. + <_> + 0 6 9 3 2. + 0 + -2.2859150171279907e-001 + -6.2275588512420654e-001 + 2.0604349672794342e-002 + <_> + + <_> + + + + <_> + 5 4 2 2 -1. + <_> + 5 4 1 2 2. + 1 + 1.1048560030758381e-002 + -8.8343963027000427e-002 + 2.0929630100727081e-001 + <_> + + <_> + + + + <_> + 12 4 4 3 -1. + <_> + 11 5 4 1 3. + 1 + 2.6190899312496185e-002 + -3.0436459928750992e-002 + 2.1788010001182556e-001 + <_> + + <_> + + + + <_> + 6 4 3 4 -1. + <_> + 7 5 1 4 3. + 1 + 1.1006950400769711e-002 + -9.0961061418056488e-002 + 2.2373570501804352e-001 + <_> + + <_> + + + + <_> + 13 8 2 2 -1. + <_> + 14 8 1 1 2. + <_> + 13 9 1 1 2. + 0 + -1.1149870260851458e-004 + 1.0055939853191376e-001 + -8.2711242139339447e-002 + <_> + + <_> + + + + <_> + 3 8 2 2 -1. + <_> + 3 8 1 1 2. + <_> + 4 9 1 1 2. + 0 + 1.1044929851777852e-004 + -1.1131429672241211e-001 + 1.4033970236778259e-001 + <_> + + <_> + + + + <_> + 5 6 12 4 -1. + <_> + 8 6 6 4 2. + 0 + -5.2578408271074295e-002 + 7.1729972958564758e-002 + -4.0962688624858856e-002 + <_> + + <_> + + + + <_> + 0 7 15 3 -1. + <_> + 5 7 5 3 3. + 0 + -1.9955919682979584e-001 + -5.7830357551574707e-001 + 2.8734490275382996e-002 + <_> + + <_> + + + + <_> + 12 1 3 2 -1. + <_> + 13 2 1 2 3. + 1 + 1.7149249091744423e-002 + 1.4304569922387600e-002 + -1.8541809916496277e-001 + <_> + + <_> + + + + <_> + 6 1 2 3 -1. + <_> + 5 2 2 1 3. + 1 + -2.4047069251537323e-002 + -4.6827080845832825e-001 + 3.2377708703279495e-002 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 5 1 3 3. + 0 + -4.2632492259144783e-003 + 1.4178739488124847e-001 + -7.2884447872638702e-002 + <_> + + <_> + + + + <_> + 5 5 3 3 -1. + <_> + 6 5 1 3 3. + 0 + -3.3538329880684614e-003 + 1.9119140505790710e-001 + -8.2784809172153473e-002 + <_> + + <_> + + + + <_> + 10 6 8 3 -1. + <_> + 10 7 8 1 3. + 0 + 7.0240199565887451e-002 + 9.9507197737693787e-003 + -6.9990187883377075e-001 + <_> + + <_> + + + + <_> + 2 0 10 3 -1. + <_> + 2 1 10 1 3. + 0 + 1.6852239146828651e-002 + -8.8816717267036438e-002 + 1.6883240640163422e-001 + <_> + + <_> + + + + <_> + 8 0 4 3 -1. + <_> + 8 1 4 1 3. + 0 + -1.3070680201053619e-002 + 2.4888229370117188e-001 + -6.2759302556514740e-002 + <_> + + <_> + + + + <_> + 2 5 3 7 -1. + <_> + 3 5 1 7 3. + 0 + -3.5220220685005188e-002 + -6.2048029899597168e-001 + 2.4633679538965225e-002 + <_> + + <_> + + + + <_> + 16 0 2 3 -1. + <_> + 16 0 1 3 2. + 1 + -1.7316380515694618e-002 + -3.3864679932594299e-001 + 3.6917239427566528e-002 + <_> + + <_> + + + + <_> + 2 0 3 2 -1. + <_> + 2 0 3 1 2. + 1 + 2.2072130814194679e-002 + 3.8453228771686554e-002 + -4.1064238548278809e-001 + <_> + + <_> + + + + <_> + 5 0 10 1 -1. + <_> + 5 0 5 1 2. + 0 + 1.0351699776947498e-002 + -1.0224519670009613e-001 + 1.5435679256916046e-001 + <_> + + <_> + + + + <_> + 6 6 3 2 -1. + <_> + 7 6 1 2 3. + 0 + -3.6150650121271610e-003 + 2.0694419741630554e-001 + -8.1435896456241608e-002 + <_> + + <_> + + + + <_> + 0 0 18 4 -1. + <_> + 6 0 6 4 3. + 0 + -1.0313490033149719e-001 + 1.6327729821205139e-001 + -9.8083086311817169e-002 + <_> + + <_> + + + + <_> + 5 7 2 1 -1. + <_> + 6 7 1 1 2. + 0 + 7.9715962056070566e-004 + -1.0221719741821289e-001 + 1.7463779449462891e-001 + <_> + + <_> + + + + <_> + 9 7 2 3 -1. + <_> + 9 7 1 3 2. + 1 + 2.6026399806141853e-002 + 6.9349119439721107e-003 + -7.0387297868728638e-001 + <_> + + <_> + + + + <_> + 9 7 3 2 -1. + <_> + 9 7 3 1 2. + 1 + -3.2695080153644085e-003 + 5.7468920946121216e-002 + -2.6737850904464722e-001 + <_> + + <_> + + + + <_> + 11 4 2 3 -1. + <_> + 11 4 1 3 2. + 1 + -3.0334599316120148e-002 + 1.6826699674129486e-001 + -4.4392518699169159e-002 + <_> + + <_> + + + + <_> + 7 4 3 2 -1. + <_> + 7 4 3 1 2. + 1 + -3.4671649336814880e-002 + -3.3905708789825439e-001 + 6.1771869659423828e-002 + <_> + + <_> + + + + <_> + 13 8 2 2 -1. + <_> + 14 8 1 1 2. + <_> + 13 9 1 1 2. + 0 + 8.4309016529005021e-005 + -1.1972939968109131e-001 + 1.5170879662036896e-001 + <_> + + <_> + + + + <_> + 3 8 2 2 -1. + <_> + 3 8 1 1 2. + <_> + 4 9 1 1 2. + 0 + -1.0392320109531283e-004 + 1.4664840698242188e-001 + -1.1560360342264175e-001 + <_> + + <_> + + + + <_> + 16 7 2 3 -1. + <_> + 16 7 1 3 2. + 1 + -1.0691150091588497e-002 + 1.1423820257186890e-001 + -1.0983390361070633e-001 + -1.6809680461883545e+000 + 9 + -1 + <_> + + + <_> + + <_> + + + + <_> + 3 6 6 2 -1. + <_> + 5 6 2 2 3. + 0 + 4.0128160268068314e-002 + -3.1783500313758850e-001 + 6.2470978498458862e-001 + <_> + + <_> + + + + <_> + 7 4 9 8 -1. + <_> + 7 8 9 4 2. + 0 + 2.5893148779869080e-001 + -2.7941200137138367e-001 + 2.5360828638076782e-001 + <_> + + <_> + + + + <_> + 9 1 6 2 -1. + <_> + 11 3 2 2 3. + 1 + -8.1663876771926880e-002 + 3.0437821149826050e-001 + -3.2352921366691589e-001 + <_> + + <_> + + + + <_> + 14 5 4 2 -1. + <_> + 14 5 2 2 2. + 1 + 1.7201349139213562e-002 + -1.6664890572428703e-002 + 1.2985409796237946e-001 + <_> + + <_> + + + + <_> + 4 5 2 4 -1. + <_> + 4 5 2 2 2. + 1 + -4.2179729789495468e-002 + 2.4032059311866760e-001 + -3.2194539904594421e-001 + <_> + + <_> + + + + <_> + 7 2 9 6 -1. + <_> + 7 4 9 2 3. + 0 + -6.1821538954973221e-002 + 6.6948533058166504e-002 + -1.1838900297880173e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 4.1967527940869331e-003 + -4.2374908924102783e-001 + 1.1120550334453583e-001 + <_> + + <_> + + + + <_> + 11 5 3 2 -1. + <_> + 12 6 1 2 3. + 1 + -2.2552030161023140e-002 + 2.6725378632545471e-001 + -9.9779993295669556e-002 + <_> + + <_> + + + + <_> + 6 7 6 1 -1. + <_> + 8 7 2 1 3. + 0 + 8.3527207374572754e-002 + 4.9182821065187454e-002 + 9.3193750000000000e+002 + <_> + + <_> + + + + <_> + 9 3 3 4 -1. + <_> + 10 4 1 4 3. + 1 + -6.6923439502716064e-002 + -4.3197348713874817e-001 + 2.2907970473170280e-002 + <_> + + <_> + + + + <_> + 9 3 4 3 -1. + <_> + 8 4 4 1 3. + 1 + -2.4421349167823792e-002 + 2.3052230477333069e-001 + -1.9583049416542053e-001 + <_> + + <_> + + + + <_> + 10 5 3 1 -1. + <_> + 11 6 1 1 3. + 1 + -4.8728468827903271e-003 + 9.6525266766548157e-002 + -1.5255169570446014e-001 + <_> + + <_> + + + + <_> + 8 5 1 3 -1. + <_> + 7 6 1 1 3. + 1 + -1.1779139749705791e-002 + 3.8318601250648499e-001 + -9.9813573062419891e-002 + <_> + + <_> + + + + <_> + 5 3 8 4 -1. + <_> + 5 5 8 2 2. + 0 + 5.5238891392946243e-002 + -8.1039026379585266e-002 + 4.2088559269905090e-001 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -1.6514550894498825e-002 + 1.9347189366817474e-001 + -1.6414490342140198e-001 + <_> + + <_> + + + + <_> + 12 1 6 6 -1. + <_> + 15 1 3 3 2. + <_> + 12 4 3 3 2. + 0 + 2.9398869723081589e-002 + -4.0197629481554031e-002 + 1.6494549810886383e-001 + <_> + + <_> + + + + <_> + 1 1 6 6 -1. + <_> + 1 1 3 3 2. + <_> + 4 4 3 3 2. + 0 + -2.7306059375405312e-002 + 2.1020489931106567e-001 + -1.5619710087776184e-001 + <_> + + <_> + + + + <_> + 8 9 4 3 -1. + <_> + 9 9 2 3 2. + 0 + -1.1370140127837658e-002 + -6.3955801725387573e-001 + 3.8152929395437241e-002 + <_> + + <_> + + + + <_> + 3 10 12 2 -1. + <_> + 7 10 4 2 3. + 0 + -9.6206590533256531e-003 + 1.7184859514236450e-001 + -1.4077569544315338e-001 + <_> + + <_> + + + + <_> + 7 0 8 9 -1. + <_> + 7 3 8 3 3. + 0 + -2.4804919958114624e-001 + 9.6059650182723999e-002 + -3.5033728927373886e-002 + <_> + + <_> + + + + <_> + 5 3 8 3 -1. + <_> + 5 4 8 1 3. + 0 + 1.9431810826063156e-002 + -8.1926092505455017e-002 + 2.9813900589942932e-001 + <_> + + <_> + + + + <_> + 14 1 4 4 -1. + <_> + 16 1 2 2 2. + <_> + 14 3 2 2 2. + 0 + 9.2512750998139381e-003 + -2.8675759211182594e-002 + 1.2367840111255646e-001 + <_> + + <_> + + + + <_> + 0 1 4 4 -1. + <_> + 0 1 2 2 2. + <_> + 2 3 2 2 2. + 0 + -7.5025227852165699e-003 + 1.9024680554866791e-001 + -1.4312489330768585e-001 + <_> + + <_> + + + + <_> + 15 0 3 3 -1. + <_> + 16 1 1 3 3. + 1 + 1.8332319334149361e-002 + 5.1443781703710556e-002 + -4.5784160494804382e-001 + <_> + + <_> + + + + <_> + 3 0 3 3 -1. + <_> + 2 1 3 1 3. + 1 + -2.4709559977054596e-002 + -5.5311012268066406e-001 + 4.3773401528596878e-002 + <_> + + <_> + + + + <_> + 13 7 5 3 -1. + <_> + 13 8 5 1 3. + 0 + 3.5510540008544922e-002 + 5.7641528546810150e-003 + -5.0709831714630127e-001 + <_> + + <_> + + + + <_> + 0 7 4 4 -1. + <_> + 0 8 4 2 2. + 0 + 2.0895810797810555e-002 + 4.5377410948276520e-002 + -4.9842038750648499e-001 + <_> + + <_> + + + + <_> + 6 4 6 6 -1. + <_> + 8 4 2 6 3. + 0 + -3.5481620579957962e-002 + 1.5418830513954163e-001 + -1.4000199735164642e-001 + <_> + + <_> + + + + <_> + 6 9 6 2 -1. + <_> + 8 9 2 2 3. + 0 + -1.7126219347119331e-002 + -4.8520579934120178e-001 + 4.5199479907751083e-002 + <_> + + <_> + + + + <_> + 5 6 10 6 -1. + <_> + 10 6 5 3 2. + <_> + 5 9 5 3 2. + 0 + -4.3498359620571136e-002 + -2.1836410462856293e-001 + 2.4818979203701019e-002 + <_> + + <_> + + + + <_> + 9 9 1 2 -1. + <_> + 9 9 1 1 2. + 1 + -9.6786877838894725e-004 + 9.3692511320114136e-002 + -2.0849959552288055e-001 + <_> + + <_> + + + + <_> + 3 2 12 3 -1. + <_> + 3 3 12 1 3. + 0 + 2.8028149157762527e-002 + -9.8437979817390442e-002 + 2.1405869722366333e-001 + <_> + + <_> + + + + <_> + 3 0 7 8 -1. + <_> + 3 2 7 4 2. + 0 + -1.1709540337324142e-001 + 2.7563339471817017e-001 + -8.0759562551975250e-002 + <_> + + <_> + + + + <_> + 2 0 16 11 -1. + <_> + 2 0 8 11 2. + 0 + 3.1854110956192017e-001 + -3.7302598357200623e-002 + 2.0321239531040192e-001 + <_> + + <_> + + + + <_> + 0 0 12 11 -1. + <_> + 6 0 6 11 2. + 0 + 1.8708510696887970e-001 + -4.2003840208053589e-002 + 4.5461919903755188e-001 + <_> + + <_> + + + + <_> + 9 0 6 4 -1. + <_> + 11 0 2 4 3. + 0 + -1.1449670273577794e-004 + 1.1597789824008942e-001 + -2.3541730642318726e-001 + <_> + + <_> + + + + <_> + 4 1 4 4 -1. + <_> + 5 2 2 4 2. + 1 + 3.5649940371513367e-002 + -6.6509492695331573e-002 + 2.8327891230583191e-001 + <_> + + <_> + + + + <_> + 4 2 14 10 -1. + <_> + 11 2 7 5 2. + <_> + 4 7 7 5 2. + 0 + 3.8561020046472549e-002 + -9.1676719486713409e-002 + 9.5089800655841827e-002 + <_> + + <_> + + + + <_> + 0 6 1 3 -1. + <_> + 0 7 1 1 3. + 0 + 2.9842848889529705e-003 + 4.8733729869127274e-002 + -3.4843000769615173e-001 + <_> + + <_> + + + + <_> + 16 7 2 2 -1. + <_> + 17 7 1 1 2. + <_> + 16 8 1 1 2. + 0 + 1.2221869837958366e-004 + -1.0448929667472839e-001 + 1.0433969646692276e-001 + <_> + + <_> + + + + <_> + 5 4 3 3 -1. + <_> + 6 5 1 3 3. + 1 + 1.7984049394726753e-002 + -5.5451318621635437e-002 + 2.8990921378135681e-001 + <_> + + <_> + + + + <_> + 11 4 4 1 -1. + <_> + 12 5 2 1 2. + 1 + -3.0522119253873825e-002 + 3.2600420713424683e-001 + -1.2342750094830990e-002 + <_> + + <_> + + + + <_> + 7 4 1 4 -1. + <_> + 6 5 1 2 2. + 1 + -8.8787982240319252e-003 + 1.8352979421615601e-001 + -1.2553639709949493e-001 + <_> + + <_> + + + + <_> + 10 0 3 3 -1. + <_> + 11 0 1 3 3. + 0 + -8.1907752901315689e-003 + -4.6439141035079956e-001 + 5.7022649794816971e-002 + <_> + + <_> + + + + <_> + 7 8 4 2 -1. + <_> + 8 8 2 2 2. + 0 + 7.2757308371365070e-003 + 2.9556749388575554e-002 + -4.8011448979377747e-001 + <_> + + <_> + + + + <_> + 8 10 2 1 -1. + <_> + 8 10 1 1 2. + 0 + 1.0632930207066238e-004 + -1.1848829686641693e-001 + 1.2452460080385208e-001 + <_> + + <_> + + + + <_> + 1 0 14 4 -1. + <_> + 1 1 14 2 2. + 0 + 4.3366391211748123e-002 + -8.5436671972274780e-002 + 1.7945680022239685e-001 + <_> + + <_> + + + + <_> + 6 0 8 3 -1. + <_> + 6 1 8 1 3. + 0 + -1.7917420715093613e-002 + 2.2749659419059753e-001 + -7.3550216853618622e-002 + <_> + + <_> + + + + <_> + 6 1 6 3 -1. + <_> + 6 2 6 1 3. + 0 + -2.4122040718793869e-002 + 3.2454338669776917e-001 + -4.7602940350770950e-002 + <_> + + <_> + + + + <_> + 9 0 6 4 -1. + <_> + 11 0 2 4 3. + 0 + 4.5866120606660843e-002 + 1.6963159665465355e-002 + -6.1907947063446045e-001 + <_> + + <_> + + + + <_> + 3 0 6 4 -1. + <_> + 5 0 2 4 3. + 0 + -2.6154519990086555e-002 + -3.7108859419822693e-001 + 3.9997719228267670e-002 + <_> + + <_> + + + + <_> + 12 3 2 2 -1. + <_> + 12 3 1 2 2. + 1 + -2.3461949080228806e-002 + 1.2756420671939850e-001 + -2.2292949259281158e-002 + <_> + + <_> + + + + <_> + 6 2 1 2 -1. + <_> + 6 2 1 1 2. + 1 + 1.5133329667150974e-002 + 2.7855740860104561e-002 + -5.6463587284088135e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 9 10 9 1 2. + <_> + 0 11 9 1 2. + 0 + -3.8169771432876587e-002 + -6.7978310585021973e-001 + 1.9624669104814529e-002 + <_> + + <_> + + + + <_> + 6 0 3 1 -1. + <_> + 7 0 1 1 3. + 0 + -6.0274768620729446e-003 + -6.0235649347305298e-001 + 1.9473260268568993e-002 + <_> + + <_> + + + + <_> + 0 2 18 6 -1. + <_> + 9 2 9 3 2. + <_> + 0 5 9 3 2. + 0 + -2.0226030051708221e-001 + -4.1042789816856384e-001 + 3.3139400184154510e-002 + <_> + + <_> + + + + <_> + 0 0 2 12 -1. + <_> + 0 6 2 6 2. + 0 + 1.3556970655918121e-001 + 3.2679639756679535e-002 + -4.9395999312400818e-001 + <_> + + <_> + + + + <_> + 16 7 2 2 -1. + <_> + 17 7 1 1 2. + <_> + 16 8 1 1 2. + 0 + -1.0420950275147334e-004 + 1.7653250694274902e-001 + -1.2747409939765930e-001 + <_> + + <_> + + + + <_> + 0 7 2 2 -1. + <_> + 0 7 1 1 2. + <_> + 1 8 1 1 2. + 0 + 1.2260209769010544e-004 + -1.2935620546340942e-001 + 1.2286009639501572e-001 + <_> + + <_> + + + + <_> + 16 8 2 1 -1. + <_> + 16 8 1 1 2. + 0 + -1.8132160184904933e-003 + 2.1865940093994141e-001 + -8.7909542024135590e-002 + <_> + + <_> + + + + <_> + 5 0 8 2 -1. + <_> + 5 1 8 1 2. + 0 + 1.4558799564838409e-002 + -7.1452066302299500e-002 + 2.0318900048732758e-001 + <_> + + <_> + + + + <_> + 17 2 1 6 -1. + <_> + 17 4 1 2 3. + 0 + -2.2111190482974052e-002 + -5.1411151885986328e-001 + 3.8326159119606018e-002 + <_> + + <_> + + + + <_> + 0 2 1 6 -1. + <_> + 0 4 1 2 3. + 0 + 1.2102689594030380e-002 + 3.4980859607458115e-002 + -3.5819360613822937e-001 + <_> + + <_> + + + + <_> + 10 9 4 3 -1. + <_> + 11 9 2 3 2. + 0 + -1.6234850510954857e-002 + -6.7572712898254395e-001 + 1.3337399810552597e-002 + <_> + + <_> + + + + <_> + 8 10 2 1 -1. + <_> + 9 10 1 1 2. + 0 + 1.2108719965908676e-004 + -9.7839273512363434e-002 + 1.3967449963092804e-001 + <_> + + <_> + + + + <_> + 10 9 4 3 -1. + <_> + 11 9 2 3 2. + 0 + 6.9925719872117043e-003 + 3.2864410430192947e-002 + -2.6933521032333374e-001 + <_> + + <_> + + + + <_> + 0 7 2 2 -1. + <_> + 0 7 1 1 2. + <_> + 1 8 1 1 2. + 0 + -1.1492669727886096e-004 + 1.5019279718399048e-001 + -9.2902913689613342e-002 + <_> + + <_> + + + + <_> + 15 4 2 6 -1. + <_> + 15 4 1 6 2. + 0 + -6.2735271640121937e-003 + 1.9764299690723419e-001 + -1.4036740362644196e-001 + <_> + + <_> + + + + <_> + 5 6 2 2 -1. + <_> + 5 6 1 1 2. + <_> + 6 7 1 1 2. + 0 + 3.4272519405931234e-003 + -5.6488610804080963e-002 + 2.3865149915218353e-001 + <_> + + <_> + + + + <_> + 12 6 2 2 -1. + <_> + 12 7 2 1 2. + 0 + 6.5099778585135937e-003 + -3.5633251070976257e-002 + 7.3461838066577911e-002 + <_> + + <_> + + + + <_> + 4 6 2 2 -1. + <_> + 4 7 2 1 2. + 0 + 4.3461588211357594e-003 + -1.1661099642515182e-001 + 1.2772659957408905e-001 + <_> + + <_> + + + + <_> + 11 6 7 3 -1. + <_> + 11 7 7 1 3. + 0 + -6.7506477236747742e-002 + -6.3980489969253540e-001 + 6.2549579888582230e-003 + <_> + + <_> + + + + <_> + 0 6 7 3 -1. + <_> + 0 7 7 1 3. + 0 + 2.7710430324077606e-002 + 3.0216189101338387e-002 + -4.6095389127731323e-001 + <_> + + <_> + + + + <_> + 9 0 2 3 -1. + <_> + 9 0 1 3 2. + 0 + 8.6712799966335297e-003 + 1.9897650927305222e-002 + -2.8020209074020386e-001 + <_> + + <_> + + + + <_> + 9 3 4 2 -1. + <_> + 9 3 4 1 2. + 1 + -3.3389169722795486e-002 + 3.4334081411361694e-001 + -3.8698211312294006e-002 + <_> + + <_> + + + + <_> + 15 4 2 6 -1. + <_> + 15 4 1 6 2. + 0 + -5.2936229854822159e-002 + -7.2460907697677612e-001 + 6.3011539168655872e-003 + <_> + + <_> + + + + <_> + 1 4 2 6 -1. + <_> + 2 4 1 6 2. + 0 + -4.5043029822409153e-003 + 9.2780143022537231e-002 + -1.4180530607700348e-001 + <_> + + <_> + + + + <_> + 14 0 4 4 -1. + <_> + 14 0 2 4 2. + 0 + -3.1233350746333599e-003 + 1.7233259975910187e-001 + -2.9970449209213257e-001 + <_> + + <_> + + + + <_> + 0 0 4 3 -1. + <_> + 2 0 2 3 2. + 0 + 6.6139260306954384e-003 + -9.9938079714775085e-002 + 1.9661809504032135e-001 + <_> + + <_> + + + + <_> + 16 0 2 3 -1. + <_> + 16 0 1 3 2. + 1 + -1.7207840457558632e-002 + -4.2743620276451111e-001 + 4.8802521079778671e-002 + <_> + + <_> + + + + <_> + 2 0 3 2 -1. + <_> + 2 0 3 1 2. + 1 + 2.2534899413585663e-002 + 3.0614370480179787e-002 + -5.1239258050918579e-001 + <_> + + <_> + + + + <_> + 12 2 6 3 -1. + <_> + 11 3 6 1 3. + 1 + 1.5610080212354660e-002 + -6.8048216402530670e-002 + 1.4999119937419891e-001 + <_> + + <_> + + + + <_> + 6 2 3 6 -1. + <_> + 7 3 1 6 3. + 1 + 2.0428750663995743e-002 + -5.9653080999851227e-002 + 2.4934889376163483e-001 + <_> + + <_> + + + + <_> + 11 11 4 1 -1. + <_> + 12 11 2 1 2. + 0 + 6.6278302110731602e-003 + 1.2023109942674637e-002 + -3.2418128848075867e-001 + <_> + + <_> + + + + <_> + 7 0 2 4 -1. + <_> + 8 0 1 4 2. + 0 + -1.1010710150003433e-002 + -4.1893360018730164e-001 + 3.2063160091638565e-002 + <_> + + <_> + + + + <_> + 10 5 2 2 -1. + <_> + 11 5 1 1 2. + <_> + 10 6 1 1 2. + 0 + -2.5190298911184072e-003 + 1.9416549801826477e-001 + -7.9592078924179077e-002 + <_> + + <_> + + + + <_> + 3 11 4 1 -1. + <_> + 4 11 2 1 2. + 0 + 4.5439349487423897e-003 + 2.7912829071283340e-002 + -4.7302699089050293e-001 + <_> + + <_> + + + + <_> + 11 11 2 1 -1. + <_> + 11 11 1 1 2. + 0 + -1.0793250112328678e-004 + 1.0455460101366043e-001 + -9.8342873156070709e-002 + <_> + + <_> + + + + <_> + 5 8 3 1 -1. + <_> + 6 9 1 1 3. + 1 + -1.1960390023887157e-002 + -5.5645018815994263e-001 + 2.4031320586800575e-002 + <_> + + <_> + + + + <_> + 14 4 3 1 -1. + <_> + 15 5 1 1 3. + 1 + -1.2221559882164001e-004 + 9.5023281872272491e-002 + -1.3685759902000427e-001 + <_> + + <_> + + + + <_> + 6 2 3 3 -1. + <_> + 7 3 1 3 3. + 1 + -2.0170589908957481e-002 + 1.6795089840888977e-001 + -7.6120890676975250e-002 + <_> + + <_> + + + + <_> + 12 4 3 8 -1. + <_> + 13 4 1 8 3. + 0 + -8.3070956170558929e-003 + 1.7039400339126587e-001 + -6.0343630611896515e-002 + <_> + + <_> + + + + <_> + 3 4 3 8 -1. + <_> + 4 4 1 8 3. + 0 + -3.4953389316797256e-002 + -6.3390421867370605e-001 + 2.3547450080513954e-002 + <_> + + <_> + + + + <_> + 9 0 4 6 -1. + <_> + 10 1 2 6 2. + 1 + -1.2870649993419647e-001 + -5.5947631597518921e-001 + 1.0227069724351168e-003 + <_> + + <_> + + + + <_> + 9 0 6 4 -1. + <_> + 8 1 6 2 2. + 1 + -5.2872750908136368e-002 + 2.0933540165424347e-001 + -6.2754176557064056e-002 + <_> + + <_> + + + + <_> + 13 4 3 1 -1. + <_> + 14 5 1 1 3. + 1 + 2.1988220512866974e-002 + -2.8742890805006027e-002 + 3.2623329758644104e-001 + <_> + + <_> + + + + <_> + 5 4 1 3 -1. + <_> + 4 5 1 1 3. + 1 + -2.7929820120334625e-002 + -8.0376791954040527e-001 + 1.8866369500756264e-002 + <_> + + <_> + + + + <_> + 13 0 3 2 -1. + <_> + 14 1 1 2 3. + 1 + 1.6517540439963341e-002 + 3.4300331026315689e-002 + -3.3194449543952942e-001 + <_> + + <_> + + + + <_> + 6 0 6 6 -1. + <_> + 6 2 6 2 3. + 0 + 1.2578460574150085e-001 + -6.5953016281127930e-002 + 2.7026090025901794e-001 + <_> + + <_> + + + + <_> + 17 9 1 2 -1. + <_> + 17 10 1 1 2. + 0 + 1.2017370318062603e-004 + -1.2451259791851044e-001 + 8.0808043479919434e-002 + <_> + + <_> + + + + <_> + 0 2 1 4 -1. + <_> + 0 3 1 2 2. + 0 + 3.7558379117399454e-003 + 4.6920169144868851e-002 + -2.4560800194740295e-001 + <_> + + <_> + + + + <_> + 17 4 1 4 -1. + <_> + 17 5 1 2 2. + 0 + -6.4232251606881618e-003 + -3.0731809139251709e-001 + 3.6565799266099930e-002 + <_> + + <_> + + + + <_> + 0 4 1 4 -1. + <_> + 0 5 1 2 2. + 0 + 3.4200940281152725e-003 + 4.0808930993080139e-002 + -2.8372159600257874e-001 + <_> + + <_> + + + + <_> + 13 5 1 2 -1. + <_> + 13 6 1 1 2. + 0 + -2.1825190633535385e-003 + 1.1226759850978851e-001 + -2.4832399562001228e-002 + <_> + + <_> + + + + <_> + 1 0 3 1 -1. + <_> + 2 1 1 1 3. + 1 + -5.2442201413214207e-003 + 1.9796860218048096e-001 + -6.2690652906894684e-002 + -1.6043150424957275e+000 + 10 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -6.5449662506580353e-002 + 6.5984207391738892e-001 + -2.8083300590515137e-001 + <_> + + <_> + + + + <_> + 13 2 2 8 -1. + <_> + 13 4 2 4 2. + 0 + -5.5504930205643177e-003 + 1.3949079811573029e-001 + -1.9948430359363556e-001 + <_> + + <_> + + + + <_> + 1 3 6 6 -1. + <_> + 3 5 2 2 9. + 0 + -1.2023960053920746e-001 + 3.5877311229705811e-001 + -3.1004118919372559e-001 + <_> + + <_> + + + + <_> + 11 0 2 8 -1. + <_> + 9 2 2 4 2. + 1 + 2.0659500733017921e-002 + 2.4529699236154556e-002 + -1.6617469489574432e-001 + <_> + + <_> + + + + <_> + 7 0 8 2 -1. + <_> + 9 2 4 2 2. + 1 + -1.4058920741081238e-001 + 4.2553600668907166e-001 + -1.3463549315929413e-001 + <_> + + <_> + + + + <_> + 13 8 5 2 -1. + <_> + 13 9 5 1 2. + 0 + 1.3962809462100267e-003 + -1.6868929564952850e-001 + 4.4305529445409775e-002 + <_> + + <_> + + + + <_> + 0 8 5 2 -1. + <_> + 0 9 5 1 2. + 0 + 9.3446177197620273e-004 + -4.8740088939666748e-001 + 9.9577173590660095e-002 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -3.8250170648097992e-002 + 2.6871618628501892e-001 + -1.5085490047931671e-001 + <_> + + <_> + + + + <_> + 4 5 4 2 -1. + <_> + 4 5 2 1 2. + <_> + 6 6 2 1 2. + 0 + 1.1073240078985691e-002 + -9.0580292046070099e-002 + 3.9891949295997620e-001 + <_> + + <_> + + + + <_> + 7 0 6 4 -1. + <_> + 9 0 2 4 3. + 0 + -3.4222271293401718e-002 + -5.4190230369567871e-001 + 5.8256920427083969e-002 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 9 0 2 3 2. + 0 + -1.6340370057150722e-003 + 1.5135709941387177e-001 + -2.5593858957290649e-001 + <_> + + <_> + + + + <_> + 17 0 1 12 -1. + <_> + 17 6 1 6 2. + 0 + 5.6902751326560974e-002 + 2.4959880858659744e-002 + -2.5529161095619202e-001 + <_> + + <_> + + + + <_> + 0 0 1 12 -1. + <_> + 0 6 1 6 2. + 0 + 5.4659740999341011e-003 + -2.6191771030426025e-001 + 1.2557169795036316e-001 + <_> + + <_> + + + + <_> + 11 6 2 2 -1. + <_> + 12 6 1 1 2. + <_> + 11 7 1 1 2. + 0 + 3.7860060110688210e-003 + -9.2318423092365265e-002 + 3.1680619716644287e-001 + <_> + + <_> + + + + <_> + 4 10 10 2 -1. + <_> + 4 11 10 1 2. + 0 + 6.2198941595852375e-003 + -2.4663870036602020e-001 + 1.0715399682521820e-001 + <_> + + <_> + + + + <_> + 11 6 2 2 -1. + <_> + 12 6 1 1 2. + <_> + 11 7 1 1 2. + 0 + -3.3108259085565805e-003 + 2.6593479514122009e-001 + -4.2567960917949677e-002 + <_> + + <_> + + + + <_> + 9 1 6 2 -1. + <_> + 11 3 2 2 3. + 1 + -2.4268100038170815e-002 + 7.8301817178726196e-002 + -3.3432251214981079e-001 + <_> + + <_> + + + + <_> + 17 8 1 4 -1. + <_> + 17 9 1 2 2. + 0 + 4.4654891826212406e-003 + 4.4951941817998886e-002 + -3.6068201065063477e-001 + <_> + + <_> + + + + <_> + 0 8 1 4 -1. + <_> + 0 9 1 2 2. + 0 + 5.0136880017817020e-003 + 4.8014611005783081e-002 + -4.8307308554649353e-001 + <_> + + <_> + + + + <_> + 10 6 3 1 -1. + <_> + 11 6 1 1 3. + 0 + -3.6905671004205942e-003 + 2.3733210563659668e-001 + -7.7101498842239380e-002 + <_> + + <_> + + + + <_> + 4 4 2 4 -1. + <_> + 4 6 2 2 2. + 0 + 2.6699999347329140e-002 + -7.0286177098751068e-002 + 3.1604859232902527e-001 + <_> + + <_> + + + + <_> + 13 5 1 2 -1. + <_> + 13 5 1 1 2. + 1 + -1.4216369949281216e-002 + 1.9163979589939117e-001 + -1.4565619640052319e-002 + <_> + + <_> + + + + <_> + 5 5 2 1 -1. + <_> + 5 5 1 1 2. + 1 + 4.9798311665654182e-003 + -9.3808017671108246e-002 + 3.3386421203613281e-001 + <_> + + <_> + + + + <_> + 8 0 4 4 -1. + <_> + 9 0 2 4 2. + 0 + 1.0780889540910721e-002 + 4.4129341840744019e-002 + -3.5146710276603699e-001 + <_> + + <_> + + + + <_> + 6 9 4 3 -1. + <_> + 7 9 2 3 2. + 0 + -8.0803576856851578e-003 + -4.5045539736747742e-001 + 4.2515419423580170e-002 + <_> + + <_> + + + + <_> + 8 10 4 2 -1. + <_> + 9 10 2 2 2. + 0 + -6.2959468923509121e-003 + -5.0585079193115234e-001 + 2.6853339746594429e-002 + <_> + + <_> + + + + <_> + 0 6 1 4 -1. + <_> + 0 7 1 2 2. + 0 + 4.2930860072374344e-003 + 4.4392760843038559e-002 + -4.2409139871597290e-001 + <_> + + <_> + + + + <_> + 6 0 6 4 -1. + <_> + 6 1 6 2 2. + 0 + -3.6001540720462799e-002 + 3.6739090085029602e-001 + -5.6275039911270142e-002 + <_> + + <_> + + + + <_> + 2 4 2 7 -1. + <_> + 3 4 1 7 2. + 0 + -3.6325119435787201e-003 + 1.0696999728679657e-001 + -1.7666119337081909e-001 + <_> + + <_> + + + + <_> + 6 6 6 1 -1. + <_> + 8 6 2 1 3. + 0 + -7.6885600574314594e-003 + 1.3644680380821228e-001 + -1.4830610156059265e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -6.5619632601737976e-002 + -3.6476480960845947e-001 + 5.2671018987894058e-002 + <_> + + <_> + + + + <_> + 10 4 3 2 -1. + <_> + 11 5 1 2 3. + 1 + -1.3787600211799145e-002 + 1.4529299736022949e-001 + -1.4805309474468231e-001 + <_> + + <_> + + + + <_> + 4 1 9 6 -1. + <_> + 4 3 9 2 3. + 0 + -1.6259980201721191e-001 + 3.4896880388259888e-001 + -7.1005232632160187e-002 + <_> + + <_> + + + + <_> + 10 4 3 2 -1. + <_> + 11 5 1 2 3. + 1 + -9.7861498594284058e-002 + -6.8113172054290771e-001 + 6.0920282267034054e-003 + <_> + + <_> + + + + <_> + 8 4 2 3 -1. + <_> + 7 5 2 1 3. + 1 + -1.5198419801890850e-002 + 2.3462030291557312e-001 + -1.0035049915313721e-001 + <_> + + <_> + + + + <_> + 1 9 17 2 -1. + <_> + 1 10 17 1 2. + 0 + 9.0543217957019806e-003 + -2.2936539351940155e-001 + 7.7951073646545410e-002 + <_> + + <_> + + + + <_> + 6 11 6 1 -1. + <_> + 8 11 2 1 3. + 0 + 7.3727401904761791e-003 + 3.9879500865936279e-002 + -4.8354309797286987e-001 + <_> + + <_> + + + + <_> + 8 4 3 3 -1. + <_> + 9 5 1 1 9. + 0 + -1.8954079598188400e-002 + 9.6944183111190796e-002 + -5.5643040686845779e-002 + <_> + + <_> + + + + <_> + 7 0 3 5 -1. + <_> + 8 0 1 5 3. + 0 + 1.2283699586987495e-002 + 4.3389499187469482e-002 + -4.2138868570327759e-001 + <_> + + <_> + + + + <_> + 15 5 3 3 -1. + <_> + 15 6 3 1 3. + 0 + -1.8302969634532928e-002 + -4.2719489336013794e-001 + 2.2162979468703270e-002 + <_> + + <_> + + + + <_> + 1 0 15 6 -1. + <_> + 6 2 5 2 9. + 0 + 4.3101060390472412e-001 + -5.1615860313177109e-002 + 3.4026700258255005e-001 + <_> + + <_> + + + + <_> + 8 5 3 2 -1. + <_> + 9 5 1 2 3. + 0 + 1.1051310226321220e-002 + -2.4313559755682945e-002 + 3.2357591390609741e-001 + <_> + + <_> + + + + <_> + 0 1 14 11 -1. + <_> + 7 1 7 11 2. + 0 + -4.4691780209541321e-001 + 2.7657490968704224e-001 + -6.6980779170989990e-002 + <_> + + <_> + + + + <_> + 14 3 3 6 -1. + <_> + 14 3 3 3 2. + 1 + 5.9630710631608963e-002 + 2.8453519567847252e-002 + -3.4650930762290955e-001 + <_> + + <_> + + + + <_> + 0 1 14 11 -1. + <_> + 7 1 7 11 2. + 0 + 2.0880649983882904e-001 + -4.9901269376277924e-002 + 3.6606788635253906e-001 + <_> + + <_> + + + + <_> + 16 4 2 8 -1. + <_> + 17 4 1 4 2. + <_> + 16 8 1 4 2. + 0 + 5.6081339716911316e-003 + -7.8487291932106018e-002 + 1.3186110556125641e-001 + <_> + + <_> + + + + <_> + 3 1 4 3 -1. + <_> + 4 2 2 3 2. + 1 + -5.5167000740766525e-002 + 5.1011168956756592e-001 + -3.3664189279079437e-002 + <_> + + <_> + + + + <_> + 12 3 3 3 -1. + <_> + 11 4 3 1 3. + 1 + 1.1171470396220684e-002 + -3.7235900759696960e-002 + 1.1104430258274078e-001 + <_> + + <_> + + + + <_> + 7 5 2 3 -1. + <_> + 6 6 2 1 3. + 1 + -1.5330309979617596e-002 + 2.4683140218257904e-001 + -7.2548203170299530e-002 + <_> + + <_> + + + + <_> + 3 4 12 3 -1. + <_> + 6 4 6 3 2. + 0 + -3.9592171087861061e-003 + 7.2863176465034485e-002 + -2.8057581186294556e-001 + <_> + + <_> + + + + <_> + 0 5 3 3 -1. + <_> + 0 6 3 1 3. + 0 + 8.4626460447907448e-003 + 3.6698680371046066e-002 + -3.9774340391159058e-001 + <_> + + <_> + + + + <_> + 7 3 5 2 -1. + <_> + 7 4 5 1 2. + 0 + 1.6352999955415726e-002 + -3.7106141448020935e-002 + 4.3486309051513672e-001 + <_> + + <_> + + + + <_> + 5 4 3 2 -1. + <_> + 6 5 1 2 3. + 1 + -2.0322609692811966e-002 + 1.9888140261173248e-001 + -8.6129508912563324e-002 + <_> + + <_> + + + + <_> + 11 11 2 1 -1. + <_> + 11 11 1 1 2. + 0 + -9.3476366600953043e-005 + 8.8922351598739624e-002 + -8.2700327038764954e-002 + <_> + + <_> + + + + <_> + 5 5 3 3 -1. + <_> + 6 6 1 3 3. + 1 + 9.6907848492264748e-003 + -8.2258842885494232e-002 + 1.9518549740314484e-001 + <_> + + <_> + + + + <_> + 11 0 4 5 -1. + <_> + 12 0 2 5 2. + 0 + 7.2766090743243694e-003 + 5.5776178836822510e-002 + -2.9502439498901367e-001 + <_> + + <_> + + + + <_> + 5 11 2 1 -1. + <_> + 6 11 1 1 2. + 0 + -1.1845510016428307e-004 + 1.2008129805326462e-001 + -1.3027560710906982e-001 + <_> + + <_> + + + + <_> + 11 0 4 4 -1. + <_> + 12 0 2 4 2. + 0 + -1.1836069636046886e-002 + -3.0786681175231934e-001 + 5.2134670317173004e-002 + <_> + + <_> + + + + <_> + 0 11 10 1 -1. + <_> + 5 11 5 1 2. + 0 + 1.1582080274820328e-002 + -6.4603932201862335e-002 + 2.4226869642734528e-001 + <_> + + <_> + + + + <_> + 12 7 2 3 -1. + <_> + 11 8 2 1 3. + 1 + 1.6641300171613693e-002 + 2.3613739758729935e-002 + -3.2030880451202393e-001 + <_> + + <_> + + + + <_> + 6 7 3 2 -1. + <_> + 7 8 1 2 3. + 1 + -1.4670539647340775e-002 + -4.1521430015563965e-001 + 3.6382548511028290e-002 + <_> + + <_> + + + + <_> + 7 0 6 8 -1. + <_> + 10 0 3 4 2. + <_> + 7 4 3 4 2. + 0 + -7.1266278624534607e-002 + 8.8978268206119537e-002 + -2.7521649375557899e-002 + <_> + + <_> + + + + <_> + 5 0 6 8 -1. + <_> + 5 0 3 4 2. + <_> + 8 4 3 4 2. + 0 + -4.5930789783596992e-003 + 1.0312590003013611e-001 + -1.5684939920902252e-001 + <_> + + <_> + + + + <_> + 13 2 4 1 -1. + <_> + 14 3 2 1 2. + 1 + -2.1038690581917763e-002 + -4.1231220960617065e-001 + 2.6362419128417969e-002 + <_> + + <_> + + + + <_> + 5 2 1 4 -1. + <_> + 4 3 1 2 2. + 1 + -1.1634599650278687e-004 + 8.8270559906959534e-002 + -1.7683100700378418e-001 + <_> + + <_> + + + + <_> + 13 3 2 1 -1. + <_> + 13 3 1 1 2. + 1 + 1.0351010132580996e-004 + -4.0812540799379349e-002 + 4.4485118240118027e-002 + <_> + + <_> + + + + <_> + 5 3 1 2 -1. + <_> + 5 3 1 1 2. + 1 + 1.1750919744372368e-002 + 3.7474468350410461e-002 + -4.4839090108871460e-001 + <_> + + <_> + + + + <_> + 7 1 5 2 -1. + <_> + 7 2 5 1 2. + 0 + 1.6365600749850273e-002 + -5.3337760269641876e-002 + 2.3957200348377228e-001 + <_> + + <_> + + + + <_> + 3 0 4 5 -1. + <_> + 4 0 2 5 2. + 0 + -1.4152539893984795e-002 + -3.4904539585113525e-001 + 4.0583450347185135e-002 + <_> + + <_> + + + + <_> + 5 0 8 3 -1. + <_> + 5 1 8 1 3. + 0 + 1.8640389665961266e-002 + -7.8919850289821625e-002 + 1.7504720389842987e-001 + <_> + + <_> + + + + <_> + 4 0 2 2 -1. + <_> + 4 0 2 1 2. + 1 + 1.7988409847021103e-002 + 3.3721260726451874e-002 + -4.2088210582733154e-001 + <_> + + <_> + + + + <_> + 6 0 8 2 -1. + <_> + 6 1 8 1 2. + 0 + -1.4597839675843716e-002 + 1.7850220203399658e-001 + -7.9207688570022583e-002 + <_> + + <_> + + + + <_> + 6 6 2 3 -1. + <_> + 5 7 2 1 3. + 1 + -1.1776429601013660e-002 + 2.0177559554576874e-001 + -6.4572930335998535e-002 + <_> + + <_> + + + + <_> + 10 6 3 2 -1. + <_> + 11 6 1 2 3. + 0 + -3.0500749126076698e-003 + 1.7109319567680359e-001 + -8.1359818577766418e-002 + <_> + + <_> + + + + <_> + 2 0 4 9 -1. + <_> + 3 0 2 9 2. + 0 + -5.5906981229782104e-002 + -6.9485092163085938e-001 + 1.9316319376230240e-002 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 0 11 9 1 2. + 0 + 8.7083891034126282e-002 + 1.9366340711712837e-002 + -5.7769888639450073e-001 + <_> + + <_> + + + + <_> + 0 3 2 5 -1. + <_> + 1 3 1 5 2. + 0 + -4.5398990623652935e-003 + 1.1768320202827454e-001 + -1.1205779761075974e-001 + <_> + + <_> + + + + <_> + 16 7 2 2 -1. + <_> + 16 7 1 2 2. + 1 + -1.5185469761490822e-002 + 1.2016219645738602e-001 + -4.3419301509857178e-002 + <_> + + <_> + + + + <_> + 2 7 2 2 -1. + <_> + 2 7 2 1 2. + 1 + 7.1984431706368923e-003 + -3.5740990191698074e-002 + 3.8612338900566101e-001 + <_> + + <_> + + + + <_> + 14 10 1 2 -1. + <_> + 14 11 1 1 2. + 0 + 1.0633750207489356e-004 + -1.0959289968013763e-001 + 5.4616861045360565e-002 + <_> + + <_> + + + + <_> + 1 8 12 3 -1. + <_> + 5 8 4 3 3. + 0 + -1.0189989954233170e-001 + -4.9526950716972351e-001 + 2.5969929993152618e-002 + <_> + + <_> + + + + <_> + 14 10 1 2 -1. + <_> + 14 11 1 1 2. + 0 + -1.2038920249324292e-004 + 1.2273380160331726e-001 + -4.1162900626659393e-002 + <_> + + <_> + + + + <_> + 3 10 1 2 -1. + <_> + 3 11 1 1 2. + 0 + 1.0814509732881561e-004 + -1.6402480006217957e-001 + 8.0438762903213501e-002 + <_> + + <_> + + + + <_> + 15 10 3 2 -1. + <_> + 15 11 3 1 2. + 0 + 1.0482760146260262e-002 + 3.9343621581792831e-002 + -2.6814600825309753e-001 + <_> + + <_> + + + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + 0 + -7.9093724489212036e-003 + -4.1322740912437439e-001 + 3.0046500265598297e-002 + <_> + + <_> + + + + <_> + 10 6 3 2 -1. + <_> + 11 6 1 2 3. + 0 + 1.3081150129437447e-002 + -3.3539541065692902e-002 + 2.3053109645843506e-001 + <_> + + <_> + + + + <_> + 4 4 1 3 -1. + <_> + 3 5 1 1 3. + 1 + -1.9690599292516708e-002 + -5.0715428590774536e-001 + 2.3815410211682320e-002 + <_> + + <_> + + + + <_> + 10 6 3 2 -1. + <_> + 11 6 1 2 3. + 0 + -1.0433509945869446e-002 + 1.2601679563522339e-001 + -1.9142389297485352e-002 + <_> + + <_> + + + + <_> + 6 0 4 1 -1. + <_> + 7 0 2 1 2. + 0 + 6.1845351010560989e-003 + 2.4645360186696053e-002 + -5.0535571575164795e-001 + <_> + + <_> + + + + <_> + 14 11 4 1 -1. + <_> + 15 11 2 1 2. + 0 + -2.0149839110672474e-003 + 1.5200349688529968e-001 + -5.0570148974657059e-002 + <_> + + <_> + + + + <_> + 0 11 4 1 -1. + <_> + 1 11 2 1 2. + 0 + 1.0860039765248075e-004 + -1.1278349906206131e-001 + 1.1125960201025009e-001 + <_> + + <_> + + + + <_> + 9 11 3 1 -1. + <_> + 10 11 1 1 3. + 0 + -8.9575027232058346e-005 + 1.1708500236272812e-001 + -1.0333900153636932e-001 + <_> + + <_> + + + + <_> + 6 11 3 1 -1. + <_> + 7 11 1 1 3. + 0 + 5.3389421664178371e-003 + 1.8005790188908577e-002 + -7.1671330928802490e-001 + <_> + + <_> + + + + <_> + 7 0 6 1 -1. + <_> + 9 0 2 1 3. + 0 + 1.1697039939463139e-002 + 1.3067330233752728e-002 + -2.3360380530357361e-001 + <_> + + <_> + + + + <_> + 1 0 15 2 -1. + <_> + 6 0 5 2 3. + 0 + 3.2932709902524948e-002 + -7.0233866572380066e-002 + 1.7548230290412903e-001 + <_> + + <_> + + + + <_> + 10 6 3 2 -1. + <_> + 11 6 1 2 3. + 0 + -4.5324359089136124e-002 + -8.2326531410217285e-001 + 3.6954008974134922e-003 + <_> + + <_> + + + + <_> + 5 6 3 2 -1. + <_> + 6 6 1 2 3. + 0 + -3.7475579883903265e-003 + 1.8588210642337799e-001 + -6.2639318406581879e-002 + <_> + + <_> + + + + <_> + 12 0 3 3 -1. + <_> + 13 1 1 3 3. + 1 + -3.2647240906953812e-002 + -2.0567889511585236e-001 + 1.8942670896649361e-002 + <_> + + <_> + + + + <_> + 6 5 3 2 -1. + <_> + 7 6 1 2 3. + 1 + 1.1062870034947991e-003 + -1.0367350280284882e-001 + 1.1428149789571762e-001 + <_> + + <_> + + + + <_> + 10 5 6 2 -1. + <_> + 13 5 3 1 2. + <_> + 10 6 3 1 2. + 0 + 5.4914089851081371e-003 + -3.9914030581712723e-002 + 7.6856799423694611e-002 + <_> + + <_> + + + + <_> + 2 5 6 2 -1. + <_> + 2 5 3 1 2. + <_> + 5 6 3 1 2. + 0 + -8.2964627072215080e-003 + 2.3060120642185211e-001 + -6.2546901404857635e-002 + <_> + + <_> + + + + <_> + 14 3 3 6 -1. + <_> + 14 3 3 3 2. + 1 + 3.8128688931465149e-002 + 1.9407819956541061e-002 + -1.4901480078697205e-001 + <_> + + <_> + + + + <_> + 4 3 6 3 -1. + <_> + 4 3 3 3 2. + 1 + -1.4787280559539795e-001 + -3.2149869203567505e-001 + 3.7092790007591248e-002 + <_> + + <_> + + + + <_> + 12 0 3 3 -1. + <_> + 13 1 1 3 3. + 1 + 6.4178421162068844e-003 + 3.7069149315357208e-002 + -9.5326058566570282e-002 + <_> + + <_> + + + + <_> + 5 4 2 2 -1. + <_> + 5 5 2 1 2. + 0 + -3.7382061127573252e-003 + 1.1806769669055939e-001 + -9.5922879874706268e-002 + <_> + + <_> + + + + <_> + 11 3 2 2 -1. + <_> + 11 3 1 2 2. + 1 + -2.5352180004119873e-002 + 2.7664989233016968e-001 + -1.6709599643945694e-002 + <_> + + <_> + + + + <_> + 7 3 2 2 -1. + <_> + 7 3 2 1 2. + 1 + 2.7535870671272278e-002 + 2.2979779168963432e-002 + -5.0430482625961304e-001 + <_> + + <_> + + + + <_> + 15 7 1 4 -1. + <_> + 15 8 1 2 2. + 0 + -7.9183047637343407e-003 + -3.1630870699882507e-001 + 1.2571889907121658e-002 + <_> + + <_> + + + + <_> + 2 7 1 4 -1. + <_> + 2 8 1 2 2. + 0 + 1.0292990191373974e-004 + -1.1330749839544296e-001 + 9.1955177485942841e-002 + <_> + + <_> + + + + <_> + 15 9 2 2 -1. + <_> + 16 9 1 1 2. + <_> + 15 10 1 1 2. + 0 + 9.0557747171260417e-005 + -6.9846302270889282e-002 + 7.2148926556110382e-002 + <_> + + <_> + + + + <_> + 1 9 2 2 -1. + <_> + 1 9 1 1 2. + <_> + 2 10 1 1 2. + 0 + 1.1734660074580461e-004 + -1.1082249879837036e-001 + 1.0122229903936386e-001 + <_> + + <_> + + + + <_> + 15 9 2 2 -1. + <_> + 16 9 1 1 2. + <_> + 15 10 1 1 2. + 0 + -1.1783619993366301e-004 + 1.4102859795093536e-001 + -9.9544271826744080e-002 + <_> + + <_> + + + + <_> + 0 3 3 3 -1. + <_> + 0 4 3 1 3. + 0 + -1.4811719767749310e-002 + -4.0603488683700562e-001 + 2.6852559298276901e-002 + <_> + + <_> + + + + <_> + 15 9 2 2 -1. + <_> + 16 9 1 1 2. + <_> + 15 10 1 1 2. + 0 + 8.3802377048414201e-005 + -9.3584023416042328e-002 + 9.4989858567714691e-002 + <_> + + <_> + + + + <_> + 1 9 2 2 -1. + <_> + 1 9 1 1 2. + <_> + 2 10 1 1 2. + 0 + -9.0464636741671711e-005 + 1.3583730161190033e-001 + -8.0927208065986633e-002 + <_> + + <_> + + + + <_> + 0 0 18 3 -1. + <_> + 6 0 6 3 3. + 0 + -6.3471987843513489e-002 + 1.2211640179157257e-001 + -8.2948893308639526e-002 + <_> + + <_> + + + + <_> + 3 3 12 3 -1. + <_> + 3 4 12 1 3. + 0 + -5.0417210906744003e-002 + 2.3326510190963745e-001 + -5.5467769503593445e-002 + <_> + + <_> + + + + <_> + 7 3 5 3 -1. + <_> + 7 4 5 1 3. + 0 + 2.5994319468736649e-002 + -4.3605301529169083e-002 + 2.7403908967971802e-001 + <_> + + <_> + + + + <_> + 5 0 2 5 -1. + <_> + 6 0 1 5 2. + 0 + -1.2084789574146271e-002 + -3.1832659244537354e-001 + 3.7234660238027573e-002 + <_> + + <_> + + + + <_> + 5 9 12 2 -1. + <_> + 5 9 6 2 2. + 0 + 1.7179569229483604e-002 + -6.3782699406147003e-002 + 1.1758829653263092e-001 + <_> + + <_> + + + + <_> + 0 5 7 3 -1. + <_> + 0 6 7 1 3. + 0 + -5.8567680418491364e-002 + -5.9245938062667847e-001 + 1.9378069788217545e-002 + <_> + + <_> + + + + <_> + 11 5 2 4 -1. + <_> + 12 5 1 2 2. + <_> + 11 7 1 2 2. + 0 + -8.1442911177873611e-003 + 1.8517829477787018e-001 + -2.3492490872740746e-002 + <_> + + <_> + + + + <_> + 8 8 2 4 -1. + <_> + 8 8 1 2 2. + <_> + 9 10 1 2 2. + 0 + 8.7976995855569839e-003 + 2.1573910489678383e-002 + -5.3710401058197021e-001 + <_> + + <_> + + + + <_> + 11 5 2 4 -1. + <_> + 12 5 1 2 2. + <_> + 11 7 1 2 2. + 0 + 5.8270487934350967e-003 + -3.1742990016937256e-002 + 7.7318146824836731e-002 + <_> + + <_> + + + + <_> + 5 5 2 4 -1. + <_> + 5 5 1 2 2. + <_> + 6 7 1 2 2. + 0 + 4.2799380607903004e-003 + -6.8623512983322144e-002 + 1.5985569357872009e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 6 10 6 2 3. + 0 + -4.7798909246921539e-002 + 1.6202180087566376e-001 + -7.1953997015953064e-002 + <_> + + <_> + + + + <_> + 0 0 6 8 -1. + <_> + 0 4 6 4 2. + 0 + 1.5101620554924011e-001 + 2.1610440686345100e-002 + -5.1186197996139526e-001 + <_> + + <_> + + + + <_> + 17 10 1 2 -1. + <_> + 17 11 1 1 2. + 0 + 1.3851689873263240e-003 + 5.1120720803737640e-002 + -1.0381700098514557e-001 + <_> + + <_> + + + + <_> + 0 10 1 2 -1. + <_> + 0 11 1 1 2. + 0 + -1.0411830153316259e-003 + -2.4396219849586487e-001 + 4.4499509036540985e-002 + <_> + + <_> + + + + <_> + 13 6 4 6 -1. + <_> + 15 6 2 3 2. + <_> + 13 9 2 3 2. + 0 + -1.3037609867751598e-002 + 1.8388019502162933e-001 + -5.6118920445442200e-002 + <_> + + <_> + + + + <_> + 4 6 10 6 -1. + <_> + 4 9 10 3 2. + 0 + -1.9242310896515846e-002 + -6.6036051511764526e-001 + 1.8416849896311760e-002 + <_> + + <_> + + + + <_> + 12 2 6 4 -1. + <_> + 12 2 3 4 2. + 0 + -2.0210029557347298e-002 + 8.8172823190689087e-002 + -1.2076240032911301e-001 + <_> + + <_> + + + + <_> + 0 3 18 1 -1. + <_> + 6 3 6 1 3. + 0 + 3.0882719904184341e-002 + -5.6851759552955627e-002 + 2.4138830602169037e-001 + -1.6223280429840088e+000 + 11 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 2 2 -1. + <_> + 5 6 1 2 2. + 0 + 6.2742438167333603e-003 + -3.5164728760719299e-001 + 6.6317689418792725e-001 + <_> + + <_> + + + + <_> + 5 2 10 6 -1. + <_> + 5 4 10 2 3. + 0 + -1.5394939482212067e-001 + 3.9916568994522095e-001 + -2.2923450171947479e-001 + <_> + + <_> + + + + <_> + 6 6 6 2 -1. + <_> + 8 6 2 2 3. + 0 + -2.3952860385179520e-002 + 3.0574640631675720e-001 + -2.3735469579696655e-001 + <_> + + <_> + + + + <_> + 11 5 7 6 -1. + <_> + 11 8 7 3 2. + 0 + 2.6925180107355118e-002 + -2.9053428769111633e-001 + 6.1234891414642334e-002 + <_> + + <_> + + + + <_> + 3 3 12 3 -1. + <_> + 6 3 6 3 2. + 0 + 2.4537709355354309e-001 + -1.2837280519306660e-003 + -9.9616601562500000e+002 + <_> + + <_> + + + + <_> + 10 4 6 3 -1. + <_> + 10 5 6 1 3. + 0 + -1.7590580508112907e-002 + 8.4333486855030060e-002 + -4.2432200163602829e-002 + <_> + + <_> + + + + <_> + 7 5 1 3 -1. + <_> + 6 6 1 1 3. + 1 + -6.7204791121184826e-003 + 2.9420810937881470e-001 + -1.7958919703960419e-001 + <_> + + <_> + + + + <_> + 3 2 15 6 -1. + <_> + 3 4 15 2 3. + 0 + -1.0374490171670914e-001 + 4.9512971192598343e-002 + -6.5407678484916687e-002 + <_> + + <_> + + + + <_> + 0 4 4 6 -1. + <_> + 2 4 2 6 2. + 0 + -2.3250220343470573e-002 + 1.6588999330997467e-001 + -2.5045189261436462e-001 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + -3.7479000166058540e-003 + 2.8132739663124084e-001 + -5.3847521543502808e-002 + <_> + + <_> + + + + <_> + 5 6 3 1 -1. + <_> + 6 6 1 1 3. + 0 + -2.5907990057021379e-003 + 2.8163778781890869e-001 + -1.1151909828186035e-001 + <_> + + <_> + + + + <_> + 15 2 3 10 -1. + <_> + 15 7 3 5 2. + 0 + 1.4214930124580860e-002 + -1.9974599778652191e-001 + 7.9408131539821625e-002 + <_> + + <_> + + + + <_> + 9 4 2 3 -1. + <_> + 8 5 2 1 3. + 1 + -2.7745040133595467e-002 + 3.2554331421852112e-001 + -8.1984512507915497e-002 + <_> + + <_> + + + + <_> + 12 6 2 2 -1. + <_> + 12 6 1 2 2. + 0 + 4.1590719483792782e-003 + -1.0548809915781021e-001 + 2.7419880032539368e-001 + <_> + + <_> + + + + <_> + 4 6 2 2 -1. + <_> + 5 6 1 2 2. + 0 + 6.2689487822353840e-003 + 1.1671839654445648e-001 + -4.6409261226654053e-001 + <_> + + <_> + + + + <_> + 9 4 4 2 -1. + <_> + 9 5 4 1 2. + 0 + 1.3945819810032845e-002 + -3.6791551858186722e-002 + 3.2415330410003662e-001 + <_> + + <_> + + + + <_> + 0 1 12 11 -1. + <_> + 4 1 4 11 3. + 0 + -2.2212809324264526e-001 + -5.3910827636718750e-001 + 5.5958230048418045e-002 + <_> + + <_> + + + + <_> + 9 2 3 7 -1. + <_> + 10 3 1 7 3. + 1 + -2.3864409886300564e-003 + -7.8881077468395233e-002 + 9.0365253388881683e-002 + <_> + + <_> + + + + <_> + 9 2 7 3 -1. + <_> + 8 3 7 1 3. + 1 + -3.1010150909423828e-002 + 1.8916240334510803e-001 + -1.3666459918022156e-001 + <_> + + <_> + + + + <_> + 12 9 2 1 -1. + <_> + 12 9 1 1 2. + 1 + -1.5247239498421550e-003 + 7.9918026924133301e-002 + -1.2402609735727310e-001 + <_> + + <_> + + + + <_> + 0 8 3 4 -1. + <_> + 0 9 3 2 2. + 0 + -4.4612451456487179e-003 + -3.5095998644828796e-001 + 6.1154339462518692e-002 + <_> + + <_> + + + + <_> + 15 10 3 2 -1. + <_> + 15 11 3 1 2. + 0 + -3.6754929460585117e-003 + -3.6432039737701416e-001 + 3.5381581634283066e-002 + <_> + + <_> + + + + <_> + 0 10 3 2 -1. + <_> + 0 11 3 1 2. + 0 + -3.1164109241217375e-003 + -4.8517960309982300e-001 + 4.2554508894681931e-002 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -2.4400090798735619e-002 + 1.5710610151290894e-001 + -1.2803450226783752e-001 + <_> + + <_> + + + + <_> + 5 0 6 4 -1. + <_> + 7 0 2 4 3. + 0 + -3.1188679859042168e-002 + -5.2750992774963379e-001 + 3.5487588495016098e-002 + <_> + + <_> + + + + <_> + 9 1 2 4 -1. + <_> + 9 2 2 2 2. + 0 + -1.3291889801621437e-002 + 2.8033518791198730e-001 + -3.7135049700737000e-002 + <_> + + <_> + + + + <_> + 0 4 18 4 -1. + <_> + 6 4 6 4 3. + 0 + -1.0183650255203247e-001 + 8.5829548537731171e-002 + -2.5175920128822327e-001 + <_> + + <_> + + + + <_> + 12 3 3 6 -1. + <_> + 13 3 1 6 3. + 0 + 2.4131929501891136e-002 + -5.3279381245374680e-002 + 3.5114678740501404e-001 + <_> + + <_> + + + + <_> + 3 3 3 6 -1. + <_> + 4 3 1 6 3. + 0 + -1.0242820280836895e-004 + 1.2026040256023407e-001 + -1.6874420642852783e-001 + <_> + + <_> + + + + <_> + 14 1 2 4 -1. + <_> + 13 2 2 2 2. + 1 + -2.9411478899419308e-003 + -1.2087970227003098e-001 + 8.8245153427124023e-002 + <_> + + <_> + + + + <_> + 6 0 5 4 -1. + <_> + 6 1 5 2 2. + 0 + -2.4746619164943695e-002 + 3.2455161213874817e-001 + -5.1918510347604752e-002 + <_> + + <_> + + + + <_> + 8 0 7 4 -1. + <_> + 8 1 7 2 2. + 0 + 1.8161980435252190e-002 + -9.7702257335186005e-002 + 1.5214580297470093e-001 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 8 9 2 3 2. + 0 + -7.9903062433004379e-003 + -4.3365329504013062e-001 + 3.9535731077194214e-002 + <_> + + <_> + + + + <_> + 3 1 12 2 -1. + <_> + 3 1 6 2 2. + 0 + 1.8511410802602768e-002 + -1.3791340589523315e-001 + 1.2306600064039230e-001 + <_> + + <_> + + + + <_> + 0 0 16 12 -1. + <_> + 8 0 8 12 2. + 0 + 1.8645690381526947e-001 + -7.2554931044578552e-002 + 3.1433451175689697e-001 + <_> + + <_> + + + + <_> + 9 3 3 2 -1. + <_> + 9 4 3 1 2. + 0 + 9.2281810939311981e-003 + -1.0550970211625099e-002 + 1.6694310307502747e-001 + <_> + + <_> + + + + <_> + 8 0 2 4 -1. + <_> + 9 0 1 4 2. + 0 + -9.0786498039960861e-003 + -3.6311098933219910e-001 + 4.1659221053123474e-002 + <_> + + <_> + + + + <_> + 12 9 2 1 -1. + <_> + 12 9 1 1 2. + 1 + -1.7083000391721725e-002 + -3.8664668798446655e-001 + 6.8237301893532276e-003 + <_> + + <_> + + + + <_> + 6 9 1 2 -1. + <_> + 6 9 1 1 2. + 1 + -7.1345129981637001e-004 + 7.3019772768020630e-002 + -2.0337800681591034e-001 + <_> + + <_> + + + + <_> + 9 5 3 1 -1. + <_> + 10 6 1 1 3. + 1 + -7.2595099918544292e-003 + 7.5123466551303864e-002 + -7.3528602719306946e-002 + <_> + + <_> + + + + <_> + 4 1 4 2 -1. + <_> + 5 2 2 2 2. + 1 + 1.2274079956114292e-002 + -9.0814672410488129e-002 + 1.5959280729293823e-001 + <_> + + <_> + + + + <_> + 10 3 4 4 -1. + <_> + 10 5 4 2 2. + 0 + 1.0794389992952347e-002 + -6.5551146864891052e-002 + 1.2086050212383270e-001 + <_> + + <_> + + + + <_> + 4 4 2 4 -1. + <_> + 4 6 2 2 2. + 0 + 2.4046689271926880e-002 + -6.6829457879066467e-002 + 2.6401260495185852e-001 + <_> + + <_> + + + + <_> + 16 5 2 3 -1. + <_> + 16 6 2 1 3. + 0 + -1.6337579116225243e-002 + -6.0672587156295776e-001 + 1.6483150422573090e-002 + <_> + + <_> + + + + <_> + 0 2 14 8 -1. + <_> + 0 2 7 4 2. + <_> + 7 6 7 4 2. + 0 + 2.0875459909439087e-001 + 3.0014140531420708e-002 + -4.3378108739852905e-001 + <_> + + <_> + + + + <_> + 15 0 3 4 -1. + <_> + 16 1 1 4 3. + 1 + 1.7724540084600449e-002 + 3.5838410258293152e-002 + -2.7149319648742676e-001 + <_> + + <_> + + + + <_> + 3 0 4 3 -1. + <_> + 2 1 4 1 3. + 1 + -3.3346381038427353e-002 + -4.2977070808410645e-001 + 3.1222699210047722e-002 + <_> + + <_> + + + + <_> + 9 5 2 2 -1. + <_> + 10 5 1 1 2. + <_> + 9 6 1 1 2. + 0 + 1.1433180043241009e-004 + -7.5262703001499176e-002 + 1.0365139693021774e-001 + <_> + + <_> + + + + <_> + 3 6 10 6 -1. + <_> + 3 6 5 3 2. + <_> + 8 9 5 3 2. + 0 + 5.8417830616235733e-002 + 5.5789869278669357e-002 + -2.5008231401443481e-001 + <_> + + <_> + + + + <_> + 9 3 3 2 -1. + <_> + 9 4 3 1 2. + 0 + -3.0410559847950935e-002 + 1.2386819720268250e-001 + -1.1707239784300327e-002 + <_> + + <_> + + + + <_> + 6 3 3 2 -1. + <_> + 6 4 3 1 2. + 0 + 8.6924238130450249e-003 + -4.1130390018224716e-002 + 3.5336831212043762e-001 + <_> + + <_> + + + + <_> + 9 1 2 1 -1. + <_> + 9 1 1 1 2. + 0 + 1.0731499787652865e-004 + -1.2875890731811523e-001 + 1.0753930360078812e-001 + <_> + + <_> + + + + <_> + 7 0 4 2 -1. + <_> + 8 0 2 2 2. + 0 + 7.6319379732012749e-003 + 3.1681880354881287e-002 + -4.6472150087356567e-001 + <_> + + <_> + + + + <_> + 8 0 3 3 -1. + <_> + 8 1 3 1 3. + 0 + -7.4789589270949364e-003 + 1.9505509734153748e-001 + -7.2351843118667603e-002 + <_> + + <_> + + + + <_> + 0 5 2 3 -1. + <_> + 0 6 2 1 3. + 0 + 8.6427042260766029e-003 + 3.1191099435091019e-002 + -4.9181848764419556e-001 + <_> + + <_> + + + + <_> + 5 0 12 3 -1. + <_> + 5 1 12 1 3. + 0 + 1.7501849681138992e-002 + -5.8864939957857132e-002 + 9.5755502581596375e-002 + <_> + + <_> + + + + <_> + 6 2 3 3 -1. + <_> + 7 3 1 3 3. + 1 + 1.6813769936561584e-002 + -5.8993399143218994e-002 + 2.1193510293960571e-001 + <_> + + <_> + + + + <_> + 13 4 1 3 -1. + <_> + 12 5 1 1 3. + 1 + -6.4404280856251717e-003 + 1.1298300325870514e-001 + -5.3965609520673752e-002 + <_> + + <_> + + + + <_> + 6 9 4 3 -1. + <_> + 7 9 2 3 2. + 0 + 6.1326851136982441e-003 + 3.7554848939180374e-002 + -3.5011461377143860e-001 + <_> + + <_> + + + + <_> + 16 10 2 2 -1. + <_> + 17 10 1 1 2. + <_> + 16 11 1 1 2. + 0 + 7.9694160376675427e-005 + -1.1506149917840958e-001 + 1.1556260287761688e-001 + <_> + + <_> + + + + <_> + 5 4 3 1 -1. + <_> + 6 5 1 1 3. + 1 + -9.7881779074668884e-003 + 1.5670649707317352e-001 + -8.1091910600662231e-002 + <_> + + <_> + + + + <_> + 13 2 3 3 -1. + <_> + 12 3 3 1 3. + 1 + 6.8345926702022552e-002 + -6.8403100594878197e-003 + 4.5982140302658081e-001 + <_> + + <_> + + + + <_> + 0 3 6 3 -1. + <_> + 0 4 6 1 3. + 0 + 2.8495989739894867e-002 + 3.0876770615577698e-002 + -4.4429719448089600e-001 + <_> + + <_> + + + + <_> + 16 10 2 2 -1. + <_> + 17 10 1 1 2. + <_> + 16 11 1 1 2. + 0 + -1.0740839934442192e-004 + 1.3578890264034271e-001 + -9.5775328576564789e-002 + <_> + + <_> + + + + <_> + 5 5 4 3 -1. + <_> + 4 6 4 1 3. + 1 + -2.5251049548387527e-002 + 2.1702249348163605e-001 + -5.6038159877061844e-002 + <_> + + <_> + + + + <_> + 8 10 6 2 -1. + <_> + 10 10 2 2 3. + 0 + -2.6355799287557602e-002 + -6.2069612741470337e-001 + 1.1239909566938877e-002 + <_> + + <_> + + + + <_> + 4 10 6 2 -1. + <_> + 6 10 2 2 3. + 0 + -1.7481319606304169e-002 + -4.6592488884925842e-001 + 2.7867669239640236e-002 + <_> + + <_> + + + + <_> + 15 0 3 1 -1. + <_> + 16 1 1 1 3. + 1 + -1.3110379688441753e-002 + -4.2753320932388306e-001 + 2.7280420064926147e-002 + <_> + + <_> + + + + <_> + 5 9 7 3 -1. + <_> + 5 10 7 1 3. + 0 + -1.4925089664757252e-002 + 2.6826688647270203e-001 + -5.1737930625677109e-002 + <_> + + <_> + + + + <_> + 15 0 3 1 -1. + <_> + 16 1 1 1 3. + 1 + 6.1949039809405804e-003 + 5.6169319897890091e-002 + -2.9064020514488220e-001 + <_> + + <_> + + + + <_> + 0 2 3 2 -1. + <_> + 0 3 3 1 2. + 0 + -1.3175229541957378e-002 + -4.2517969012260437e-001 + 2.5214929133653641e-002 + <_> + + <_> + + + + <_> + 15 2 3 3 -1. + <_> + 15 3 3 1 3. + 0 + -1.8924409523606300e-002 + -4.2502859234809875e-001 + 1.8218439072370529e-002 + <_> + + <_> + + + + <_> + 0 2 3 3 -1. + <_> + 0 3 3 1 3. + 0 + 1.3100420124828815e-002 + 3.1988378614187241e-002 + -3.6357548832893372e-001 + <_> + + <_> + + + + <_> + 16 0 2 2 -1. + <_> + 16 0 2 1 2. + 1 + 1.0436940006911755e-002 + -8.0210663378238678e-002 + 1.3946530222892761e-001 + <_> + + <_> + + + + <_> + 2 0 2 2 -1. + <_> + 2 0 1 2 2. + 1 + -7.9071624204516411e-003 + 2.0094929635524750e-001 + -6.7795939743518829e-002 + <_> + + <_> + + + + <_> + 2 0 16 1 -1. + <_> + 2 0 8 1 2. + 0 + 1.3043300248682499e-002 + -7.3729388415813446e-002 + 1.0887020081281662e-001 + <_> + + <_> + + + + <_> + 2 0 3 2 -1. + <_> + 3 1 1 2 3. + 1 + -2.2031240165233612e-002 + 3.7282109260559082e-001 + -3.5342540591955185e-002 + <_> + + <_> + + + + <_> + 15 1 3 4 -1. + <_> + 14 2 3 2 2. + 1 + -1.8900850787758827e-002 + 1.3418090343475342e-001 + -7.4449099600315094e-002 + <_> + + <_> + + + + <_> + 9 5 1 3 -1. + <_> + 8 6 1 1 3. + 1 + -1.1057750321924686e-002 + 2.1446719765663147e-001 + -6.2393780797719955e-002 + <_> + + <_> + + + + <_> + 15 1 3 4 -1. + <_> + 14 2 3 2 2. + 1 + -9.3442380428314209e-002 + -3.8823649287223816e-001 + 2.2986009716987610e-003 + <_> + + <_> + + + + <_> + 3 1 4 3 -1. + <_> + 4 2 2 3 2. + 1 + -3.4701049327850342e-002 + 2.8782969713211060e-001 + -4.2191769927740097e-002 + <_> + + <_> + + + + <_> + 13 0 3 3 -1. + <_> + 14 1 1 3 3. + 1 + 1.2548220343887806e-002 + 3.6994919180870056e-002 + -2.0595429837703705e-001 + <_> + + <_> + + + + <_> + 2 1 14 2 -1. + <_> + 2 2 14 1 2. + 0 + 3.3881239593029022e-002 + -4.9688011407852173e-002 + 2.8468221426010132e-001 + <_> + + <_> + + + + <_> + 12 1 3 10 -1. + <_> + 13 1 1 10 3. + 0 + -4.0402419865131378e-002 + -5.4226320981979370e-001 + 1.7669109627604485e-002 + <_> + + <_> + + + + <_> + 8 6 1 3 -1. + <_> + 7 7 1 1 3. + 1 + -8.7337046861648560e-003 + 2.2132049500942230e-001 + -5.3990170359611511e-002 + <_> + + <_> + + + + <_> + 3 6 15 3 -1. + <_> + 8 7 5 1 9. + 0 + -5.9824731200933456e-002 + 4.8347260802984238e-002 + -5.7685390114784241e-002 + <_> + + <_> + + + + <_> + 0 6 15 3 -1. + <_> + 5 7 5 1 9. + 0 + -2.9451259970664978e-001 + -4.5838949084281921e-001 + 2.7871569618582726e-002 + <_> + + <_> + + + + <_> + 3 3 12 6 -1. + <_> + 7 5 4 2 9. + 0 + -2.6713800430297852e-001 + 9.2300467193126678e-002 + -1.3205750286579132e-001 + <_> + + <_> + + + + <_> + 3 1 8 6 -1. + <_> + 3 3 8 2 3. + 0 + -1.2219720333814621e-001 + 2.4488289654254913e-001 + -5.3463630378246307e-002 + <_> + + <_> + + + + <_> + 11 2 3 1 -1. + <_> + 12 3 1 1 3. + 1 + -1.5119279734790325e-002 + -1.0751979798078537e-001 + 2.1027600392699242e-002 + <_> + + <_> + + + + <_> + 7 2 1 3 -1. + <_> + 6 3 1 1 3. + 1 + -1.5298509970307350e-002 + -4.4954741001129150e-001 + 2.7843480929732323e-002 + <_> + + <_> + + + + <_> + 7 0 4 1 -1. + <_> + 8 0 2 1 2. + 0 + -3.9626029320061207e-003 + -3.3244648575782776e-001 + 2.9125649482011795e-002 + <_> + + <_> + + + + <_> + 0 10 2 2 -1. + <_> + 0 10 1 1 2. + <_> + 1 11 1 1 2. + 0 + 8.6580650531686842e-005 + -9.9431760609149933e-002 + 1.0358399897813797e-001 + <_> + + <_> + + + + <_> + 16 10 2 2 -1. + <_> + 17 10 1 1 2. + <_> + 16 11 1 1 2. + 0 + 7.9694160376675427e-005 + -8.4918417036533356e-002 + 8.7375417351722717e-002 + <_> + + <_> + + + + <_> + 0 10 2 2 -1. + <_> + 0 10 1 1 2. + <_> + 1 11 1 1 2. + 0 + -1.1532790085766464e-004 + 1.3404299318790436e-001 + -8.5288509726524353e-002 + <_> + + <_> + + + + <_> + 12 1 3 10 -1. + <_> + 13 1 1 10 3. + 0 + -5.7475361973047256e-003 + 9.7248457372188568e-002 + -5.3111761808395386e-002 + <_> + + <_> + + + + <_> + 4 2 4 3 -1. + <_> + 5 2 2 3 2. + 0 + 8.7824072688817978e-003 + 4.3460998684167862e-002 + -2.4040910601615906e-001 + <_> + + <_> + + + + <_> + 13 9 4 3 -1. + <_> + 13 10 4 1 3. + 0 + 1.8991909921169281e-002 + 1.5963919460773468e-002 + -5.0120067596435547e-001 + <_> + + <_> + + + + <_> + 0 10 12 2 -1. + <_> + 6 10 6 2 2. + 0 + 3.8471799343824387e-002 + -4.3374348431825638e-002 + 2.4480819702148438e-001 + <_> + + <_> + + + + <_> + 9 11 6 1 -1. + <_> + 11 11 2 1 3. + 0 + 8.7654506787657738e-003 + 2.1779999136924744e-002 + -2.5518739223480225e-001 + <_> + + <_> + + + + <_> + 3 11 2 1 -1. + <_> + 4 11 1 1 2. + 0 + -1.1589690257096663e-004 + 1.0173690319061279e-001 + -1.0155139863491058e-001 + <_> + + <_> + + + + <_> + 13 10 2 2 -1. + <_> + 14 10 1 1 2. + <_> + 13 11 1 1 2. + 0 + 1.0908189869951457e-004 + -9.1913960874080658e-002 + 9.1868981719017029e-002 + <_> + + <_> + + + + <_> + 3 10 2 2 -1. + <_> + 3 10 1 1 2. + <_> + 4 11 1 1 2. + 0 + 8.5531923105008900e-005 + -1.0584980249404907e-001 + 1.1017540097236633e-001 + <_> + + <_> + + + + <_> + 13 10 2 2 -1. + <_> + 14 10 1 1 2. + <_> + 13 11 1 1 2. + 0 + -1.0539990034885705e-004 + 1.4530989527702332e-001 + -9.5378302037715912e-002 + <_> + + <_> + + + + <_> + 7 0 4 2 -1. + <_> + 7 1 4 1 2. + 0 + 1.2168530374765396e-002 + -5.1483400166034698e-002 + 1.9467009603977203e-001 + <_> + + <_> + + + + <_> + 14 0 3 2 -1. + <_> + 15 1 1 2 3. + 1 + 1.3115240260958672e-002 + 4.1314240545034409e-002 + -3.1291571259498596e-001 + <_> + + <_> + + + + <_> + 1 10 2 2 -1. + <_> + 1 10 1 1 2. + <_> + 2 11 1 1 2. + 0 + 9.6014147857204080e-005 + -9.9624000489711761e-002 + 1.0027159750461578e-001 + <_> + + <_> + + + + <_> + 9 0 3 4 -1. + <_> + 10 1 1 4 3. + 1 + -2.5422589853405952e-002 + 1.1692500114440918e-001 + -1.8570020794868469e-002 + <_> + + <_> + + + + <_> + 7 4 3 3 -1. + <_> + 8 5 1 1 9. + 0 + -1.9213970750570297e-002 + 1.4327329397201538e-001 + -6.9922059774398804e-002 + <_> + + <_> + + + + <_> + 9 0 3 4 -1. + <_> + 10 1 1 4 3. + 1 + 4.7866098582744598e-002 + 1.1692809872329235e-002 + -1.2271200120449066e-001 + <_> + + <_> + + + + <_> + 6 4 6 2 -1. + <_> + 9 4 3 2 2. + 0 + -1.1262509971857071e-002 + 1.1598969995975494e-001 + -9.3254141509532928e-002 + <_> + + <_> + + + + <_> + 8 3 2 3 -1. + <_> + 8 4 2 1 3. + 0 + -1.6207929700613022e-002 + 2.4618209898471832e-001 + -4.3379079550504684e-002 + <_> + + <_> + + + + <_> + 0 7 7 2 -1. + <_> + 0 8 7 1 2. + 0 + 1.4976999955251813e-004 + -2.4557319283485413e-001 + 4.6069670468568802e-002 + <_> + + <_> + + + + <_> + 16 10 2 2 -1. + <_> + 16 11 2 1 2. + 0 + 1.4740769751369953e-002 + 1.0909680277109146e-002 + -6.3333719968795776e-001 + <_> + + <_> + + + + <_> + 0 10 2 2 -1. + <_> + 0 11 2 1 2. + 0 + 9.7150652436539531e-005 + -1.5137399733066559e-001 + 7.5497470796108246e-002 + <_> + + <_> + + + + <_> + 14 0 3 2 -1. + <_> + 15 1 1 2 3. + 1 + -1.2693350203335285e-002 + -2.3802100121974945e-001 + 4.0871001780033112e-002 + <_> + + <_> + + + + <_> + 3 5 12 3 -1. + <_> + 6 5 6 3 2. + 0 + 7.0101968944072723e-002 + 1.5777869150042534e-002 + -6.2344980239868164e-001 + <_> + + <_> + + + + <_> + 7 8 4 3 -1. + <_> + 7 9 4 1 3. + 0 + -9.0956473723053932e-003 + 2.2302170097827911e-001 + -5.0494540482759476e-002 + <_> + + <_> + + + + <_> + 4 0 2 3 -1. + <_> + 3 1 2 1 3. + 1 + 1.0229200124740601e-002 + 4.6729099005460739e-002 + -2.4563209712505341e-001 + <_> + + <_> + + + + <_> + 6 1 7 3 -1. + <_> + 6 2 7 1 3. + 0 + -1.9207410514354706e-002 + 2.1942460536956787e-001 + -4.6960771083831787e-002 + <_> + + <_> + + + + <_> + 5 8 1 4 -1. + <_> + 5 9 1 2 2. + 0 + 1.0802529868669808e-004 + -1.0915499925613403e-001 + 8.9894726872444153e-002 + <_> + + <_> + + + + <_> + 16 2 1 9 -1. + <_> + 13 5 1 3 3. + 1 + 5.9888280928134918e-002 + -1.2375240214169025e-002 + 3.0649530887603760e-001 + <_> + + <_> + + + + <_> + 2 2 9 1 -1. + <_> + 5 5 3 1 3. + 1 + -1.2133570015430450e-001 + -4.4181579351425171e-001 + 2.2245900705456734e-002 + <_> + + <_> + + + + <_> + 14 10 2 2 -1. + <_> + 15 10 1 1 2. + <_> + 14 11 1 1 2. + 0 + 1.0026310337707400e-004 + -7.5078979134559631e-002 + 7.0171989500522614e-002 + <_> + + <_> + + + + <_> + 2 10 2 2 -1. + <_> + 2 10 1 1 2. + <_> + 3 11 1 1 2. + 0 + 1.0822709737112746e-004 + -9.5590889453887939e-002 + 9.7991749644279480e-002 + <_> + + <_> + + + + <_> + 16 10 2 2 -1. + <_> + 17 10 1 1 2. + <_> + 16 11 1 1 2. + 0 + -1.0740839934442192e-004 + 8.9312888681888580e-002 + -5.8937720954418182e-002 + <_> + + <_> + + + + <_> + 4 9 4 3 -1. + <_> + 5 9 2 3 2. + 0 + 8.1779044121503830e-003 + 2.8866490349173546e-002 + -3.2336440682411194e-001 + <_> + + <_> + + + + <_> + 10 5 3 2 -1. + <_> + 11 6 1 2 3. + 1 + -1.2426340021193027e-002 + 1.5125119686126709e-001 + -8.9751720428466797e-002 + <_> + + <_> + + + + <_> + 4 2 10 3 -1. + <_> + 4 3 10 1 3. + 0 + -1.6673840582370758e-002 + 1.6337050497531891e-001 + -6.1544839292764664e-002 + <_> + + <_> + + + + <_> + 11 2 2 3 -1. + <_> + 11 3 2 1 3. + 0 + 1.1108940234407783e-003 + -4.4395659118890762e-002 + 5.8737680315971375e-002 + <_> + + <_> + + + + <_> + 5 2 2 3 -1. + <_> + 5 3 2 1 3. + 0 + 6.3430960290133953e-003 + -6.7445211112499237e-002 + 1.5874649584293365e-001 + <_> + + <_> + + + + <_> + 1 1 16 3 -1. + <_> + 5 1 8 3 2. + 0 + -4.5497350394725800e-002 + 1.2980030477046967e-001 + -9.6899092197418213e-002 + <_> + + <_> + + + + <_> + 3 4 8 4 -1. + <_> + 3 5 8 2 2. + 0 + -2.6433700695633888e-002 + 9.4376727938652039e-002 + -1.0849659889936447e-001 + <_> + + <_> + + + + <_> + 15 3 3 3 -1. + <_> + 15 4 3 1 3. + 0 + -2.1796820685267448e-002 + -5.6385380029678345e-001 + 2.1219300106167793e-002 + <_> + + <_> + + + + <_> + 0 3 3 3 -1. + <_> + 0 4 3 1 3. + 0 + 8.7439846247434616e-003 + 3.2976679503917694e-002 + -2.8045099973678589e-001 + <_> + + <_> + + + + <_> + 16 10 2 2 -1. + <_> + 17 10 1 1 2. + <_> + 16 11 1 1 2. + 0 + 7.8902099630795419e-005 + -6.3391529023647308e-002 + 5.9122908860445023e-002 + <_> + + <_> + + + + <_> + 0 10 2 2 -1. + <_> + 0 10 1 1 2. + <_> + 1 11 1 1 2. + 0 + 8.6580650531686842e-005 + -9.6938036382198334e-002 + 1.0047750174999237e-001 + -1.6293729543685913e+000 + 12 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.1782609857618809e-002 + -4.1238281130790710e-001 + 8.6988270282745361e-001 + <_> + + <_> + + + + <_> + 8 3 3 3 -1. + <_> + 8 4 3 1 3. + 0 + -1.7742900177836418e-002 + 7.5632858276367188e-001 + -1.5877389907836914e-001 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + 4.3491688556969166e-003 + -1.3528199493885040e-001 + 7.0891678333282471e-001 + <_> + + <_> + + + + <_> + 7 7 4 3 -1. + <_> + 7 8 4 1 3. + 0 + 1.4091270044445992e-002 + -1.6412720084190369e-001 + 6.1424720287322998e-001 + <_> + + <_> + + + + <_> + 4 6 3 2 -1. + <_> + 5 6 1 2 3. + 0 + -5.7054432108998299e-003 + 5.4331731796264648e-001 + -1.6219259798526764e-001 + <_> + + <_> + + + + <_> + 9 0 3 7 -1. + <_> + 10 1 1 7 3. + 1 + 1.5776239335536957e-002 + -3.4152381122112274e-002 + 1.8973289430141449e-001 + <_> + + <_> + + + + <_> + 9 0 7 3 -1. + <_> + 8 1 7 1 3. + 1 + 8.0932863056659698e-003 + -1.9709299504756927e-001 + 3.2210728526115417e-001 + <_> + + <_> + + + + <_> + 9 2 1 3 -1. + <_> + 9 3 1 1 3. + 0 + -5.9854150749742985e-003 + 5.6217777729034424e-001 + -6.9357901811599731e-002 + <_> + + <_> + + + + <_> + 5 4 3 3 -1. + <_> + 6 5 1 1 9. + 0 + -1.8062319606542587e-002 + 3.7098649144172668e-001 + -1.2705039978027344e-001 + <_> + + <_> + + + + <_> + 11 5 2 2 -1. + <_> + 12 5 1 1 2. + <_> + 11 6 1 1 2. + 0 + -3.6759639624506235e-003 + 4.1142329573631287e-001 + -7.1537837386131287e-002 + <_> + + <_> + + + + <_> + 5 5 2 2 -1. + <_> + 5 5 1 1 2. + <_> + 6 6 1 1 2. + 0 + -2.1540250163525343e-003 + 3.7564289569854736e-001 + -9.1973446309566498e-002 + <_> + + <_> + + + + <_> + 11 5 6 3 -1. + <_> + 13 6 2 1 9. + 0 + -3.0050940811634064e-002 + 3.1198319792747498e-001 + -9.8297983407974243e-002 + <_> + + <_> + + + + <_> + 6 7 2 2 -1. + <_> + 6 7 1 1 2. + <_> + 7 8 1 1 2. + 0 + -5.1365699619054794e-005 + 2.3951590061187744e-001 + -1.6076980531215668e-001 + <_> + + <_> + + + + <_> + 11 5 6 3 -1. + <_> + 13 6 2 1 9. + 0 + 7.7373638749122620e-002 + -2.3487670347094536e-002 + 5.5488550662994385e-001 + <_> + + <_> + + + + <_> + 1 5 6 3 -1. + <_> + 3 6 2 1 9. + 0 + -4.0747709572315216e-002 + 2.6812228560447693e-001 + -1.4000350236892700e-001 + <_> + + <_> + + + + <_> + 8 3 6 4 -1. + <_> + 8 3 3 4 2. + 0 + 4.0594231337308884e-002 + 2.7258900925517082e-002 + -2.6374179124832153e-001 + <_> + + <_> + + + + <_> + 3 4 8 3 -1. + <_> + 7 4 4 3 2. + 0 + -4.7825898946030065e-005 + 9.3977712094783783e-002 + -3.5795810818672180e-001 + <_> + + <_> + + + + <_> + 6 2 6 4 -1. + <_> + 6 3 6 2 2. + 0 + 4.4379208236932755e-002 + -7.2088733315467834e-002 + 4.6868190169334412e-001 + <_> + + <_> + + + + <_> + 0 2 2 10 -1. + <_> + 0 7 2 5 2. + 0 + 5.8061368763446808e-003 + -3.3395549654960632e-001 + 1.0214909911155701e-001 + <_> + + <_> + + + + <_> + 8 5 3 2 -1. + <_> + 9 5 1 2 3. + 0 + 8.8028358295559883e-003 + -2.5739600881934166e-002 + 4.3644779920578003e-001 + <_> + + <_> + + + + <_> + 7 5 3 2 -1. + <_> + 8 5 1 2 3. + 0 + 9.0131545439362526e-003 + -5.1000531762838364e-002 + 5.7023537158966064e-001 + <_> + + <_> + + + + <_> + 7 0 6 4 -1. + <_> + 9 0 2 4 3. + 0 + -2.5290340185165405e-002 + -3.5979458689689636e-001 + 7.1303091943264008e-002 + <_> + + <_> + + + + <_> + 0 0 14 12 -1. + <_> + 0 0 7 6 2. + <_> + 7 6 7 6 2. + 0 + -1.9525140523910522e-001 + -4.8977100849151611e-001 + 5.6384291499853134e-002 + <_> + + <_> + + + + <_> + 11 10 2 1 -1. + <_> + 11 10 1 1 2. + 0 + -2.6473659090697765e-003 + -3.3710619807243347e-001 + 3.4158378839492798e-002 + <_> + + <_> + + + + <_> + 5 10 2 1 -1. + <_> + 6 10 1 1 2. + 0 + -3.9261409256141633e-005 + 1.5813310444355011e-001 + -2.0216089487075806e-001 + <_> + + <_> + + + + <_> + 6 8 6 3 -1. + <_> + 6 9 6 1 3. + 0 + 2.2714860737323761e-002 + -6.4444392919540405e-002 + 4.4198501110076904e-001 + <_> + + <_> + + + + <_> + 4 1 4 3 -1. + <_> + 5 2 2 3 2. + 1 + -3.9951600134372711e-002 + 3.7973031401634216e-001 + -6.2915429472923279e-002 + <_> + + <_> + + + + <_> + 6 3 12 6 -1. + <_> + 10 3 4 6 3. + 0 + -2.4356140196323395e-001 + -3.0749571323394775e-001 + 3.1852040439844131e-002 + <_> + + <_> + + + + <_> + 0 4 16 7 -1. + <_> + 8 4 8 7 2. + 0 + -4.3897500634193420e-001 + 3.9641711115837097e-001 + -6.5206609666347504e-002 + <_> + + <_> + + + + <_> + 11 10 2 1 -1. + <_> + 11 10 1 1 2. + 0 + -4.0617240301799029e-005 + 1.3962450623512268e-001 + -1.2550500035285950e-001 + <_> + + <_> + + + + <_> + 5 10 2 1 -1. + <_> + 6 10 1 1 2. + 0 + 4.3697938963305205e-005 + -1.2014800310134888e-001 + 2.5546219944953918e-001 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 3.3634141087532043e-002 + -4.5507898926734924e-001 + 5.1609288901090622e-002 + <_> + + <_> + + + + <_> + 5 0 5 4 -1. + <_> + 5 1 5 2 2. + 0 + 3.1138129532337189e-002 + -8.3802923560142517e-002 + 2.9366040229797363e-001 + <_> + + <_> + + + + <_> + 6 11 8 1 -1. + <_> + 8 11 4 1 2. + 0 + 1.5724230557680130e-002 + 1.6777889803051949e-002 + -7.4661827087402344e-001 + <_> + + <_> + + + + <_> + 3 0 11 3 -1. + <_> + 3 1 11 1 3. + 0 + -2.2827949374914169e-002 + 3.1140440702438354e-001 + -7.4142500758171082e-002 + <_> + + <_> + + + + <_> + 6 11 8 1 -1. + <_> + 8 11 4 1 2. + 0 + 6.6454121842980385e-003 + 2.6253340765833855e-002 + -2.1291309595108032e-001 + <_> + + <_> + + + + <_> + 4 10 6 2 -1. + <_> + 6 10 2 2 3. + 0 + 1.2331400066614151e-002 + 4.0855400264263153e-002 + -5.2558171749114990e-001 + <_> + + <_> + + + + <_> + 7 0 6 4 -1. + <_> + 9 0 2 4 3. + 0 + 2.4869399145245552e-002 + 1.6519179567694664e-002 + -2.4012239277362823e-001 + <_> + + <_> + + + + <_> + 0 1 1 4 -1. + <_> + 0 3 1 2 2. + 0 + -7.0881461724638939e-003 + -3.2228660583496094e-001 + 6.2019370496273041e-002 + <_> + + <_> + + + + <_> + 6 1 6 4 -1. + <_> + 6 2 6 2 2. + 0 + -3.4650731831789017e-002 + 4.3350049853324890e-001 + -4.8822090029716492e-002 + <_> + + <_> + + + + <_> + 6 0 4 4 -1. + <_> + 7 0 2 4 2. + 0 + 7.6578720472753048e-003 + 6.4763158559799194e-002 + -3.2527589797973633e-001 + <_> + + <_> + + + + <_> + 6 4 6 3 -1. + <_> + 8 5 2 1 9. + 0 + -3.9454981684684753e-002 + 1.6538539528846741e-001 + -1.3421210646629333e-001 + <_> + + <_> + + + + <_> + 3 4 12 7 -1. + <_> + 6 4 6 7 2. + 0 + -1.9214299321174622e-001 + -3.7593689560890198e-001 + 6.3063777983188629e-002 + -1.7363870143890381e+000 + 13 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.5497770160436630e-002 + -3.6309579014778137e-001 + 8.4555262327194214e-001 + <_> + + <_> + + + + <_> + 9 0 3 8 -1. + <_> + 9 0 3 4 2. + 1 + -2.0898319780826569e-001 + -2.8083321452140808e-001 + 1.0766410082578659e-001 + <_> + + <_> + + + + <_> + 7 5 2 2 -1. + <_> + 7 5 1 1 2. + <_> + 8 6 1 1 2. + 0 + -3.6195109132677317e-003 + 6.7817902565002441e-001 + -1.9760650396347046e-001 + <_> + + <_> + + + + <_> + 10 3 1 3 -1. + <_> + 10 4 1 1 3. + 0 + -7.8276582062244415e-003 + 5.6059402227401733e-001 + -1.3372389972209930e-001 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 7 5 1 3 3. + 0 + 1.3660199940204620e-002 + -1.0383050143718719e-001 + 6.4858847856521606e-001 + <_> + + <_> + + + + <_> + 11 6 2 2 -1. + <_> + 12 6 1 1 2. + <_> + 11 7 1 1 2. + 0 + 3.1465899664908648e-003 + -1.2784099578857422e-001 + 4.7746801376342773e-001 + <_> + + <_> + + + + <_> + 5 6 2 2 -1. + <_> + 5 6 1 1 2. + <_> + 6 7 1 1 2. + 0 + 4.9735051579773426e-003 + -6.6067576408386230e-002 + 5.3896760940551758e-001 + <_> + + <_> + + + + <_> + 13 4 2 3 -1. + <_> + 12 5 2 1 3. + 1 + 1.8216289579868317e-002 + -8.9344531297683716e-002 + 4.2037069797515869e-001 + <_> + + <_> + + + + <_> + 4 5 3 3 -1. + <_> + 5 6 1 1 9. + 0 + -1.4441680163145065e-002 + 2.7944031357765198e-001 + -1.3541069626808167e-001 + <_> + + <_> + + + + <_> + 9 5 1 2 -1. + <_> + 9 6 1 1 2. + 0 + 3.9981860027182847e-005 + -1.3476949930191040e-001 + 1.3061609864234924e-001 + <_> + + <_> + + + + <_> + 5 6 4 2 -1. + <_> + 6 6 2 2 2. + 0 + -1.1218409985303879e-002 + 5.5477607250213623e-001 + -5.4050721228122711e-002 + <_> + + <_> + + + + <_> + 13 3 2 3 -1. + <_> + 12 4 2 1 3. + 1 + 3.8257170468568802e-002 + -2.9511810280382633e-003 + 3.5025680065155029e-001 + <_> + + <_> + + + + <_> + 5 3 3 2 -1. + <_> + 6 4 1 2 3. + 1 + -3.1136209145188332e-002 + 3.9581200480461121e-001 + -7.7712006866931915e-002 + <_> + + <_> + + + + <_> + 5 3 8 8 -1. + <_> + 9 3 4 4 2. + <_> + 5 7 4 4 2. + 0 + 5.6127890944480896e-002 + 6.5231159329414368e-002 + -4.5123818516731262e-001 + <_> + + <_> + + + + <_> + 8 5 2 2 -1. + <_> + 8 5 1 1 2. + <_> + 9 6 1 1 2. + 0 + -4.6596338506788015e-005 + 1.9990539550781250e-001 + -1.5452989935874939e-001 + <_> + + <_> + + + + <_> + 4 5 12 7 -1. + <_> + 7 5 6 7 2. + 0 + -1.2514979578554630e-002 + 4.8256270587444305e-002 + -1.9997639954090118e-001 + <_> + + <_> + + + + <_> + 0 0 12 10 -1. + <_> + 4 0 4 10 3. + 0 + 1.7952239513397217e-001 + 6.5345346927642822e-002 + -5.0162881612777710e-001 + <_> + + <_> + + + + <_> + 9 0 2 1 -1. + <_> + 9 0 1 1 2. + 0 + 4.3697938963305205e-005 + -1.4098809659481049e-001 + 1.1703769862651825e-001 + <_> + + <_> + + + + <_> + 0 0 1 12 -1. + <_> + 0 6 1 6 2. + 0 + -4.6865958720445633e-003 + -3.5993480682373047e-001 + 7.2028510272502899e-002 + <_> + + <_> + + + + <_> + 5 3 8 3 -1. + <_> + 5 4 8 1 3. + 0 + 3.5626258701086044e-002 + -6.4041122794151306e-002 + 4.4865629076957703e-001 + <_> + + <_> + + + + <_> + 5 4 3 2 -1. + <_> + 6 5 1 2 3. + 1 + 1.3676189817488194e-002 + -5.7538058608770370e-002 + 4.1195538640022278e-001 + <_> + + <_> + + + + <_> + 6 1 7 3 -1. + <_> + 6 2 7 1 3. + 0 + 2.8455330058932304e-002 + -8.2572557032108307e-002 + 3.0728879570960999e-001 + <_> + + <_> + + + + <_> + 7 0 4 2 -1. + <_> + 8 0 2 2 2. + 0 + 3.9930879138410091e-003 + 7.9742781817913055e-002 + -3.5738870501518250e-001 + <_> + + <_> + + + + <_> + 6 2 6 3 -1. + <_> + 6 3 6 1 3. + 0 + 4.0958970785140991e-002 + -6.2663957476615906e-002 + 4.1727420687675476e-001 + <_> + + <_> + + + + <_> + 1 11 6 1 -1. + <_> + 3 11 2 1 3. + 0 + -5.7679559104144573e-003 + -4.0190890431404114e-001 + 6.0980260372161865e-002 + <_> + + <_> + + + + <_> + 11 1 6 8 -1. + <_> + 13 1 2 8 3. + 0 + -1.6978530213236809e-002 + 1.5577870607376099e-001 + -1.2832540273666382e-001 + <_> + + <_> + + + + <_> + 1 1 6 8 -1. + <_> + 3 1 2 8 3. + 0 + -8.0770384520292282e-003 + 1.2041939795017242e-001 + -1.6271419823169708e-001 + <_> + + <_> + + + + <_> + 4 2 12 7 -1. + <_> + 7 2 6 7 2. + 0 + 1.8030419945716858e-002 + 3.4709710627794266e-002 + -2.6759231090545654e-001 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.5382760204374790e-002 + 5.6882061064243317e-002 + -3.9767611026763916e-001 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 5 1 3 3. + 0 + -9.9336765706539154e-003 + 3.6032059788703918e-001 + -6.6026233136653900e-002 + <_> + + <_> + + + + <_> + 0 10 2 2 -1. + <_> + 0 11 2 1 2. + 0 + -2.8156090993434191e-003 + -5.1109760999679565e-001 + 4.4887579977512360e-002 + <_> + + <_> + + + + <_> + 5 0 8 3 -1. + <_> + 5 1 8 1 3. + 0 + 2.9914719983935356e-002 + -7.5402297079563141e-002 + 3.0369639396667480e-001 + <_> + + <_> + + + + <_> + 0 10 16 2 -1. + <_> + 0 10 8 1 2. + <_> + 8 11 8 1 2. + 0 + -9.0450989082455635e-003 + -2.8374141454696655e-001 + 7.8973956406116486e-002 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 5 1 3 3. + 0 + 1.5734959393739700e-002 + -5.7694129645824432e-002 + 5.4260098934173584e-001 + <_> + + <_> + + + + <_> + 0 11 2 1 -1. + <_> + 1 11 1 1 2. + 0 + 4.1617371607571840e-005 + -1.3004170358181000e-001 + 1.5200050175189972e-001 + <_> + + <_> + + + + <_> + 6 0 12 12 -1. + <_> + 6 0 6 12 2. + 0 + 2.3746499419212341e-001 + 1.7602339386940002e-002 + -4.4681221246719360e-001 + <_> + + <_> + + + + <_> + 0 1 16 11 -1. + <_> + 8 1 8 11 2. + 0 + -6.0572451353073120e-001 + 3.2846671342849731e-001 + -7.1565687656402588e-002 + <_> + + <_> + + + + <_> + 7 8 4 3 -1. + <_> + 7 9 4 1 3. + 0 + 1.4338710345327854e-002 + -6.4759388566017151e-002 + 3.0051338672637939e-001 + <_> + + <_> + + + + <_> + 7 7 2 3 -1. + <_> + 7 8 2 1 3. + 0 + 6.4899460412561893e-003 + -8.5719607770442963e-002 + 2.4065899848937988e-001 + <_> + + <_> + + + + <_> + 9 5 2 2 -1. + <_> + 10 5 1 1 2. + <_> + 9 6 1 1 2. + 0 + -3.9261409256141633e-005 + 9.5390006899833679e-002 + -9.0216562151908875e-002 + <_> + + <_> + + + + <_> + 7 5 2 2 -1. + <_> + 7 5 1 1 2. + <_> + 8 6 1 1 2. + 0 + -3.6325189284980297e-003 + -3.5685008764266968e-001 + 5.8603391051292419e-002 + <_> + + <_> + + + + <_> + 12 5 3 3 -1. + <_> + 11 6 3 1 3. + 1 + -3.4756339155137539e-003 + 5.5268160998821259e-002 + -8.1110060214996338e-002 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 7 6 1 3 3. + 1 + 5.3725110774394125e-005 + -1.5239860117435455e-001 + 1.4978319406509399e-001 + <_> + + <_> + + + + <_> + 8 5 2 2 -1. + <_> + 9 5 1 1 2. + <_> + 8 6 1 1 2. + 0 + -3.9981860027182847e-005 + 1.6690729558467865e-001 + -1.3983109593391418e-001 + <_> + + <_> + + + + <_> + 7 6 3 1 -1. + <_> + 8 6 1 1 3. + 0 + 6.6550569608807564e-003 + -3.4786760807037354e-002 + 4.9454191327095032e-001 + <_> + + <_> + + + + <_> + 12 10 1 2 -1. + <_> + 12 11 1 1 2. + 0 + 3.6582579923560843e-005 + -1.8221789598464966e-001 + 7.0058353245258331e-002 + <_> + + <_> + + + + <_> + 0 9 14 1 -1. + <_> + 7 9 7 1 2. + 0 + 2.4936700239777565e-002 + -5.5899091064929962e-002 + 3.3210518956184387e-001 + <_> + + <_> + + + + <_> + 8 11 2 1 -1. + <_> + 8 11 1 1 2. + 0 + -2.2233650088310242e-003 + -4.7210049629211426e-001 + 3.9656650274991989e-002 + <_> + + <_> + + + + <_> + 4 0 6 4 -1. + <_> + 6 0 2 4 3. + 0 + 3.0253460630774498e-002 + 3.7779778242111206e-002 + -3.8744398951530457e-001 + <_> + + <_> + + + + <_> + 4 0 10 3 -1. + <_> + 4 1 10 1 3. + 0 + -2.5146869942545891e-002 + 2.5839841365814209e-001 + -6.3479728996753693e-002 + <_> + + <_> + + + + <_> + 8 1 2 1 -1. + <_> + 9 1 1 1 2. + 0 + -3.9261409256141633e-005 + 1.1035069823265076e-001 + -1.5140140056610107e-001 + <_> + + <_> + + + + <_> + 7 2 4 3 -1. + <_> + 7 3 4 1 3. + 0 + -2.5253789499402046e-002 + 4.0381500124931335e-001 + -4.1429519653320313e-002 + <_> + + <_> + + + + <_> + 0 3 1 2 -1. + <_> + 0 4 1 1 2. + 0 + -2.6092969346791506e-003 + -2.9758319258689880e-001 + 5.6268099695444107e-002 + <_> + + <_> + + + + <_> + 9 3 3 2 -1. + <_> + 10 4 1 2 3. + 1 + -5.0167189911007881e-003 + 4.0989220142364502e-002 + -9.0509623289108276e-002 + <_> + + <_> + + + + <_> + 5 7 2 1 -1. + <_> + 6 7 1 1 2. + 0 + 5.5015629186527804e-005 + -1.0549169778823853e-001 + 1.4567929506301880e-001 + <_> + + <_> + + + + <_> + 4 6 12 5 -1. + <_> + 7 6 6 5 2. + 0 + -2.1134430170059204e-001 + -3.9282271265983582e-001 + 6.5089040435850620e-003 + <_> + + <_> + + + + <_> + 2 6 12 5 -1. + <_> + 5 6 6 5 2. + 0 + 5.2607029676437378e-002 + 3.4969959408044815e-002 + -4.7080901265144348e-001 + <_> + + <_> + + + + <_> + 12 0 6 12 -1. + <_> + 14 0 2 12 3. + 0 + -2.3675639182329178e-002 + 2.1920250356197357e-001 + -1.7777769267559052e-001 + <_> + + <_> + + + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + 0 + -8.3744488656520844e-003 + -4.8220250010490417e-001 + 3.3246569335460663e-002 + <_> + + <_> + + + + <_> + 12 0 6 12 -1. + <_> + 14 0 2 12 3. + 0 + -1.8032009899616241e-001 + -5.0746428966522217e-001 + 4.7727171331644058e-003 + <_> + + <_> + + + + <_> + 0 0 6 12 -1. + <_> + 2 0 2 12 3. + 0 + -8.0522168427705765e-003 + 1.3129340112209320e-001 + -1.2621930241584778e-001 + <_> + + <_> + + + + <_> + 16 5 2 6 -1. + <_> + 16 5 1 6 2. + 0 + -1.3076379895210266e-002 + 1.8919549882411957e-001 + -5.6553479284048080e-002 + <_> + + <_> + + + + <_> + 0 5 2 6 -1. + <_> + 1 5 1 6 2. + 0 + 1.9346589222550392e-002 + -3.0950130894780159e-002 + 5.7245761156082153e-001 + <_> + + <_> + + + + <_> + 12 5 4 1 -1. + <_> + 13 5 2 1 2. + 0 + 6.9990791380405426e-003 + -3.7769541144371033e-002 + 4.1835439205169678e-001 + <_> + + <_> + + + + <_> + 9 3 4 3 -1. + <_> + 8 4 4 1 3. + 1 + -1.4297800138592720e-002 + 1.0722269862890244e-001 + -1.4301869273185730e-001 + <_> + + <_> + + + + <_> + 10 7 3 1 -1. + <_> + 11 7 1 1 3. + 0 + -5.0943519454449415e-005 + 9.8646506667137146e-002 + -8.9524149894714355e-002 + <_> + + <_> + + + + <_> + 5 6 3 3 -1. + <_> + 6 7 1 1 9. + 0 + -1.4215099625289440e-002 + 2.3867559432983398e-001 + -6.0889568179845810e-002 + <_> + + <_> + + + + <_> + 10 5 1 2 -1. + <_> + 10 6 1 1 2. + 0 + 4.4006508687743917e-005 + -1.2491259723901749e-001 + 9.6516169607639313e-002 + <_> + + <_> + + + + <_> + 0 3 1 4 -1. + <_> + 0 4 1 2 2. + 0 + 2.8896171133965254e-003 + 5.1770750433206558e-002 + -2.7633678913116455e-001 + <_> + + <_> + + + + <_> + 16 1 2 8 -1. + <_> + 14 3 2 4 2. + 1 + -1.4485709369182587e-001 + -3.9524438977241516e-001 + 1.4283739961683750e-002 + <_> + + <_> + + + + <_> + 3 6 10 6 -1. + <_> + 3 6 5 3 2. + <_> + 8 9 5 3 2. + 0 + -7.4485607445240021e-002 + -3.5406059026718140e-001 + 3.9224278181791306e-002 + <_> + + <_> + + + + <_> + 14 3 2 3 -1. + <_> + 13 4 2 1 3. + 1 + -2.4072000756859779e-002 + 2.3231640458106995e-001 + -3.2994810491800308e-002 + <_> + + <_> + + + + <_> + 5 2 3 3 -1. + <_> + 6 3 1 3 3. + 1 + 1.9683260470628738e-002 + -5.4490741342306137e-002 + 2.5256949663162231e-001 + <_> + + <_> + + + + <_> + 13 4 3 4 -1. + <_> + 13 4 3 2 2. + 1 + 1.7556510865688324e-002 + 3.3798649907112122e-002 + -1.7246970534324646e-001 + <_> + + <_> + + + + <_> + 1 4 12 6 -1. + <_> + 1 4 6 3 2. + <_> + 7 7 6 3 2. + 0 + 1.5962730348110199e-001 + 3.2824710011482239e-002 + -4.9014711380004883e-001 + <_> + + <_> + + + + <_> + 13 3 2 3 -1. + <_> + 12 4 2 1 3. + 1 + 1.5168360434472561e-002 + -3.1594321131706238e-002 + 1.3700030744075775e-001 + <_> + + <_> + + + + <_> + 5 3 3 2 -1. + <_> + 6 4 1 2 3. + 1 + -1.8054259940981865e-002 + 1.8131910264492035e-001 + -7.3166027665138245e-002 + -1.7063260078430176e+000 + 14 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.5180639028549194e-002 + 6.9966208934783936e-001 + -3.5598480701446533e-001 + <_> + + <_> + + + + <_> + 8 3 3 3 -1. + <_> + 8 4 3 1 3. + 0 + -2.4972269311547279e-002 + 6.5660268068313599e-001 + -1.3398469984531403e-001 + <_> + + <_> + + + + <_> + 5 3 3 3 -1. + <_> + 6 4 1 3 3. + 1 + -4.5527230948209763e-002 + 5.7874792814254761e-001 + -1.2656690180301666e-001 + <_> + + <_> + + + + <_> + 9 6 3 1 -1. + <_> + 10 6 1 1 3. + 0 + -6.7877001129090786e-003 + 3.2121130824089050e-001 + -9.2314563691616058e-002 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + 1.0429969988763332e-002 + -8.6593657732009888e-002 + 6.6687929630279541e-001 + <_> + + <_> + + + + <_> + 10 4 6 6 -1. + <_> + 12 6 2 2 9. + 0 + 1.9914349913597107e-001 + -1.1814249679446220e-002 + 2.8926709294319153e-001 + <_> + + <_> + + + + <_> + 2 4 6 6 -1. + <_> + 4 6 2 2 9. + 0 + -1.3934800028800964e-001 + 2.7977100014686584e-001 + -1.1972069740295410e-001 + <_> + + <_> + + + + <_> + 8 2 4 3 -1. + <_> + 8 3 4 1 3. + 0 + -3.4900620579719543e-002 + 6.0853272676467896e-001 + -3.3297471702098846e-002 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + 4.1045788675546646e-003 + 7.4957266449928284e-002 + -5.1426941156387329e-001 + <_> + + <_> + + + + <_> + 11 5 2 4 -1. + <_> + 12 5 1 2 2. + <_> + 11 7 1 2 2. + 0 + 1.1164579540491104e-002 + -4.2139139026403427e-002 + 3.2087740302085876e-001 + <_> + + <_> + + + + <_> + 4 11 6 1 -1. + <_> + 6 11 2 1 3. + 0 + 5.9737460687756538e-003 + 5.8269631117582321e-002 + -5.2123707532882690e-001 + <_> + + <_> + + + + <_> + 11 5 2 4 -1. + <_> + 12 5 1 2 2. + <_> + 11 7 1 2 2. + 0 + -1.0200380347669125e-002 + 2.6471599936485291e-001 + -4.6848529018461704e-003 + <_> + + <_> + + + + <_> + 5 5 2 4 -1. + <_> + 5 5 1 2 2. + <_> + 6 7 1 2 2. + 0 + 6.4758108928799629e-003 + -1.0912910103797913e-001 + 3.3013060688972473e-001 + <_> + + <_> + + + + <_> + 5 5 12 4 -1. + <_> + 5 7 12 2 2. + 0 + 4.2913921177387238e-002 + -2.7027499675750732e-001 + 5.7806611061096191e-002 + <_> + + <_> + + + + <_> + 2 3 2 2 -1. + <_> + 2 3 2 1 2. + 1 + 7.2694900445640087e-003 + 6.7417383193969727e-002 + -3.9489638805389404e-001 + <_> + + <_> + + + + <_> + 7 11 6 1 -1. + <_> + 9 11 2 1 3. + 0 + 5.2788378670811653e-003 + 4.4355489313602448e-002 + -4.2548438906669617e-001 + <_> + + <_> + + + + <_> + 3 5 4 4 -1. + <_> + 3 5 2 2 2. + <_> + 5 7 2 2 2. + 0 + -2.2712450474500656e-002 + 4.3758571147918701e-001 + -5.6706890463829041e-002 + <_> + + <_> + + + + <_> + 6 10 6 2 -1. + <_> + 8 10 2 2 3. + 0 + -1.8580600619316101e-002 + -6.1528331041336060e-001 + 4.0651239454746246e-002 + <_> + + <_> + + + + <_> + 6 4 6 3 -1. + <_> + 6 5 6 1 3. + 0 + -5.2815988659858704e-002 + 3.9717459678649902e-001 + -5.5707391351461411e-002 + <_> + + <_> + + + + <_> + 17 9 1 3 -1. + <_> + 17 10 1 1 3. + 0 + 2.7739210054278374e-003 + 7.1527756750583649e-002 + -3.6739039421081543e-001 + <_> + + <_> + + + + <_> + 2 0 12 2 -1. + <_> + 8 0 6 2 2. + 0 + -2.1746100857853889e-002 + 1.3615989685058594e-001 + -1.5944430232048035e-001 + <_> + + <_> + + + + <_> + 17 9 1 3 -1. + <_> + 17 10 1 1 3. + 0 + -1.6994749894365668e-003 + -2.8949651122093201e-001 + 7.2794176638126373e-002 + <_> + + <_> + + + + <_> + 6 4 5 8 -1. + <_> + 6 6 5 4 2. + 0 + 7.4074663221836090e-002 + 3.6687631160020828e-002 + -4.8284009099006653e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.5314641445875168e-002 + -2.9834219813346863e-001 + 6.0024339705705643e-002 + <_> + + <_> + + + + <_> + 7 5 2 3 -1. + <_> + 6 6 2 1 3. + 1 + 4.3436840176582336e-002 + -3.6994270980358124e-002 + 6.1292910575866699e-001 + <_> + + <_> + + + + <_> + 10 5 3 2 -1. + <_> + 11 6 1 2 3. + 1 + -9.1329999268054962e-003 + 9.7552441060543060e-002 + -8.2057207822799683e-002 + <_> + + <_> + + + + <_> + 6 3 6 6 -1. + <_> + 8 5 2 2 9. + 0 + -9.7359552979469299e-002 + 1.0101430118083954e-001 + -1.9310599565505981e-001 + <_> + + <_> + + + + <_> + 10 5 3 2 -1. + <_> + 11 6 1 2 3. + 1 + 3.7818439304828644e-002 + -8.6803017184138298e-003 + 4.1474840044975281e-001 + <_> + + <_> + + + + <_> + 8 5 2 3 -1. + <_> + 7 6 2 1 3. + 1 + -2.5347029790282249e-002 + 4.2153739929199219e-001 + -4.4529590755701065e-002 + <_> + + <_> + + + + <_> + 10 11 4 1 -1. + <_> + 11 11 2 1 2. + 0 + 2.7832679916173220e-003 + 4.8425801098346710e-002 + -3.4922879934310913e-001 + <_> + + <_> + + + + <_> + 8 5 2 3 -1. + <_> + 7 6 2 1 3. + 1 + 2.3268889635801315e-002 + -6.6568560898303986e-002 + 2.6760068535804749e-001 + <_> + + <_> + + + + <_> + 11 0 4 3 -1. + <_> + 12 0 2 3 2. + 0 + 3.1013819389045238e-003 + 7.8247211873531342e-002 + -3.5030668973922729e-001 + <_> + + <_> + + + + <_> + 3 0 4 3 -1. + <_> + 4 0 2 3 2. + 0 + 1.1671819724142551e-002 + 3.1337831169366837e-002 + -4.9763050675392151e-001 + <_> + + <_> + + + + <_> + 17 0 1 10 -1. + <_> + 17 5 1 5 2. + 0 + 4.7239661216735840e-002 + 2.2004479542374611e-002 + -5.3065848350524902e-001 + <_> + + <_> + + + + <_> + 0 0 1 10 -1. + <_> + 0 5 1 5 2. + 0 + -1.4776130206882954e-002 + -3.2586520910263062e-001 + 5.5654410272836685e-002 + <_> + + <_> + + + + <_> + 2 5 15 2 -1. + <_> + 7 5 5 2 3. + 0 + -1.9921749830245972e-001 + -5.2553087472915649e-001 + 3.2468371093273163e-002 + <_> + + <_> + + + + <_> + 4 11 4 1 -1. + <_> + 5 11 2 1 2. + 0 + -4.0785730816423893e-003 + -4.8107388615608215e-001 + 2.9926039278507233e-002 + <_> + + <_> + + + + <_> + 5 9 8 3 -1. + <_> + 5 10 8 1 3. + 0 + -7.1787680499255657e-003 + 1.9346639513969421e-001 + -8.5371166467666626e-002 + <_> + + <_> + + + + <_> + 3 0 1 2 -1. + <_> + 3 0 1 1 2. + 1 + 6.9532832130789757e-003 + 4.7720771282911301e-002 + -3.3479538559913635e-001 + <_> + + <_> + + + + <_> + 9 2 3 3 -1. + <_> + 9 3 3 1 3. + 0 + -1.2821669690310955e-002 + 2.1228149533271790e-001 + -4.3001249432563782e-002 + <_> + + <_> + + + + <_> + 0 8 1 4 -1. + <_> + 0 10 1 2 2. + 0 + -4.7380151227116585e-003 + -4.9310049414634705e-001 + 3.3275339752435684e-002 + <_> + + <_> + + + + <_> + 16 1 1 9 -1. + <_> + 13 4 1 3 3. + 1 + -5.1670171320438385e-002 + 6.1839159578084946e-002 + -8.9411988854408264e-002 + <_> + + <_> + + + + <_> + 2 1 9 1 -1. + <_> + 5 4 3 1 3. + 1 + -1.2189070135354996e-001 + -5.4505228996276855e-001 + 3.2852120697498322e-002 + <_> + + <_> + + + + <_> + 14 8 4 3 -1. + <_> + 14 9 4 1 3. + 0 + -1.5401430428028107e-002 + -3.1807848811149597e-001 + 1.4967699535191059e-002 + <_> + + <_> + + + + <_> + 0 0 2 11 -1. + <_> + 1 0 1 11 2. + 0 + 3.3675070852041245e-002 + -2.7233030647039413e-002 + 5.3073042631149292e-001 + <_> + + <_> + + + + <_> + 16 6 2 6 -1. + <_> + 17 6 1 3 2. + <_> + 16 9 1 3 2. + 0 + 5.6405509822070599e-003 + -3.3072780817747116e-002 + 8.4785066545009613e-002 + <_> + + <_> + + + + <_> + 0 6 2 6 -1. + <_> + 0 6 1 3 2. + <_> + 1 9 1 3 2. + 0 + 5.1956089009763673e-005 + -2.0156539976596832e-001 + 8.2180216908454895e-002 + <_> + + <_> + + + + <_> + 8 6 3 1 -1. + <_> + 9 6 1 1 3. + 0 + -2.8447040822356939e-003 + 1.3294629752635956e-001 + -7.7659137547016144e-002 + <_> + + <_> + + + + <_> + 0 3 12 6 -1. + <_> + 4 3 4 6 3. + 0 + 1.4447699487209320e-001 + 3.8755510002374649e-002 + -3.7729701399803162e-001 + <_> + + <_> + + + + <_> + 10 5 2 4 -1. + <_> + 11 5 1 2 2. + <_> + 10 7 1 2 2. + 0 + 1.5187789686024189e-002 + -1.8020100891590118e-002 + 3.1634598970413208e-001 + <_> + + <_> + + + + <_> + 5 0 8 3 -1. + <_> + 5 1 8 1 3. + 0 + -3.1923990696668625e-002 + 2.9422530531883240e-001 + -4.8749800771474838e-002 + <_> + + <_> + + + + <_> + 8 0 5 3 -1. + <_> + 8 1 5 1 3. + 0 + 1.8610840663313866e-002 + -5.6667249649763107e-002 + 2.1379719674587250e-001 + <_> + + <_> + + + + <_> + 0 4 2 3 -1. + <_> + 0 5 2 1 3. + 0 + 4.9478588625788689e-003 + 4.7943778336048126e-002 + -3.1509420275688171e-001 + <_> + + <_> + + + + <_> + 9 0 6 4 -1. + <_> + 11 0 2 4 3. + 0 + -4.6161081641912460e-002 + -4.7610089182853699e-001 + 2.9308699071407318e-002 + <_> + + <_> + + + + <_> + 6 5 2 4 -1. + <_> + 6 5 1 2 2. + <_> + 7 7 1 2 2. + 0 + 1.1872449889779091e-002 + -3.6026339977979660e-002 + 4.1018471121788025e-001 + <_> + + <_> + + + + <_> + 17 5 1 4 -1. + <_> + 17 6 1 2 2. + 0 + -6.2818480655550957e-003 + -2.1089139580726624e-001 + 2.9605450108647346e-002 + <_> + + <_> + + + + <_> + 0 5 1 4 -1. + <_> + 0 6 1 2 2. + 0 + 3.4704189747571945e-003 + 4.0655650198459625e-002 + -3.3085140585899353e-001 + <_> + + <_> + + + + <_> + 12 3 4 3 -1. + <_> + 11 4 4 1 3. + 1 + 7.5958840548992157e-002 + 3.6941869184374809e-003 + -3.6771050095558167e-001 + <_> + + <_> + + + + <_> + 6 3 3 4 -1. + <_> + 7 4 1 4 3. + 1 + -4.2840991169214249e-002 + 2.3720830678939819e-001 + -6.0800980776548386e-002 + <_> + + <_> + + + + <_> + 13 4 1 4 -1. + <_> + 13 6 1 2 2. + 0 + -1.1817189864814281e-002 + -2.4793669581413269e-001 + 1.3696460053324699e-002 + <_> + + <_> + + + + <_> + 4 4 1 4 -1. + <_> + 4 6 1 2 2. + 0 + 1.2998480349779129e-002 + -6.2347020953893661e-002 + 2.9573059082031250e-001 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -5.3825829178094864e-002 + 2.1070300042629242e-001 + -6.8099439144134521e-002 + <_> + + <_> + + + + <_> + 4 0 2 4 -1. + <_> + 5 0 1 4 2. + 0 + -1.0883940383791924e-002 + -4.7151368856430054e-001 + 3.1116139143705368e-002 + <_> + + <_> + + + + <_> + 6 1 6 3 -1. + <_> + 6 2 6 1 3. + 0 + -3.0772840604186058e-002 + 4.0928280353546143e-001 + -4.0188588201999664e-002 + <_> + + <_> + + + + <_> + 0 10 12 2 -1. + <_> + 6 10 6 2 2. + 0 + 2.6424789801239967e-002 + -5.2670851349830627e-002 + 2.5522339344024658e-001 + <_> + + <_> + + + + <_> + 4 1 10 4 -1. + <_> + 4 1 5 4 2. + 0 + 4.2143590748310089e-002 + -1.1854399740695953e-001 + 1.2375999987125397e-001 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 8 0 2 3 2. + 0 + -6.8667740561068058e-003 + -3.4111011028289795e-001 + 3.9649881422519684e-002 + <_> + + <_> + + + + <_> + 12 4 1 3 -1. + <_> + 12 5 1 1 3. + 0 + -7.9784085974097252e-003 + 2.3357069492340088e-001 + -4.1538249701261520e-002 + <_> + + <_> + + + + <_> + 0 4 12 6 -1. + <_> + 0 4 6 3 2. + <_> + 6 7 6 3 2. + 0 + 1.5251199901103973e-001 + 3.2831441611051559e-002 + -3.8840961456298828e-001 + <_> + + <_> + + + + <_> + 17 7 1 3 -1. + <_> + 17 8 1 1 3. + 0 + -5.2495389245450497e-003 + -2.9752320051193237e-001 + 1.9470980390906334e-002 + <_> + + <_> + + + + <_> + 5 4 1 3 -1. + <_> + 5 5 1 1 3. + 0 + 6.6419220529496670e-003 + -3.4735631197690964e-002 + 3.4990420937538147e-001 + <_> + + <_> + + + + <_> + 13 0 4 4 -1. + <_> + 12 1 4 2 2. + 1 + 1.7110049724578857e-002 + -3.3298000693321228e-002 + 9.1474249958992004e-002 + <_> + + <_> + + + + <_> + 3 8 3 1 -1. + <_> + 4 9 1 1 3. + 1 + -9.7776986658573151e-003 + -4.3720889091491699e-001 + 2.9044499620795250e-002 + <_> + + <_> + + + + <_> + 17 0 1 3 -1. + <_> + 16 1 1 1 3. + 1 + -2.5141129735857248e-003 + 1.2397520244121552e-001 + -7.6406501233577728e-002 + <_> + + <_> + + + + <_> + 7 6 3 1 -1. + <_> + 8 6 1 1 3. + 0 + 6.4081619493663311e-003 + -3.2332200556993484e-002 + 3.6264058947563171e-001 + <_> + + <_> + + + + <_> + 5 6 8 1 -1. + <_> + 7 6 4 1 2. + 0 + -8.7686367332935333e-003 + 1.0199560225009918e-001 + -1.2560969591140747e-001 + <_> + + <_> + + + + <_> + 1 2 4 4 -1. + <_> + 1 2 2 2 2. + <_> + 3 4 2 2 2. + 0 + -6.6744568757712841e-003 + 1.0714609920978546e-001 + -1.1194419860839844e-001 + <_> + + <_> + + + + <_> + 12 3 2 1 -1. + <_> + 12 3 1 1 2. + 1 + -2.5654099881649017e-002 + 6.4865481853485107e-001 + -7.8786844387650490e-003 + <_> + + <_> + + + + <_> + 5 2 2 2 -1. + <_> + 5 2 2 1 2. + 1 + 1.9749540835618973e-002 + 3.7323061376810074e-002 + -3.4825590252876282e-001 + <_> + + <_> + + + + <_> + 12 1 6 3 -1. + <_> + 11 2 6 1 3. + 1 + -2.0802859216928482e-002 + 8.4190078079700470e-002 + -3.6445919424295425e-002 + <_> + + <_> + + + + <_> + 6 1 3 6 -1. + <_> + 7 2 1 6 3. + 1 + 2.2063199430704117e-002 + -5.9582170099020004e-002 + 2.1152189373970032e-001 + <_> + + <_> + + + + <_> + 8 10 4 2 -1. + <_> + 9 10 2 2 2. + 0 + 5.3523709066212177e-003 + 2.7724659070372581e-002 + -4.0503290295600891e-001 + <_> + + <_> + + + + <_> + 6 10 4 2 -1. + <_> + 7 10 2 2 2. + 0 + 2.5603959802538157e-003 + 5.0967320799827576e-002 + -2.6350560784339905e-001 + <_> + + <_> + + + + <_> + 12 0 4 5 -1. + <_> + 13 1 2 5 2. + 1 + -3.0307959765195847e-002 + 5.4715231060981750e-002 + -9.5685377717018127e-002 + <_> + + <_> + + + + <_> + 3 5 12 7 -1. + <_> + 7 5 4 7 3. + 0 + -2.6106768846511841e-001 + -3.2228010892868042e-001 + 3.1508989632129669e-002 + <_> + + <_> + + + + <_> + 12 5 3 4 -1. + <_> + 13 6 1 4 3. + 1 + -2.8650289401412010e-002 + 3.4172570705413818e-001 + -2.2077450528740883e-002 + <_> + + <_> + + + + <_> + 6 5 4 3 -1. + <_> + 5 6 4 1 3. + 1 + 6.1903461813926697e-002 + -1.6342630609869957e-002 + 6.5226632356643677e-001 + <_> + + <_> + + + + <_> + 5 8 8 4 -1. + <_> + 9 8 4 2 2. + <_> + 5 10 4 2 2. + 0 + -3.1047720462083817e-002 + -3.6522111296653748e-001 + 3.4920029342174530e-002 + <_> + + <_> + + + + <_> + 2 9 12 1 -1. + <_> + 8 9 6 1 2. + 0 + -3.5979911684989929e-002 + 2.1591410040855408e-001 + -5.5970121175050735e-002 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 0 11 9 1 2. + 0 + 5.9886161237955093e-002 + 4.4573429971933365e-002 + -3.0152690410614014e-001 + <_> + + <_> + + + + <_> + 0 7 1 3 -1. + <_> + 0 8 1 1 3. + 0 + 3.9145331829786301e-003 + 3.1792480498552322e-002 + -3.2067620754241943e-001 + <_> + + <_> + + + + <_> + 14 6 1 4 -1. + <_> + 14 6 1 2 2. + 1 + -2.9716869816184044e-002 + -2.5787210464477539e-001 + 3.7697579711675644e-002 + <_> + + <_> + + + + <_> + 5 0 3 3 -1. + <_> + 4 1 3 1 3. + 1 + -2.2731749340891838e-002 + -3.6135891079902649e-001 + 2.9329940676689148e-002 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 9 0 9 6 2. + <_> + 0 6 9 6 2. + 0 + -4.0700128674507141e-001 + -5.6401658058166504e-001 + 1.7949940636754036e-002 + <_> + + <_> + + + + <_> + 4 4 4 4 -1. + <_> + 3 5 4 2 2. + 1 + -1.9415460526943207e-002 + 1.4522629976272583e-001 + -7.1183227002620697e-002 + <_> + + <_> + + + + <_> + 14 6 1 4 -1. + <_> + 14 6 1 2 2. + 1 + -5.8602709032129496e-005 + 2.3447860032320023e-002 + -7.4233293533325195e-002 + <_> + + <_> + + + + <_> + 4 6 4 1 -1. + <_> + 4 6 2 1 2. + 1 + -4.1794691234827042e-002 + -4.3648260831832886e-001 + 3.1634360551834106e-002 + <_> + + <_> + + + + <_> + 1 10 16 1 -1. + <_> + 5 10 8 1 2. + 0 + 3.1113259494304657e-002 + -2.8742879629135132e-002 + 4.2367678880691528e-001 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + 4.9094129353761673e-003 + 2.8096439316868782e-002 + -3.5525271296501160e-001 + <_> + + <_> + + + + <_> + 2 0 16 4 -1. + <_> + 2 1 16 2 2. + 0 + 4.3127149343490601e-002 + -6.3333027064800262e-002 + 1.2167730182409286e-001 + <_> + + <_> + + + + <_> + 6 0 4 3 -1. + <_> + 6 1 4 1 3. + 0 + -6.1103478074073792e-003 + 1.5755009651184082e-001 + -6.5233632922172546e-002 + <_> + + <_> + + + + <_> + 13 1 3 1 -1. + <_> + 14 2 1 1 3. + 1 + -8.4811979904770851e-003 + -3.1289771199226379e-001 + 4.7166388481855392e-002 + <_> + + <_> + + + + <_> + 4 1 1 8 -1. + <_> + 4 3 1 4 2. + 0 + -1.6476139426231384e-002 + 1.1513979732990265e-001 + -8.6872749030590057e-002 + <_> + + <_> + + + + <_> + 0 2 18 4 -1. + <_> + 0 4 18 2 2. + 0 + -2.7051448822021484e-001 + -4.4175881147384644e-001 + 2.5920050218701363e-002 + <_> + + <_> + + + + <_> + 3 0 3 3 -1. + <_> + 4 1 1 3 3. + 1 + -3.1307939440011978e-002 + 4.0796020627021790e-001 + -2.7346299961209297e-002 + <_> + + <_> + + + + <_> + 15 2 3 3 -1. + <_> + 15 3 3 1 3. + 0 + -8.5358042269945145e-003 + -2.1038420498371124e-001 + 3.9202261716127396e-002 + <_> + + <_> + + + + <_> + 2 0 1 2 -1. + <_> + 2 0 1 1 2. + 1 + 4.6511092223227024e-003 + 4.8896100372076035e-002 + -2.0760509371757507e-001 + <_> + + <_> + + + + <_> + 16 2 2 1 -1. + <_> + 16 2 1 1 2. + 0 + -1.0118389764102176e-004 + 1.2528030574321747e-001 + -2.1875940263271332e-001 + <_> + + <_> + + + + <_> + 9 1 7 3 -1. + <_> + 8 2 7 1 3. + 1 + -2.7405759319663048e-002 + 1.5803159773349762e-001 + -7.3161102831363678e-002 + <_> + + <_> + + + + <_> + 14 5 2 2 -1. + <_> + 14 6 2 1 2. + 0 + 1.3358670286834240e-002 + -1.0327829979360104e-002 + 1.9837729632854462e-001 + <_> + + <_> + + + + <_> + 9 4 2 3 -1. + <_> + 8 5 2 1 3. + 1 + -1.6863640397787094e-002 + 1.5782469511032104e-001 + -8.3013407886028290e-002 + <_> + + <_> + + + + <_> + 10 0 6 5 -1. + <_> + 12 2 2 5 3. + 1 + -4.6753689646720886e-002 + 2.1774150431156158e-002 + -1.2496709823608398e-001 + <_> + + <_> + + + + <_> + 8 0 5 6 -1. + <_> + 6 2 5 2 3. + 1 + -2.4787309765815735e-001 + -5.5887281894683838e-001 + 1.9629070535302162e-002 + <_> + + <_> + + + + <_> + 11 5 3 2 -1. + <_> + 12 5 1 2 3. + 0 + 1.5863390639424324e-002 + -4.4667821377515793e-002 + 3.5529270768165588e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.4960109293460846e-002 + -2.6829180121421814e-001 + 4.8722568899393082e-002 + <_> + + <_> + + + + <_> + 16 4 2 2 -1. + <_> + 17 4 1 1 2. + <_> + 16 5 1 1 2. + 0 + -4.2794410546775907e-005 + 8.3423823118209839e-002 + -7.9932630062103271e-002 + <_> + + <_> + + + + <_> + 4 2 1 3 -1. + <_> + 3 3 1 1 3. + 1 + -1.7223030328750610e-002 + -5.3263998031616211e-001 + 1.9519500434398651e-002 + <_> + + <_> + + + + <_> + 14 0 4 2 -1. + <_> + 14 0 2 2 2. + 0 + -1.3742740266025066e-003 + 7.8433223068714142e-002 + -1.6823059320449829e-001 + <_> + + <_> + + + + <_> + 0 0 4 2 -1. + <_> + 2 0 2 2 2. + 0 + 9.1677848249673843e-003 + -5.8949600905179977e-002 + 1.9434289634227753e-001 + <_> + + <_> + + + + <_> + 1 10 17 2 -1. + <_> + 1 11 17 1 2. + 0 + -2.4254640564322472e-002 + -5.3892469406127930e-001 + 1.2915720231831074e-002 + -1.6296470165252686e+000 + 15 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -6.9386109709739685e-002 + 6.7190408706665039e-001 + -2.7040511369705200e-001 + <_> + + <_> + + + + <_> + 14 5 4 3 -1. + <_> + 14 5 2 3 2. + 0 + -9.8521290346980095e-003 + 1.5782390534877777e-001 + -1.1456169933080673e-001 + <_> + + <_> + + + + <_> + 0 5 4 3 -1. + <_> + 2 5 2 3 2. + 0 + -2.3724600672721863e-002 + 3.0622988939285278e-001 + -3.1042310595512390e-001 + <_> + + <_> + + + + <_> + 7 4 11 8 -1. + <_> + 7 8 11 4 2. + 0 + 1.8008269369602203e-001 + -4.3263959884643555e-001 + 3.6715991795063019e-002 + <_> + + <_> + + + + <_> + 7 3 1 3 -1. + <_> + 7 4 1 1 3. + 0 + -7.8437011688947678e-003 + 3.9657589793205261e-001 + -1.3096019625663757e-001 + <_> + + <_> + + + + <_> + 11 6 7 6 -1. + <_> + 11 9 7 3 2. + 0 + 1.4490400254726410e-001 + 6.3096016645431519e-002 + -1.8521189689636230e-001 + <_> + + <_> + + + + <_> + 0 6 7 6 -1. + <_> + 0 9 7 3 2. + 0 + 5.7838220149278641e-002 + -4.3671241402626038e-001 + 9.5829539000988007e-002 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 6 0 3 3 2. + 0 + 8.6507797241210938e-003 + -1.9749960303306580e-001 + 1.3382530212402344e-001 + <_> + + <_> + + + + <_> + 1 10 13 2 -1. + <_> + 1 11 13 1 2. + 0 + 4.4434559531509876e-003 + -2.8863328695297241e-001 + 8.0679617822170258e-002 + <_> + + <_> + + + + <_> + 10 4 1 3 -1. + <_> + 10 5 1 1 3. + 0 + -1.1448189616203308e-002 + 2.0668460428714752e-001 + -2.9727399349212646e-002 + <_> + + <_> + + + + <_> + 4 3 1 3 -1. + <_> + 3 4 1 1 3. + 1 + -1.5179160051047802e-002 + -5.1914721727371216e-001 + 3.8224801421165466e-002 + <_> + + <_> + + + + <_> + 9 3 3 6 -1. + <_> + 10 4 1 6 3. + 1 + -7.7604092657566071e-002 + -4.6431368589401245e-001 + 1.1916999705135822e-002 + <_> + + <_> + + + + <_> + 6 5 6 4 -1. + <_> + 8 5 2 4 3. + 0 + -1.8936419859528542e-002 + 1.1738669872283936e-001 + -1.8909810483455658e-001 + <_> + + <_> + + + + <_> + 7 0 4 4 -1. + <_> + 8 0 2 4 2. + 0 + -1.0080969892442226e-002 + -4.3171709775924683e-001 + 4.2613830417394638e-002 + <_> + + <_> + + + + <_> + 3 0 10 4 -1. + <_> + 3 1 10 2 2. + 0 + 5.0424810498952866e-002 + -8.4850631654262543e-002 + 2.1506150066852570e-001 + <_> + + <_> + + + + <_> + 0 0 18 2 -1. + <_> + 6 0 6 2 3. + 0 + -6.4389303326606750e-002 + 1.7555430531501770e-001 + -1.0601290315389633e-001 + <_> + + <_> + + + + <_> + 2 6 6 2 -1. + <_> + 4 6 2 2 3. + 0 + -2.1437110379338264e-002 + 2.1907110512256622e-001 + -8.4247410297393799e-002 + <_> + + <_> + + + + <_> + 9 0 4 3 -1. + <_> + 10 0 2 3 2. + 0 + -9.1345440596342087e-003 + -4.1084781289100647e-001 + 5.6968819350004196e-002 + <_> + + <_> + + + + <_> + 4 6 3 1 -1. + <_> + 5 6 1 1 3. + 0 + 9.5703564584255219e-003 + -5.5861141532659531e-002 + 3.6446011066436768e-001 + <_> + + <_> + + + + <_> + 14 5 4 3 -1. + <_> + 14 5 2 3 2. + 0 + 9.4563569873571396e-003 + -3.7393100559711456e-002 + 1.3930140435695648e-001 + <_> + + <_> + + + + <_> + 0 5 4 3 -1. + <_> + 2 5 2 3 2. + 0 + -2.3805219680070877e-002 + -1.5813879668712616e-001 + 1.2095350027084351e-001 + <_> + + <_> + + + + <_> + 14 8 4 4 -1. + <_> + 14 9 4 2 2. + 0 + 2.3389449343085289e-002 + 2.1982479840517044e-002 + -4.8894658684730530e-001 + <_> + + <_> + + + + <_> + 4 0 6 2 -1. + <_> + 6 0 2 2 3. + 0 + -1.4841769821941853e-002 + -4.2008030414581299e-001 + 4.2827770113945007e-002 + <_> + + <_> + + + + <_> + 14 8 4 4 -1. + <_> + 14 9 4 2 2. + 0 + -1.9951960071921349e-002 + -3.8262298703193665e-001 + 1.7620539292693138e-002 + <_> + + <_> + + + + <_> + 0 8 4 4 -1. + <_> + 0 9 4 2 2. + 0 + -5.5557182058691978e-003 + -3.3374428749084473e-001 + 4.9041308462619781e-002 + <_> + + <_> + + + + <_> + 14 9 4 3 -1. + <_> + 14 10 4 1 3. + 0 + 7.5748967938125134e-003 + 2.9259499162435532e-002 + -1.7972069978713989e-001 + <_> + + <_> + + + + <_> + 0 9 4 3 -1. + <_> + 0 10 4 1 3. + 0 + 1.0564279742538929e-002 + 3.8666039705276489e-002 + -3.8292339444160461e-001 + <_> + + <_> + + + + <_> + 10 4 1 3 -1. + <_> + 10 5 1 1 3. + 0 + 8.7607624009251595e-003 + -1.6946149989962578e-002 + 1.9596639275550842e-001 + <_> + + <_> + + + + <_> + 9 2 6 2 -1. + <_> + 11 4 2 2 3. + 1 + -8.9941717684268951e-002 + 1.3279989361763000e-001 + -1.0967929661273956e-001 + <_> + + <_> + + + + <_> + 8 0 4 6 -1. + <_> + 8 2 4 2 3. + 0 + -3.2798118889331818e-002 + 2.1123570203781128e-001 + -5.2206270396709442e-002 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -6.9366537034511566e-002 + -3.1673339009284973e-001 + 5.1063869148492813e-002 + <_> + + <_> + + + + <_> + 10 7 2 2 -1. + <_> + 11 7 1 1 2. + <_> + 10 8 1 1 2. + 0 + 4.8841950483620167e-003 + -5.1112260669469833e-002 + 2.8360730409622192e-001 + <_> + + <_> + + + + <_> + 0 7 7 4 -1. + <_> + 0 8 7 2 2. + 0 + 3.5134568810462952e-002 + 3.0124710872769356e-002 + -4.3692100048065186e-001 + <_> + + <_> + + + + <_> + 13 2 3 1 -1. + <_> + 14 3 1 1 3. + 1 + 8.8909007608890533e-003 + 4.1621170938014984e-002 + -3.7158828973770142e-001 + <_> + + <_> + + + + <_> + 5 2 1 3 -1. + <_> + 4 3 1 1 3. + 1 + -1.5983669087290764e-002 + -5.1140671968460083e-001 + 2.4840809404850006e-002 + <_> + + <_> + + + + <_> + 12 3 4 3 -1. + <_> + 11 4 4 1 3. + 1 + -6.4470201730728149e-002 + -2.1385170519351959e-001 + 1.8365900032222271e-003 + <_> + + <_> + + + + <_> + 6 3 3 4 -1. + <_> + 7 4 1 4 3. + 1 + 3.3956471830606461e-002 + -4.1229560971260071e-002 + 3.3696550130844116e-001 + <_> + + <_> + + + + <_> + 10 4 1 3 -1. + <_> + 10 5 1 1 3. + 0 + -2.0578580442816019e-003 + 6.2026239931583405e-002 + -6.6379219293594360e-002 + <_> + + <_> + + + + <_> + 2 5 2 5 -1. + <_> + 3 5 1 5 2. + 0 + -1.9420420285314322e-003 + 7.9117313027381897e-002 + -1.9388359785079956e-001 + <_> + + <_> + + + + <_> + 5 0 10 3 -1. + <_> + 5 1 10 1 3. + 0 + -2.0667409524321556e-002 + 1.7511230707168579e-001 + -5.5765930563211441e-002 + <_> + + <_> + + + + <_> + 5 0 5 3 -1. + <_> + 5 1 5 1 3. + 0 + 1.1788690462708473e-002 + -8.2900352776050568e-002 + 1.5535129606723785e-001 + <_> + + <_> + + + + <_> + 14 0 4 3 -1. + <_> + 14 1 4 1 3. + 0 + 1.8824249505996704e-002 + 3.0222170054912567e-002 + -4.0415239334106445e-001 + <_> + + <_> + + + + <_> + 7 4 1 3 -1. + <_> + 7 5 1 1 3. + 0 + -8.3997547626495361e-003 + 2.0664639770984650e-001 + -6.2480248510837555e-002 + <_> + + <_> + + + + <_> + 6 5 6 4 -1. + <_> + 6 5 3 4 2. + 0 + 5.8516681194305420e-002 + -5.4968580603599548e-002 + 2.5411149859428406e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 9 0 9 12 2. + 0 + 2.0517799258232117e-001 + -6.1518680304288864e-002 + 2.1540619432926178e-001 + <_> + + <_> + + + + <_> + 1 10 16 2 -1. + <_> + 5 10 8 2 2. + 0 + -4.0942661464214325e-002 + 2.0580589771270752e-001 + -6.6298596560955048e-002 + <_> + + <_> + + + + <_> + 5 9 6 3 -1. + <_> + 7 9 2 3 3. + 0 + -2.0694980397820473e-002 + -3.8925689458847046e-001 + 3.6689650267362595e-002 + <_> + + <_> + + + + <_> + 12 0 3 10 -1. + <_> + 13 0 1 10 3. + 0 + 2.5016449391841888e-002 + -3.2912530004978180e-002 + 2.2270810604095459e-001 + <_> + + <_> + + + + <_> + 3 0 3 10 -1. + <_> + 4 0 1 10 3. + 0 + -3.4674070775508881e-002 + -5.1711809635162354e-001 + 2.5168089196085930e-002 + <_> + + <_> + + + + <_> + 9 6 3 2 -1. + <_> + 10 6 1 2 3. + 0 + -3.4877469297498465e-003 + 1.1860589683055878e-001 + -1.0493949800729752e-001 + <_> + + <_> + + + + <_> + 5 0 3 2 -1. + <_> + 6 0 1 2 3. + 0 + 6.0133477672934532e-003 + 3.0495999380946159e-002 + -3.5960870981216431e-001 + <_> + + <_> + + + + <_> + 9 0 6 5 -1. + <_> + 11 0 2 5 3. + 0 + 8.6038149893283844e-003 + 6.1225108802318573e-002 + -2.3886460065841675e-001 + <_> + + <_> + + + + <_> + 6 0 4 4 -1. + <_> + 7 0 2 4 2. + 0 + 7.0930928923189640e-003 + 5.0354178994894028e-002 + -2.4130879342556000e-001 + <_> + + <_> + + + + <_> + 3 0 12 2 -1. + <_> + 9 0 6 1 2. + <_> + 3 1 6 1 2. + 0 + -8.2711968570947647e-003 + 1.7760099470615387e-001 + -6.8700566887855530e-002 + <_> + + <_> + + + + <_> + 7 5 3 3 -1. + <_> + 8 5 1 3 3. + 0 + -7.6021431013941765e-003 + 1.5871450304985046e-001 + -7.1639142930507660e-002 + <_> + + <_> + + + + <_> + 9 6 3 2 -1. + <_> + 10 6 1 2 3. + 0 + -2.9862489551305771e-002 + -3.8224980235099792e-001 + 8.9862719178199768e-003 + <_> + + <_> + + + + <_> + 6 6 3 2 -1. + <_> + 7 6 1 2 3. + 0 + -6.5749119967222214e-003 + 2.2762650251388550e-001 + -6.0182739049196243e-002 + <_> + + <_> + + + + <_> + 10 5 2 3 -1. + <_> + 9 6 2 1 3. + 1 + 2.6771429926156998e-002 + -1.8169719725847244e-002 + 2.0630699396133423e-001 + <_> + + <_> + + + + <_> + 0 5 18 2 -1. + <_> + 6 5 6 2 3. + 0 + -2.6554858684539795e-001 + -4.8712089657783508e-001 + 2.7063539251685143e-002 + <_> + + <_> + + + + <_> + 11 3 4 4 -1. + <_> + 13 3 2 2 2. + <_> + 11 5 2 2 2. + 0 + -2.6141930371522903e-002 + 1.9213640689849854e-001 + -2.7676820755004883e-002 + <_> + + <_> + + + + <_> + 8 5 3 2 -1. + <_> + 9 6 1 2 3. + 1 + -3.9902370423078537e-002 + -4.2627981305122375e-001 + 2.9879650101065636e-002 + <_> + + <_> + + + + <_> + 10 8 6 2 -1. + <_> + 13 8 3 1 2. + <_> + 10 9 3 1 2. + 0 + -3.6611340474337339e-003 + 1.0172230005264282e-001 + -4.3250489979982376e-002 + <_> + + <_> + + + + <_> + 2 8 6 2 -1. + <_> + 2 8 3 1 2. + <_> + 5 9 3 1 2. + 0 + 4.8367520794272423e-003 + -6.7465707659721375e-002 + 1.9671800732612610e-001 + <_> + + <_> + + + + <_> + 8 9 6 2 -1. + <_> + 10 9 2 2 3. + 0 + -1.6790149733424187e-002 + -3.9753469824790955e-001 + 3.7431109696626663e-002 + <_> + + <_> + + + + <_> + 9 6 4 2 -1. + <_> + 9 6 4 1 2. + 1 + -1.2243920005857944e-002 + 5.5608421564102173e-002 + -2.0048050582408905e-001 + <_> + + <_> + + + + <_> + 13 2 3 3 -1. + <_> + 12 3 3 1 3. + 1 + 6.1686821281909943e-002 + -1.0107450187206268e-002 + 2.9090631008148193e-001 + <_> + + <_> + + + + <_> + 5 4 8 4 -1. + <_> + 5 4 4 2 2. + <_> + 9 6 4 2 2. + 0 + -7.1395501494407654e-002 + -6.0413521528244019e-001 + 1.9080249592661858e-002 + <_> + + <_> + + + + <_> + 13 2 3 3 -1. + <_> + 12 3 3 1 3. + 1 + 9.5230207080021501e-005 + -4.3509960174560547e-002 + 4.5345060527324677e-002 + <_> + + <_> + + + + <_> + 6 8 5 4 -1. + <_> + 6 9 5 2 2. + 0 + -1.0757230222225189e-002 + 1.9926990568637848e-001 + -5.0487600266933441e-002 + <_> + + <_> + + + + <_> + 13 4 3 1 -1. + <_> + 14 5 1 1 3. + 1 + 2.2588269785046577e-002 + -1.5318900346755981e-002 + 1.7491130530834198e-001 + <_> + + <_> + + + + <_> + 5 4 1 3 -1. + <_> + 4 5 1 1 3. + 1 + -2.1975219249725342e-002 + -4.5546808838844299e-001 + 2.2921970114111900e-002 + <_> + + <_> + + + + <_> + 13 2 3 3 -1. + <_> + 12 3 3 1 3. + 1 + -1.8598889932036400e-002 + 6.3289977610111237e-002 + -2.2360650822520256e-002 + <_> + + <_> + + + + <_> + 5 2 3 3 -1. + <_> + 6 3 1 3 3. + 1 + 4.1398629546165466e-002 + -2.9707899317145348e-002 + 3.4164550900459290e-001 + <_> + + <_> + + + + <_> + 14 0 4 3 -1. + <_> + 13 1 4 1 3. + 1 + -1.5574470162391663e-002 + 1.1719810217618942e-001 + -5.0286509096622467e-002 + <_> + + <_> + + + + <_> + 3 3 3 2 -1. + <_> + 3 4 3 1 2. + 0 + -2.9469770379364491e-003 + 9.2899397015571594e-002 + -1.4018329977989197e-001 + <_> + + <_> + + + + <_> + 4 3 14 6 -1. + <_> + 11 3 7 3 2. + <_> + 4 6 7 3 2. + 0 + 1.5679700300097466e-003 + -4.5396000146865845e-002 + 5.7984590530395508e-002 + <_> + + <_> + + + + <_> + 2 3 8 6 -1. + <_> + 2 3 4 3 2. + <_> + 6 6 4 3 2. + 0 + 1.2352210283279419e-001 + 1.8805639818310738e-002 + -5.6560719013214111e-001 + <_> + + <_> + + + + <_> + 16 4 2 3 -1. + <_> + 16 5 2 1 3. + 0 + -1.0430569818709046e-004 + 8.0288991332054138e-002 + -1.1547219753265381e-001 + <_> + + <_> + + + + <_> + 0 4 2 3 -1. + <_> + 0 5 2 1 3. + 0 + -9.7123868763446808e-003 + -3.7258410453796387e-001 + 3.0633870512247086e-002 + <_> + + <_> + + + + <_> + 12 4 2 1 -1. + <_> + 12 4 1 1 2. + 1 + -1.7766250297427177e-002 + 1.8392249941825867e-001 + -3.2872468233108521e-002 + <_> + + <_> + + + + <_> + 6 4 1 2 -1. + <_> + 6 4 1 1 2. + 1 + 1.5392260684166104e-004 + -1.1578179895877838e-001 + 9.7096182405948639e-002 + <_> + + <_> + + + + <_> + 17 4 1 3 -1. + <_> + 17 5 1 1 3. + 0 + -3.6866529844701290e-003 + -2.7469968795776367e-001 + 5.0014968961477280e-002 + <_> + + <_> + + + + <_> + 9 2 2 8 -1. + <_> + 9 2 2 4 2. + 1 + -1.6139489412307739e-001 + 1.6754530370235443e-001 + -6.5458148717880249e-002 + <_> + + <_> + + + + <_> + 2 0 16 12 -1. + <_> + 2 0 8 12 2. + 0 + -2.0767639577388763e-001 + 5.1562719047069550e-002 + -1.7276130616664886e-002 + <_> + + <_> + + + + <_> + 4 3 10 3 -1. + <_> + 4 4 10 1 3. + 0 + 3.3081259578466415e-002 + -4.6209480613470078e-002 + 2.2093529999256134e-001 + <_> + + <_> + + + + <_> + 7 3 4 3 -1. + <_> + 7 4 4 1 3. + 0 + -1.0417399927973747e-002 + 1.2907770276069641e-001 + -8.3780996501445770e-002 + <_> + + <_> + + + + <_> + 0 4 1 3 -1. + <_> + 0 5 1 1 3. + 0 + 3.3997350838035345e-003 + 3.1802389770746231e-002 + -2.9635548591613770e-001 + <_> + + <_> + + + + <_> + 13 1 5 3 -1. + <_> + 12 2 5 1 3. + 1 + -1.5930660068988800e-002 + 1.0412970185279846e-001 + -6.9342762231826782e-002 + <_> + + <_> + + + + <_> + 0 4 12 7 -1. + <_> + 4 4 4 7 3. + 0 + -2.3908320069313049e-001 + -5.0697857141494751e-001 + 2.0860239863395691e-002 + <_> + + <_> + + + + <_> + 12 4 2 2 -1. + <_> + 13 4 1 1 2. + <_> + 12 5 1 1 2. + 0 + 4.0117949247360229e-003 + -2.8569610789418221e-002 + 1.7320330440998077e-001 + <_> + + <_> + + + + <_> + 6 2 4 3 -1. + <_> + 7 2 2 3 2. + 0 + -5.7363999076187611e-003 + -1.8128049373626709e-001 + 5.3030159324407578e-002 + <_> + + <_> + + + + <_> + 12 4 2 2 -1. + <_> + 13 4 1 1 2. + <_> + 12 5 1 1 2. + 0 + -2.1724679972976446e-003 + 1.4318360388278961e-001 + -4.6536020934581757e-002 + <_> + + <_> + + + + <_> + 6 2 3 3 -1. + <_> + 6 3 3 1 3. + 0 + -1.1111910454928875e-002 + 2.0232780277729034e-001 + -4.8444561660289764e-002 + <_> + + <_> + + + + <_> + 11 4 1 2 -1. + <_> + 11 5 1 1 2. + 0 + -1.0085949907079339e-004 + 5.5502779781818390e-002 + -6.3348926603794098e-002 + <_> + + <_> + + + + <_> + 6 4 1 6 -1. + <_> + 4 6 1 2 3. + 1 + -2.1863000467419624e-002 + 1.3861429691314697e-001 + -7.0301473140716553e-002 + <_> + + <_> + + + + <_> + 4 5 14 7 -1. + <_> + 4 5 7 7 2. + 0 + 2.9870280623435974e-001 + 5.3018219769001007e-003 + -4.9552699923515320e-001 + <_> + + <_> + + + + <_> + 0 5 16 7 -1. + <_> + 8 5 8 7 2. + 0 + -2.9273781180381775e-001 + 2.2202910482883453e-001 + -5.9545800089836121e-002 + <_> + + <_> + + + + <_> + 4 11 14 1 -1. + <_> + 4 11 7 1 2. + 0 + 5.7936239987611771e-002 + 1.7134670168161392e-002 + -6.2441098690032959e-001 + <_> + + <_> + + + + <_> + 0 11 12 1 -1. + <_> + 6 11 6 1 2. + 0 + 8.2372408360242844e-003 + -6.5199822187423706e-002 + 1.7533220350742340e-001 + <_> + + <_> + + + + <_> + 15 0 2 1 -1. + <_> + 15 0 1 1 2. + 1 + 1.0964090004563332e-002 + 2.3662520572543144e-002 + -3.8045209646224976e-001 + <_> + + <_> + + + + <_> + 4 4 2 2 -1. + <_> + 4 4 1 1 2. + <_> + 5 5 1 1 2. + 0 + -1.9963670056313276e-003 + 1.6336169838905334e-001 + -6.1245940625667572e-002 + <_> + + <_> + + + + <_> + 12 3 2 2 -1. + <_> + 12 3 1 2 2. + 1 + -2.6385689154267311e-002 + 1.3814860582351685e-001 + -1.7998920753598213e-002 + <_> + + <_> + + + + <_> + 6 3 2 2 -1. + <_> + 6 3 2 1 2. + 1 + 2.4890769273042679e-002 + 2.2105880081653595e-002 + -4.3824601173400879e-001 + <_> + + <_> + + + + <_> + 7 2 5 3 -1. + <_> + 7 3 5 1 3. + 0 + 3.3625978976488113e-002 + -4.6475131064653397e-002 + 1.9136969745159149e-001 + <_> + + <_> + + + + <_> + 1 2 2 7 -1. + <_> + 2 2 1 7 2. + 0 + -2.6936049107462168e-003 + 6.9527350366115570e-002 + -1.3958020508289337e-001 + <_> + + <_> + + + + <_> + 14 0 4 2 -1. + <_> + 14 0 4 1 2. + 1 + -1.6001410782337189e-002 + 1.7003299295902252e-001 + -2.2912779822945595e-002 + <_> + + <_> + + + + <_> + 4 0 2 4 -1. + <_> + 4 0 1 4 2. + 1 + -2.2382080554962158e-002 + 2.7026671171188354e-001 + -4.0354069322347641e-002 + <_> + + <_> + + + + <_> + 11 3 5 8 -1. + <_> + 11 7 5 4 2. + 0 + -9.0552508831024170e-002 + -7.1423888206481934e-001 + 8.3871074020862579e-003 + <_> + + <_> + + + + <_> + 1 6 2 6 -1. + <_> + 1 6 1 3 2. + <_> + 2 9 1 3 2. + 0 + 1.9464749842882156e-002 + 2.0357880741357803e-002 + -5.0658088922500610e-001 + <_> + + <_> + + + + <_> + 13 1 5 3 -1. + <_> + 12 2 5 1 3. + 1 + -8.7326802313327789e-003 + 4.5126538723707199e-002 + -4.7429598867893219e-002 + <_> + + <_> + + + + <_> + 0 10 8 2 -1. + <_> + 2 10 4 2 2. + 0 + 2.2775048855692148e-003 + -1.0658310353755951e-001 + 1.0186749696731567e-001 + <_> + + <_> + + + + <_> + 13 1 5 3 -1. + <_> + 12 2 5 1 3. + 1 + 3.3961221575737000e-002 + -9.4395978376269341e-003 + 8.8545367121696472e-002 + <_> + + <_> + + + + <_> + 5 1 3 5 -1. + <_> + 6 2 1 5 3. + 1 + -3.6761499941349030e-002 + 2.4322110414505005e-001 + -4.4136319309473038e-002 + <_> + + <_> + + + + <_> + 12 3 2 2 -1. + <_> + 13 3 1 1 2. + <_> + 12 4 1 1 2. + 0 + -1.1103870201623067e-004 + 4.3608471751213074e-002 + -4.5845959335565567e-002 + <_> + + <_> + + + + <_> + 4 3 2 2 -1. + <_> + 4 3 1 1 2. + <_> + 5 4 1 1 2. + 0 + -1.0285600001225248e-004 + 9.3662150204181671e-002 + -1.0273990035057068e-001 + <_> + + <_> + + + + <_> + 14 0 3 1 -1. + <_> + 15 1 1 1 3. + 1 + 1.0630009695887566e-002 + 3.1317610293626785e-002 + -4.0388751029968262e-001 + <_> + + <_> + + + + <_> + 4 0 1 3 -1. + <_> + 3 1 1 1 3. + 1 + -1.8916089087724686e-002 + -6.6609549522399902e-001 + 1.2026290409266949e-002 + <_> + + <_> + + + + <_> + 14 1 3 6 -1. + <_> + 15 2 1 6 3. + 1 + 4.4989351183176041e-002 + -2.2083500400185585e-002 + 3.1624680757522583e-001 + <_> + + <_> + + + + <_> + 8 7 2 3 -1. + <_> + 8 8 2 1 3. + 0 + -9.3135945498943329e-003 + 2.4396809935569763e-001 + -3.4472171217203140e-002 + <_> + + <_> + + + + <_> + 13 10 2 1 -1. + <_> + 13 10 1 1 2. + 0 + -1.1829029972432181e-004 + 7.6737791299819946e-002 + -7.4983909726142883e-002 + <_> + + <_> + + + + <_> + 0 6 15 4 -1. + <_> + 0 8 15 2 2. + 0 + -3.6458101123571396e-002 + -6.8958371877670288e-001 + 1.3191980309784412e-002 + <_> + + <_> + + + + <_> + 9 11 6 1 -1. + <_> + 11 11 2 1 3. + 0 + -1.8806230509653687e-003 + 7.5947493314743042e-002 + -4.7749940305948257e-002 + <_> + + <_> + + + + <_> + 3 11 6 1 -1. + <_> + 5 11 2 1 3. + 0 + 8.1947557628154755e-003 + 2.6319609954953194e-002 + -3.6540159583091736e-001 + <_> + + <_> + + + + <_> + 8 11 4 1 -1. + <_> + 9 11 2 1 2. + 0 + -4.3926942162215710e-003 + -4.3237671256065369e-001 + 1.5065680257976055e-002 + <_> + + <_> + + + + <_> + 7 5 3 3 -1. + <_> + 8 6 1 1 9. + 0 + -2.3078089579939842e-002 + 1.3706269860267639e-001 + -6.0588121414184570e-002 + <_> + + <_> + + + + <_> + 0 4 18 4 -1. + <_> + 9 4 9 2 2. + <_> + 0 6 9 2 2. + 0 + -1.5273529291152954e-001 + -4.8930040001869202e-001 + 1.8007790669798851e-002 + <_> + + <_> + + + + <_> + 0 0 16 12 -1. + <_> + 8 0 8 12 2. + 0 + 5.0859832763671875e-001 + -1.8213309347629547e-002 + 5.0210291147232056e-001 + <_> + + <_> + + + + <_> + 2 2 16 2 -1. + <_> + 2 2 8 2 2. + 0 + 5.1210429519414902e-003 + -9.2683613300323486e-002 + 7.1713283658027649e-002 + <_> + + <_> + + + + <_> + 3 0 9 6 -1. + <_> + 3 2 9 2 3. + 0 + -1.5781129896640778e-001 + 4.0578329563140869e-001 + -2.4888839572668076e-002 + <_> + + <_> + + + + <_> + 15 0 2 1 -1. + <_> + 15 0 1 1 2. + 1 + -1.0054220445454121e-002 + -2.6102149486541748e-001 + 2.1513199433684349e-002 + <_> + + <_> + + + + <_> + 3 0 1 2 -1. + <_> + 3 0 1 1 2. + 1 + 1.0722960345447063e-002 + 2.1149590611457825e-002 + -4.4449388980865479e-001 + <_> + + <_> + + + + <_> + 17 0 1 3 -1. + <_> + 16 1 1 1 3. + 1 + -4.4461651705205441e-003 + 1.4982509613037109e-001 + -6.8097911775112152e-002 + <_> + + <_> + + + + <_> + 4 2 2 2 -1. + <_> + 4 2 1 1 2. + <_> + 5 3 1 1 2. + 0 + -1.0270509665133432e-004 + 9.1675288975238800e-002 + -9.6970669925212860e-002 + <_> + + <_> + + + + <_> + 13 0 3 3 -1. + <_> + 14 1 1 3 3. + 1 + -2.3320950567722321e-002 + -1.9236829876899719e-001 + 3.7209238857030869e-002 + <_> + + <_> + + + + <_> + 5 3 5 3 -1. + <_> + 4 4 5 1 3. + 1 + -2.6009110733866692e-002 + 1.7083279788494110e-001 + -5.8662418276071548e-002 + <_> + + <_> + + + + <_> + 12 5 6 7 -1. + <_> + 14 5 2 7 3. + 0 + -1.3390360400080681e-002 + 1.3289719820022583e-001 + -1.0905700176954269e-001 + <_> + + <_> + + + + <_> + 0 0 4 2 -1. + <_> + 2 0 2 2 2. + 0 + 1.1657520197331905e-002 + -4.7384869307279587e-002 + 1.9837440550327301e-001 + <_> + + <_> + + + + <_> + 3 1 15 1 -1. + <_> + 8 1 5 1 3. + 0 + -1.5216249972581863e-002 + 9.0810291469097137e-002 + -8.1595033407211304e-002 + <_> + + <_> + + + + <_> + 4 2 8 2 -1. + <_> + 4 2 4 1 2. + <_> + 8 3 4 1 2. + 0 + -5.0137271173298359e-003 + 1.3411369919776917e-001 + -8.9783012866973877e-002 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + -2.8997131157666445e-003 + 1.3354049623012543e-001 + -2.7490219101309776e-002 + <_> + + <_> + + + + <_> + 3 4 12 8 -1. + <_> + 3 8 12 4 2. + 0 + 4.5744711160659790e-001 + -6.3561663031578064e-002 + 1.5566839277744293e-001 + <_> + + <_> + + + + <_> + 12 5 6 6 -1. + <_> + 14 5 2 6 3. + 0 + -1.3599389791488647e-001 + -4.9014529585838318e-001 + 9.3379104509949684e-003 + <_> + + <_> + + + + <_> + 0 5 6 6 -1. + <_> + 2 5 2 6 3. + 0 + -3.2645169645547867e-002 + 1.6510139405727386e-001 + -6.5266229212284088e-002 + <_> + + <_> + + + + <_> + 10 2 6 1 -1. + <_> + 10 2 3 1 2. + 1 + 8.3665400743484497e-002 + -4.8871468752622604e-003 + 7.4069589376449585e-001 + <_> + + <_> + + + + <_> + 8 2 1 6 -1. + <_> + 8 2 1 3 2. + 1 + -6.5547451376914978e-002 + 4.9933698773384094e-001 + -1.6801070421934128e-002 + <_> + + <_> + + + + <_> + 9 5 4 2 -1. + <_> + 11 5 2 1 2. + <_> + 9 6 2 1 2. + 0 + -7.5683398172259331e-003 + 9.0739540755748749e-002 + -3.3331640064716339e-002 + <_> + + <_> + + + + <_> + 5 5 4 2 -1. + <_> + 5 5 2 1 2. + <_> + 7 6 2 1 2. + 0 + 1.2663889676332474e-002 + -3.5381950438022614e-002 + 2.8114819526672363e-001 + <_> + + <_> + + + + <_> + 13 10 2 1 -1. + <_> + 13 10 1 1 2. + 0 + 1.0308570199413225e-004 + -6.0301329940557480e-002 + 9.2195279896259308e-002 + <_> + + <_> + + + + <_> + 3 10 2 1 -1. + <_> + 4 10 1 1 2. + 0 + -8.6807813204359263e-005 + 9.1417297720909119e-002 + -1.0815770179033279e-001 + <_> + + <_> + + + + <_> + 17 4 1 6 -1. + <_> + 17 6 1 2 3. + 0 + 7.5817271135747433e-003 + 2.9872510582208633e-002 + -1.7231559753417969e-001 + <_> + + <_> + + + + <_> + 0 0 1 8 -1. + <_> + 0 4 1 4 2. + 0 + 2.0975960418581963e-002 + 4.0259808301925659e-002 + -2.1657769381999969e-001 + <_> + + <_> + + + + <_> + 16 0 2 4 -1. + <_> + 16 1 2 2 2. + 0 + 1.2732270173728466e-002 + 2.3903559893369675e-002 + -3.2514059543609619e-001 + <_> + + <_> + + + + <_> + 1 0 3 1 -1. + <_> + 2 1 1 1 3. + 1 + -8.6572989821434021e-003 + 2.0860520005226135e-001 + -4.3289590626955032e-002 + <_> + + <_> + + + + <_> + 15 2 3 3 -1. + <_> + 15 3 3 1 3. + 0 + 9.5848739147186279e-003 + 4.0576349943876266e-002 + -2.5737819075584412e-001 + <_> + + <_> + + + + <_> + 2 0 14 4 -1. + <_> + 2 1 14 2 2. + 0 + 2.6772130280733109e-002 + -8.6598917841911316e-002 + 1.0538879781961441e-001 + <_> + + <_> + + + + <_> + 6 1 6 3 -1. + <_> + 6 2 6 1 3. + 0 + -1.4040360227227211e-002 + 1.9790090620517731e-001 + -5.0357129424810410e-002 + <_> + + <_> + + + + <_> + 4 10 2 2 -1. + <_> + 4 10 1 1 2. + <_> + 5 11 1 1 2. + 0 + 9.7764357633423060e-005 + -9.0779386460781097e-002 + 9.9890656769275665e-002 + <_> + + <_> + + + + <_> + 11 0 3 3 -1. + <_> + 12 0 1 3 3. + 0 + -6.4859418198466301e-003 + -2.3571990430355072e-001 + 4.4631820172071457e-002 + <_> + + <_> + + + + <_> + 4 10 2 2 -1. + <_> + 4 10 1 1 2. + <_> + 5 11 1 1 2. + 0 + -1.1004119733115658e-004 + 1.1131180077791214e-001 + -8.0598853528499603e-002 + <_> + + <_> + + + + <_> + 12 3 3 1 -1. + <_> + 13 4 1 1 3. + 1 + 3.5401768982410431e-002 + -4.6270359307527542e-003 + 3.5879731178283691e-001 + <_> + + <_> + + + + <_> + 6 3 1 3 -1. + <_> + 5 4 1 1 3. + 1 + 3.8854090962558985e-003 + 4.6248920261859894e-002 + -1.9142200052738190e-001 + <_> + + <_> + + + + <_> + 15 2 3 3 -1. + <_> + 15 3 3 1 3. + 0 + -2.7548590674996376e-002 + -4.6502590179443359e-001 + 6.3705849461257458e-003 + <_> + + <_> + + + + <_> + 1 3 2 2 -1. + <_> + 1 3 1 1 2. + <_> + 2 4 1 1 2. + 0 + 1.2218310439493507e-004 + -6.8593278527259827e-002 + 1.2230750173330307e-001 + <_> + + <_> + + + + <_> + 15 2 3 3 -1. + <_> + 15 3 3 1 3. + 0 + -1.0193839989369735e-004 + 4.5737609267234802e-002 + -4.4129759073257446e-002 + <_> + + <_> + + + + <_> + 0 2 3 3 -1. + <_> + 0 3 3 1 3. + 0 + 1.4042990282177925e-002 + 2.5051740929484367e-002 + -3.3193638920783997e-001 + <_> + + <_> + + + + <_> + 15 3 2 2 -1. + <_> + 16 3 1 1 2. + <_> + 15 4 1 1 2. + 0 + -9.1185698693152517e-005 + 4.5867718756198883e-002 + -4.8201519995927811e-002 + <_> + + <_> + + + + <_> + 0 2 4 4 -1. + <_> + 0 3 4 2 2. + 0 + -1.3652809895575047e-002 + -2.2167709469795227e-001 + 3.6618560552597046e-002 + <_> + + <_> + + + + <_> + 14 4 3 1 -1. + <_> + 15 4 1 1 3. + 0 + -1.3016860000789165e-002 + -6.6395550966262817e-001 + 6.4530200324952602e-003 + <_> + + <_> + + + + <_> + 1 4 3 1 -1. + <_> + 2 4 1 1 3. + 0 + -3.0348210129886866e-003 + 1.9975389540195465e-001 + -4.4125560671091080e-002 + -1.5289800167083740e+000 + 16 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 7 4 1 -1. + <_> + 5 7 2 1 2. + 0 + 8.8687296956777573e-003 + -3.2520338892936707e-001 + 7.5342357158660889e-001 + <_> + + <_> + + + + <_> + 7 3 5 3 -1. + <_> + 7 4 5 1 3. + 0 + -2.8394820168614388e-002 + 5.3487628698348999e-001 + -1.6648720204830170e-001 + <_> + + <_> + + + + <_> + 9 3 4 3 -1. + <_> + 8 4 4 1 3. + 1 + -3.0085170641541481e-002 + 3.2912710309028625e-001 + -2.3674790561199188e-001 + <_> + + <_> + + + + <_> + 9 5 3 2 -1. + <_> + 10 5 1 2 3. + 0 + -8.8486373424530029e-003 + 3.1169471144676208e-001 + -1.4142170548439026e-001 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 7 5 1 3 3. + 0 + 1.4256549999117851e-002 + -1.0750769823789597e-001 + 4.5222070813179016e-001 + <_> + + <_> + + + + <_> + 5 6 10 6 -1. + <_> + 10 6 5 3 2. + <_> + 5 9 5 3 2. + 0 + -2.0950550213456154e-002 + -1.9999259710311890e-001 + 5.3246650844812393e-002 + <_> + + <_> + + + + <_> + 4 2 8 8 -1. + <_> + 4 2 4 4 2. + <_> + 8 6 4 4 2. + 0 + -6.9642797112464905e-002 + -4.6795380115509033e-001 + 5.3968351334333420e-002 + <_> + + <_> + + + + <_> + 14 2 3 4 -1. + <_> + 13 3 3 2 2. + 1 + -6.3666269183158875e-002 + -2.7843418717384338e-001 + 1.0408580303192139e-002 + <_> + + <_> + + + + <_> + 4 2 4 3 -1. + <_> + 5 3 2 3 2. + 1 + -4.7214139252901077e-002 + 2.9560580849647522e-001 + -9.3614630401134491e-002 + <_> + + <_> + + + + <_> + 10 3 2 3 -1. + <_> + 10 4 2 1 3. + 0 + 1.4078790321946144e-002 + -4.5739430934190750e-002 + 3.3025279641151428e-001 + <_> + + <_> + + + + <_> + 5 4 3 4 -1. + <_> + 6 4 1 4 3. + 0 + -1.0570909827947617e-002 + 3.6789980530738831e-001 + -5.9032700955867767e-002 + <_> + + <_> + + + + <_> + 11 5 3 3 -1. + <_> + 12 5 1 3 3. + 0 + 1.2845669873058796e-002 + -1.1354859918355942e-001 + 3.0396461486816406e-001 + <_> + + <_> + + + + <_> + 4 7 4 1 -1. + <_> + 5 7 2 1 2. + 0 + 8.8591687381267548e-003 + 7.5328573584556580e-002 + -3.4735369682312012e-001 + <_> + + <_> + + + + <_> + 10 7 3 1 -1. + <_> + 11 7 1 1 3. + 0 + 8.7100565433502197e-003 + -2.5546409189701080e-002 + 3.1419700384140015e-001 + <_> + + <_> + + + + <_> + 1 5 4 3 -1. + <_> + 3 5 2 3 2. + 0 + -2.4336729198694229e-002 + 1.5685400366783142e-001 + -1.4091870188713074e-001 + <_> + + <_> + + + + <_> + 16 2 2 10 -1. + <_> + 16 7 2 5 2. + 0 + 2.0705789327621460e-002 + -1.3573260605335236e-001 + 9.9381998181343079e-002 + <_> + + <_> + + + + <_> + 6 3 2 3 -1. + <_> + 6 4 2 1 3. + 0 + 6.4271190203726292e-003 + -8.6527682840824127e-002 + 2.5319969654083252e-001 + <_> + + <_> + + + + <_> + 3 5 12 2 -1. + <_> + 3 6 12 1 2. + 0 + 1.4646859839558601e-002 + -1.3291080296039581e-001 + 1.4640970528125763e-001 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -2.0743489265441895e-002 + 1.4069710671901703e-001 + -1.3886369764804840e-001 + <_> + + <_> + + + + <_> + 8 0 4 3 -1. + <_> + 9 0 2 3 2. + 0 + -9.7419740632176399e-003 + -5.1748061180114746e-001 + 4.0649030357599258e-002 + <_> + + <_> + + + + <_> + 6 0 4 3 -1. + <_> + 7 0 2 3 2. + 0 + -6.0930829495191574e-003 + -4.0435808897018433e-001 + 4.6360980719327927e-002 + <_> + + <_> + + + + <_> + 8 2 4 3 -1. + <_> + 8 3 4 1 3. + 0 + -2.5379290804266930e-002 + 3.0655589699745178e-001 + -3.5374239087104797e-002 + <_> + + <_> + + + + <_> + 2 1 8 1 -1. + <_> + 4 3 4 1 2. + 1 + -6.1475291848182678e-002 + -3.8354039192199707e-001 + 4.7201968729496002e-002 + <_> + + <_> + + + + <_> + 6 10 6 2 -1. + <_> + 8 10 2 2 3. + 0 + 1.2456119991838932e-002 + 3.3344469964504242e-002 + -4.9855390191078186e-001 + <_> + + <_> + + + + <_> + 6 7 6 3 -1. + <_> + 6 8 6 1 3. + 0 + 2.1596459671854973e-002 + -7.4448928236961365e-002 + 2.3217280209064484e-001 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 3.2071918249130249e-002 + -3.6879450082778931e-001 + 5.1230560988187790e-002 + <_> + + <_> + + + + <_> + 5 4 3 1 -1. + <_> + 6 5 1 1 3. + 1 + -1.7727240920066833e-002 + 2.6015728712081909e-001 + -6.7504949867725372e-002 + <_> + + <_> + + + + <_> + 10 5 4 2 -1. + <_> + 12 5 2 1 2. + <_> + 10 6 2 1 2. + 0 + -1.2539019808173180e-002 + 2.1004550158977509e-001 + -2.3079540580511093e-002 + <_> + + <_> + + + + <_> + 6 4 3 3 -1. + <_> + 7 5 1 3 3. + 1 + 1.5370660461485386e-002 + -7.7269732952117920e-002 + 2.3955790698528290e-001 + <_> + + <_> + + + + <_> + 16 10 2 2 -1. + <_> + 16 11 2 1 2. + 0 + -5.0980560481548309e-003 + -4.3999078869819641e-001 + 1.7386879771947861e-002 + <_> + + <_> + + + + <_> + 0 10 2 2 -1. + <_> + 0 11 2 1 2. + 0 + -2.8011109679937363e-003 + -4.4160670042037964e-001 + 3.2729189842939377e-002 + <_> + + <_> + + + + <_> + 17 8 1 4 -1. + <_> + 17 9 1 2 2. + 0 + -1.5965040074661374e-003 + -1.4084090292453766e-001 + 4.0539931505918503e-002 + <_> + + <_> + + + + <_> + 0 8 1 4 -1. + <_> + 0 9 1 2 2. + 0 + -1.9109409768134356e-003 + -2.8206449747085571e-001 + 5.5733498185873032e-002 + <_> + + <_> + + + + <_> + 12 5 6 2 -1. + <_> + 15 5 3 1 2. + <_> + 12 6 3 1 2. + 0 + 5.7939320802688599e-002 + -1.5600599581375718e-003 + -7.8283268213272095e-001 + <_> + + <_> + + + + <_> + 0 5 6 2 -1. + <_> + 0 5 3 1 2. + <_> + 3 6 3 1 2. + 0 + -7.5398529879748821e-003 + 2.0363679528236389e-001 + -7.2035230696201324e-002 + <_> + + <_> + + + + <_> + 10 0 4 4 -1. + <_> + 11 0 2 4 2. + 0 + 4.2799189686775208e-003 + 5.1637120544910431e-002 + -2.6890641450881958e-001 + <_> + + <_> + + + + <_> + 7 6 2 2 -1. + <_> + 7 6 1 1 2. + <_> + 8 7 1 1 2. + 0 + -3.8095400668680668e-003 + 3.0433818697929382e-001 + -4.3821170926094055e-002 + <_> + + <_> + + + + <_> + 16 3 2 3 -1. + <_> + 16 4 2 1 3. + 0 + 6.6761439666152000e-003 + 4.3164499104022980e-002 + -3.7114360928535461e-001 + <_> + + <_> + + + + <_> + 3 5 4 2 -1. + <_> + 3 5 2 1 2. + <_> + 5 6 2 1 2. + 0 + -7.2293779812753201e-003 + 2.7686190605163574e-001 + -5.2161470055580139e-002 + <_> + + <_> + + + + <_> + 3 1 15 4 -1. + <_> + 3 2 15 2 2. + 0 + 4.3478921055793762e-002 + -7.0697076618671417e-002 + 1.4227619767189026e-001 + <_> + + <_> + + + + <_> + 7 1 4 3 -1. + <_> + 8 1 2 3 2. + 0 + 8.6060278117656708e-003 + 3.9228759706020355e-002 + -3.4136408567428589e-001 + <_> + + <_> + + + + <_> + 7 0 6 3 -1. + <_> + 7 1 6 1 3. + 0 + 1.6463410109281540e-002 + -7.1609079837799072e-002 + 1.5261730551719666e-001 + <_> + + <_> + + + + <_> + 0 0 13 3 -1. + <_> + 0 1 13 1 3. + 0 + -2.6798190549015999e-002 + 2.5057008862495422e-001 + -6.0030229389667511e-002 + <_> + + <_> + + + + <_> + 16 3 2 3 -1. + <_> + 16 4 2 1 3. + 0 + -1.3578269630670547e-002 + -5.7186329364776611e-001 + 2.3683719336986542e-002 + <_> + + <_> + + + + <_> + 3 2 3 2 -1. + <_> + 3 3 3 1 2. + 0 + -5.4585109464824200e-003 + 1.3189469277858734e-001 + -1.0400889813899994e-001 + <_> + + <_> + + + + <_> + 17 4 1 2 -1. + <_> + 17 5 1 1 2. + 0 + -1.0323669994249940e-004 + 8.6108498275279999e-002 + -7.8769676387310028e-002 + <_> + + <_> + + + + <_> + 0 4 1 2 -1. + <_> + 0 5 1 1 2. + 0 + -4.0363529697060585e-003 + -4.4107070565223694e-001 + 3.1886640936136246e-002 + <_> + + <_> + + + + <_> + 6 5 12 3 -1. + <_> + 9 5 6 3 2. + 0 + -2.5648690760135651e-002 + 7.3849938809871674e-002 + -9.3154169619083405e-002 + <_> + + <_> + + + + <_> + 5 9 8 3 -1. + <_> + 5 10 8 1 3. + 0 + -6.7097870633006096e-003 + 1.6499599814414978e-001 + -7.4880279600620270e-002 + <_> + + <_> + + + + <_> + 16 6 2 6 -1. + <_> + 16 6 1 6 2. + 0 + -9.9235828965902328e-003 + 1.8079340457916260e-001 + -6.5171472728252411e-002 + <_> + + <_> + + + + <_> + 4 10 3 2 -1. + <_> + 5 10 1 2 3. + 0 + -6.9562699645757675e-003 + -5.2876442670822144e-001 + 2.5368360802531242e-002 + <_> + + <_> + + + + <_> + 16 7 2 4 -1. + <_> + 16 7 1 4 2. + 0 + 8.2617141306400299e-003 + -5.0331529229879379e-002 + 2.9480621218681335e-001 + <_> + + <_> + + + + <_> + 0 6 2 6 -1. + <_> + 1 6 1 6 2. + 0 + 3.3671088516712189e-002 + -1.6121190041303635e-002 + 6.7309892177581787e-001 + <_> + + <_> + + + + <_> + 8 10 4 2 -1. + <_> + 9 10 2 2 2. + 0 + 6.3832988962531090e-003 + 2.5124080479145050e-002 + -4.9571260809898376e-001 + <_> + + <_> + + + + <_> + 4 3 6 3 -1. + <_> + 4 3 3 3 2. + 1 + 1.1697970330715179e-002 + 4.3101280927658081e-002 + -2.4264599382877350e-001 + <_> + + <_> + + + + <_> + 16 1 2 2 -1. + <_> + 16 1 1 2 2. + 1 + -1.2845739722251892e-002 + -3.6139601469039917e-001 + 4.5609131455421448e-002 + <_> + + <_> + + + + <_> + 2 1 2 2 -1. + <_> + 2 1 2 1 2. + 1 + 1.3638010248541832e-002 + 3.0973179265856743e-002 + -3.6637219786643982e-001 + <_> + + <_> + + + + <_> + 4 0 10 1 -1. + <_> + 4 0 5 1 2. + 0 + 8.9795887470245361e-003 + -1.0917530208826065e-001 + 1.0718029737472534e-001 + <_> + + <_> + + + + <_> + 1 0 16 4 -1. + <_> + 1 1 16 2 2. + 0 + -7.2535842657089233e-002 + 3.0982971191406250e-001 + -3.4692220389842987e-002 + <_> + + <_> + + + + <_> + 15 0 3 2 -1. + <_> + 16 1 1 2 3. + 1 + 1.1674970388412476e-002 + 3.3513750880956650e-002 + -2.6671060919761658e-001 + <_> + + <_> + + + + <_> + 3 0 7 2 -1. + <_> + 3 1 7 1 2. + 0 + 1.4128520153462887e-002 + -7.4317902326583862e-002 + 1.9508810341358185e-001 + <_> + + <_> + + + + <_> + 9 9 6 3 -1. + <_> + 11 9 2 3 3. + 0 + -3.2944388687610626e-002 + -3.3596301078796387e-001 + 1.2414090335369110e-002 + <_> + + <_> + + + + <_> + 3 9 6 3 -1. + <_> + 5 9 2 3 3. + 0 + 1.3753149658441544e-002 + 4.0032509714365005e-002 + -2.6519769430160522e-001 + <_> + + <_> + + + + <_> + 13 3 4 3 -1. + <_> + 12 4 4 1 3. + 1 + -3.3233430236577988e-002 + 1.6016100347042084e-001 + -2.2260909900069237e-002 + <_> + + <_> + + + + <_> + 9 0 1 2 -1. + <_> + 9 0 1 1 2. + 1 + 6.1078928411006927e-003 + -4.8795029520988464e-002 + 2.0597800612449646e-001 + <_> + + <_> + + + + <_> + 15 0 3 2 -1. + <_> + 16 1 1 2 3. + 1 + -1.0937879793345928e-002 + -2.0160789787769318e-001 + 4.1750270873308182e-002 + <_> + + <_> + + + + <_> + 3 0 2 3 -1. + <_> + 2 1 2 1 3. + 1 + -1.0795599780976772e-002 + -2.4597220122814178e-001 + 4.4583730399608612e-002 + <_> + + <_> + + + + <_> + 15 0 3 4 -1. + <_> + 14 1 3 2 2. + 1 + -1.4712370000779629e-002 + 8.2067541778087616e-002 + -4.7636579722166061e-002 + <_> + + <_> + + + + <_> + 3 0 4 3 -1. + <_> + 4 1 2 3 2. + 1 + -3.1026970595121384e-002 + 3.1423869729042053e-001 + -3.3792741596698761e-002 + <_> + + <_> + + + + <_> + 0 4 18 3 -1. + <_> + 6 4 6 3 3. + 0 + -7.8690350055694580e-002 + 5.8236971497535706e-002 + -2.0244419574737549e-001 + <_> + + <_> + + + + <_> + 0 0 12 12 -1. + <_> + 6 0 6 12 2. + 0 + 1.0032179951667786e-001 + -4.5807100832462311e-002 + 2.7768740057945251e-001 + <_> + + <_> + + + + <_> + 9 5 4 2 -1. + <_> + 11 5 2 1 2. + <_> + 9 6 2 1 2. + 0 + -4.2365980334579945e-005 + 5.0709828734397888e-002 + -7.6038338243961334e-002 + <_> + + <_> + + + + <_> + 8 8 2 3 -1. + <_> + 8 9 2 1 3. + 0 + -5.2146702073514462e-003 + 2.2490769624710083e-001 + -4.9134440720081329e-002 + <_> + + <_> + + + + <_> + 16 5 2 3 -1. + <_> + 16 6 2 1 3. + 0 + -1.0706060129450634e-004 + 6.7870803177356720e-002 + -8.7166316807270050e-002 + <_> + + <_> + + + + <_> + 5 5 2 2 -1. + <_> + 5 5 1 1 2. + <_> + 6 6 1 1 2. + 0 + -3.8535310886800289e-003 + 2.6514551043510437e-001 + -3.8151159882545471e-002 + <_> + + <_> + + + + <_> + 16 5 2 3 -1. + <_> + 16 6 2 1 3. + 0 + -6.6675869747996330e-003 + -1.8696850538253784e-001 + 3.4325890243053436e-002 + <_> + + <_> + + + + <_> + 5 4 3 3 -1. + <_> + 6 5 1 1 9. + 0 + -7.2776339948177338e-003 + 9.9364303052425385e-002 + -9.7539342939853668e-002 + <_> + + <_> + + + + <_> + 6 5 6 7 -1. + <_> + 6 5 3 7 2. + 0 + 8.5002653300762177e-002 + -4.4809039682149887e-002 + 2.5511339306831360e-001 + <_> + + <_> + + + + <_> + 1 7 12 2 -1. + <_> + 4 7 6 2 2. + 0 + 2.2640319541096687e-002 + 3.7417881190776825e-002 + -2.6542389392852783e-001 + <_> + + <_> + + + + <_> + 9 5 3 3 -1. + <_> + 10 5 1 3 3. + 0 + -1.4759110286831856e-002 + -1.4441870152950287e-001 + 2.6218270882964134e-002 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 7 5 1 3 3. + 0 + -6.9840638898313046e-003 + 1.9986990094184875e-001 + -5.5323310196399689e-002 + <_> + + <_> + + + + <_> + 11 3 3 5 -1. + <_> + 12 3 1 5 3. + 0 + -1.2002780102193356e-002 + 2.7846589684486389e-001 + -3.5339098423719406e-002 + <_> + + <_> + + + + <_> + 0 4 12 8 -1. + <_> + 4 4 4 8 3. + 0 + -1.9566120207309723e-001 + -3.2644128799438477e-001 + 3.1533479690551758e-002 + <_> + + <_> + + + + <_> + 11 2 3 6 -1. + <_> + 12 2 1 6 3. + 0 + 2.8940979391336441e-002 + -2.4071710184216499e-002 + 2.0041519403457642e-001 + <_> + + <_> + + + + <_> + 4 2 3 6 -1. + <_> + 5 2 1 6 3. + 0 + -4.9572459829505533e-005 + 1.0405100136995316e-001 + -1.0776259750127792e-001 + <_> + + <_> + + + + <_> + 13 4 4 1 -1. + <_> + 14 5 2 1 2. + 1 + -3.3607240766286850e-003 + 9.9615901708602905e-002 + -8.3951607346534729e-002 + <_> + + <_> + + + + <_> + 6 10 3 1 -1. + <_> + 7 10 1 1 3. + 0 + -9.8188247648067772e-005 + 1.0282000154256821e-001 + -9.2874817550182343e-002 + <_> + + <_> + + + + <_> + 9 2 4 3 -1. + <_> + 10 2 2 3 2. + 0 + -1.1810559779405594e-002 + -2.9324960708618164e-001 + 3.6554131656885147e-002 + <_> + + <_> + + + + <_> + 8 2 2 3 -1. + <_> + 8 3 2 1 3. + 0 + -6.8092541769146919e-003 + 1.9611120223999023e-001 + -5.6822441518306732e-002 + <_> + + <_> + + + + <_> + 13 4 4 1 -1. + <_> + 14 5 2 1 2. + 1 + 3.2623611390590668e-002 + -9.4473883509635925e-003 + 5.0844651460647583e-001 + <_> + + <_> + + + + <_> + 5 4 1 4 -1. + <_> + 4 5 1 2 2. + 1 + -4.2930259369313717e-003 + 9.2036433517932892e-002 + -1.1842270195484161e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 0 3 18 6 2. + 0 + -8.6469340324401855e-001 + -3.9508619904518127e-001 + 2.5425970554351807e-002 + <_> + + <_> + + + + <_> + 6 2 1 3 -1. + <_> + 5 3 1 1 3. + 1 + 1.0441480204463005e-002 + 2.7400210499763489e-002 + -3.3969599008560181e-001 + <_> + + <_> + + + + <_> + 8 10 6 2 -1. + <_> + 10 10 2 2 3. + 0 + 2.1257670596241951e-002 + 1.0770229622721672e-002 + -5.4437619447708130e-001 + <_> + + <_> + + + + <_> + 3 0 2 1 -1. + <_> + 4 0 1 1 2. + 0 + 8.5998326539993286e-005 + -8.6119651794433594e-002 + 1.0474950075149536e-001 + <_> + + <_> + + + + <_> + 16 0 2 2 -1. + <_> + 16 1 2 1 2. + 0 + -1.1877079668920487e-004 + 1.3329850137233734e-001 + -2.2571019828319550e-001 + <_> + + <_> + + + + <_> + 7 4 3 3 -1. + <_> + 8 5 1 1 9. + 0 + -1.2582539580762386e-002 + 1.0203540325164795e-001 + -9.2602252960205078e-002 + <_> + + <_> + + + + <_> + 8 5 2 1 -1. + <_> + 8 5 1 1 2. + 0 + 8.5820167441852391e-005 + -1.1563900113105774e-001 + 8.9998990297317505e-002 + <_> + + <_> + + + + <_> + 5 2 4 3 -1. + <_> + 6 2 2 3 2. + 0 + 9.5666181296110153e-003 + 3.7725161761045456e-002 + -2.4878449738025665e-001 + <_> + + <_> + + + + <_> + 9 11 4 1 -1. + <_> + 10 11 2 1 2. + 0 + -5.7672890834510326e-003 + -5.6385320425033569e-001 + 1.1175219900906086e-002 + <_> + + <_> + + + + <_> + 1 0 6 10 -1. + <_> + 3 0 2 10 3. + 0 + -3.7847689818590879e-003 + 6.8087071180343628e-002 + -1.2581770122051239e-001 + <_> + + <_> + + + + <_> + 12 3 6 9 -1. + <_> + 14 6 2 3 9. + 0 + -2.5486249476671219e-002 + 5.7677350938320160e-002 + -9.9549897015094757e-002 + <_> + + <_> + + + + <_> + 0 3 6 9 -1. + <_> + 2 6 2 3 9. + 0 + 7.5713947415351868e-002 + -3.6518439650535583e-002 + 2.8699418902397156e-001 + <_> + + <_> + + + + <_> + 14 1 2 4 -1. + <_> + 13 2 2 2 2. + 1 + -9.0637598186731339e-003 + -7.7375017106533051e-002 + 4.0799569338560104e-002 + <_> + + <_> + + + + <_> + 0 4 14 4 -1. + <_> + 0 4 7 2 2. + <_> + 7 6 7 2 2. + 0 + 1.0294229723513126e-002 + -1.1247719824314117e-001 + 8.7451197206974030e-002 + <_> + + <_> + + + + <_> + 9 5 3 2 -1. + <_> + 10 6 1 2 3. + 1 + -6.5298741683363914e-003 + 7.0183053612709045e-002 + -8.9181199669837952e-002 + <_> + + <_> + + + + <_> + 0 1 8 10 -1. + <_> + 2 1 4 10 2. + 0 + -9.5547690987586975e-002 + -2.7765339612960815e-001 + 3.4830510616302490e-002 + <_> + + <_> + + + + <_> + 16 4 2 3 -1. + <_> + 16 5 2 1 3. + 0 + -1.1343659833073616e-002 + -3.5542330145835876e-001 + 2.3554539307951927e-002 + <_> + + <_> + + + + <_> + 1 1 2 2 -1. + <_> + 1 1 1 1 2. + <_> + 2 2 1 1 2. + 0 + -1.0126819688593969e-004 + 9.1516196727752686e-002 + -9.3038432300090790e-002 + <_> + + <_> + + + + <_> + 16 0 2 3 -1. + <_> + 15 1 2 1 3. + 1 + -1.8029360100626945e-002 + 1.9349269568920135e-001 + -2.5129379704594612e-002 + <_> + + <_> + + + + <_> + 2 0 3 2 -1. + <_> + 3 1 1 2 3. + 1 + -1.7232729122042656e-002 + 2.7890768647193909e-001 + -3.8710448890924454e-002 + <_> + + <_> + + + + <_> + 16 4 2 4 -1. + <_> + 16 5 2 2 2. + 0 + -1.1195029946975410e-004 + 5.0033789128065109e-002 + -8.3999648690223694e-002 + <_> + + <_> + + + + <_> + 0 4 2 4 -1. + <_> + 0 5 2 2 2. + 0 + 5.9721581637859344e-003 + 3.3347249031066895e-002 + -2.6903629302978516e-001 + <_> + + <_> + + + + <_> + 8 10 6 2 -1. + <_> + 10 10 2 2 3. + 0 + -2.3551829508505762e-004 + 6.8747326731681824e-002 + -9.7762331366539001e-002 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 6 10 6 2 3. + 0 + 4.1608728468418121e-002 + -4.2120318859815598e-002 + 2.1496939659118652e-001 + <_> + + <_> + + + + <_> + 8 10 3 1 -1. + <_> + 9 10 1 1 3. + 0 + -3.4065970685333014e-003 + -2.2874389588832855e-001 + 1.5017420053482056e-002 + <_> + + <_> + + + + <_> + 7 10 2 1 -1. + <_> + 8 10 1 1 2. + 0 + -1.0731370275607333e-004 + 8.7367862462997437e-002 + -9.8653607070446014e-002 + <_> + + <_> + + + + <_> + 9 10 2 1 -1. + <_> + 9 10 1 1 2. + 0 + -4.6097549784462899e-005 + 9.9156707525253296e-002 + -7.0301808416843414e-002 + <_> + + <_> + + + + <_> + 7 10 2 1 -1. + <_> + 8 10 1 1 2. + 0 + 9.1741916548926383e-005 + -7.4249409139156342e-002 + 1.2826450169086456e-001 + <_> + + <_> + + + + <_> + 8 9 2 1 -1. + <_> + 8 9 1 1 2. + 0 + 1.1397949856473133e-004 + -9.6481591463088989e-002 + 9.6139311790466309e-002 + <_> + + <_> + + + + <_> + 3 8 10 4 -1. + <_> + 3 8 5 2 2. + <_> + 8 10 5 2 2. + 0 + 5.6666661053895950e-002 + 1.8062859773635864e-002 + -5.1227068901062012e-001 + <_> + + <_> + + + + <_> + 11 6 3 3 -1. + <_> + 12 7 1 3 3. + 1 + -1.8091689795255661e-002 + 1.6024060547351837e-001 + -1.6382170841097832e-002 + <_> + + <_> + + + + <_> + 7 6 3 3 -1. + <_> + 6 7 3 1 3. + 1 + 4.2913880199193954e-002 + -1.9014870747923851e-002 + 4.5053559541702271e-001 + <_> + + <_> + + + + <_> + 8 9 6 2 -1. + <_> + 10 9 2 2 3. + 0 + -1.5276740305125713e-002 + -2.7582061290740967e-001 + 2.9354600235819817e-002 + <_> + + <_> + + + + <_> + 6 9 6 1 -1. + <_> + 8 9 2 1 3. + 0 + -9.3131810426712036e-003 + -2.5190541148185730e-001 + 3.3755309879779816e-002 + <_> + + <_> + + + + <_> + 10 3 4 4 -1. + <_> + 10 5 4 2 2. + 0 + 3.0541479587554932e-002 + -3.3350829035043716e-002 + 1.2646000087261200e-001 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 6 4 6 8 3. + 0 + -1.9827249646186829e-001 + 7.0513941347599030e-002 + -1.3399259746074677e-001 + <_> + + <_> + + + + <_> + 12 5 6 5 -1. + <_> + 14 5 2 5 3. + 0 + -2.1315490826964378e-002 + 1.2407120317220688e-001 + -9.3437470495700836e-002 + <_> + + <_> + + + + <_> + 5 5 4 2 -1. + <_> + 5 5 2 1 2. + <_> + 7 6 2 1 2. + 0 + -5.5536180734634399e-003 + 1.6640309989452362e-001 + -5.1540210843086243e-002 + <_> + + <_> + + + + <_> + 6 6 6 3 -1. + <_> + 8 7 2 1 9. + 0 + 2.9454020783305168e-002 + -4.1273329406976700e-002 + 2.5026160478591919e-001 + <_> + + <_> + + + + <_> + 0 8 2 2 -1. + <_> + 0 8 1 1 2. + <_> + 1 9 1 1 2. + 0 + 1.0502000077394769e-004 + -1.0847820341587067e-001 + 8.3983741700649261e-002 + <_> + + <_> + + + + <_> + 16 8 2 2 -1. + <_> + 17 8 1 1 2. + <_> + 16 9 1 1 2. + 0 + -1.0733069939306006e-004 + 8.3531558513641357e-002 + -5.6373700499534607e-002 + <_> + + <_> + + + + <_> + 0 8 2 2 -1. + <_> + 0 8 1 1 2. + <_> + 1 9 1 1 2. + 0 + -4.6264020056696609e-005 + 1.3745079934597015e-001 + -6.8600043654441833e-002 + <_> + + <_> + + + + <_> + 12 0 3 2 -1. + <_> + 13 1 1 2 3. + 1 + -1.5310499817132950e-002 + -1.9469089806079865e-001 + 2.8970900923013687e-002 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + -3.3486049622297287e-002 + -6.2618911266326904e-001 + 1.2297869659960270e-002 + <_> + + <_> + + + + <_> + 6 6 10 6 -1. + <_> + 11 6 5 3 2. + <_> + 6 9 5 3 2. + 0 + -1.1582080274820328e-001 + -4.2694661021232605e-001 + 1.9071470014750957e-003 + <_> + + <_> + + + + <_> + 4 3 4 4 -1. + <_> + 4 5 4 2 2. + 0 + 3.2180320471525192e-002 + -3.6031588912010193e-002 + 2.1900460124015808e-001 + <_> + + <_> + + + + <_> + 12 3 2 2 -1. + <_> + 12 3 1 2 2. + 1 + 9.9619124084711075e-003 + -2.2418439388275146e-002 + 8.1508889794349670e-002 + <_> + + <_> + + + + <_> + 6 0 2 3 -1. + <_> + 5 1 2 1 3. + 1 + -2.3083880543708801e-002 + -4.9076971411705017e-001 + 1.7307329922914505e-002 + <_> + + <_> + + + + <_> + 16 2 2 1 -1. + <_> + 16 2 1 1 2. + 0 + -1.1683529737638310e-004 + 1.0331380367279053e-001 + -2.0561179518699646e-001 + <_> + + <_> + + + + <_> + 1 0 16 2 -1. + <_> + 1 0 8 1 2. + <_> + 9 1 8 1 2. + 0 + 7.8267622739076614e-003 + -6.6107340157032013e-002 + 1.5025080740451813e-001 + <_> + + <_> + + + + <_> + 16 2 2 1 -1. + <_> + 16 2 1 1 2. + 0 + -6.3460809178650379e-003 + -3.0913439393043518e-001 + 1.4155699871480465e-002 + <_> + + <_> + + + + <_> + 0 2 2 1 -1. + <_> + 1 2 1 1 2. + 0 + 2.0096169319003820e-003 + -4.6867091208696365e-002 + 2.0841519534587860e-001 + <_> + + <_> + + + + <_> + 12 4 2 1 -1. + <_> + 12 4 1 1 2. + 1 + -3.3369109034538269e-002 + 4.1900089383125305e-001 + -3.8494879845529795e-003 + <_> + + <_> + + + + <_> + 6 4 1 2 -1. + <_> + 6 4 1 1 2. + 1 + -2.6893829926848412e-003 + -1.3875140249729156e-001 + 6.3448376953601837e-002 + -1.5681409835815430e+000 + 17 + -1 + <_> + + + <_> + + <_> + + + + <_> + 7 5 2 3 -1. + <_> + 6 6 2 1 3. + 1 + 3.3631179481744766e-002 + -2.7505779266357422e-001 + 7.1009528636932373e-001 + <_> + + <_> + + + + <_> + 8 1 9 9 -1. + <_> + 8 4 9 3 3. + 0 + -1.2867219746112823e-001 + 1.1402829736471176e-001 + -2.5071978569030762e-001 + <_> + + <_> + + + + <_> + 5 1 9 1 -1. + <_> + 8 4 3 1 3. + 1 + 1.8553440272808075e-001 + -7.1051809936761856e-004 + -2.0411979980468750e+003 + <_> + + <_> + + + + <_> + 8 5 4 2 -1. + <_> + 10 5 2 1 2. + <_> + 8 6 2 1 2. + 0 + -1.0022269561886787e-002 + 3.6850100755691528e-001 + -1.1276180297136307e-001 + <_> + + <_> + + + + <_> + 5 2 4 4 -1. + <_> + 6 3 2 4 2. + 1 + -4.8808779567480087e-002 + 3.3759531378746033e-001 + -2.0759710669517517e-001 + <_> + + <_> + + + + <_> + 12 5 3 2 -1. + <_> + 13 6 1 2 3. + 1 + 2.6742409914731979e-002 + -1.8537110090255737e-001 + 2.4919350445270538e-001 + <_> + + <_> + + + + <_> + 6 5 2 3 -1. + <_> + 5 6 2 1 3. + 1 + -1.0245149955153465e-002 + 2.5566178560256958e-001 + -1.6401439905166626e-001 + <_> + + <_> + + + + <_> + 15 2 3 10 -1. + <_> + 15 7 3 5 2. + 0 + 2.8364270925521851e-002 + -1.3210600614547729e-001 + 1.0085999965667725e-001 + <_> + + <_> + + + + <_> + 9 2 5 3 -1. + <_> + 8 3 5 1 3. + 1 + -1.9492400810122490e-002 + 1.1866439878940582e-001 + -2.2919100522994995e-001 + <_> + + <_> + + + + <_> + 16 2 2 10 -1. + <_> + 16 7 2 5 2. + 0 + 6.5401881933212280e-002 + 3.9086669683456421e-002 + -4.4828139245510101e-002 + <_> + + <_> + + + + <_> + 0 2 2 10 -1. + <_> + 0 7 2 5 2. + 0 + 9.7863655537366867e-003 + -2.8531849384307861e-001 + 9.7677417099475861e-002 + <_> + + <_> + + + + <_> + 1 0 16 9 -1. + <_> + 5 0 8 9 2. + 0 + -5.3927909582853317e-002 + 9.3449726700782776e-002 + -2.7780878543853760e-001 + <_> + + <_> + + + + <_> + 9 0 1 2 -1. + <_> + 9 0 1 1 2. + 1 + -4.8246569931507111e-003 + 2.2555319964885712e-001 + -1.0125789791345596e-001 + <_> + + <_> + + + + <_> + 5 4 8 2 -1. + <_> + 5 5 8 1 2. + 0 + 1.5018019825220108e-002 + -8.2751229405403137e-002 + 2.6553609967231750e-001 + <_> + + <_> + + + + <_> + 2 4 6 2 -1. + <_> + 2 4 3 1 2. + <_> + 5 5 3 1 2. + 0 + -9.9249351769685745e-003 + 2.6004979014396667e-001 + -9.1353721916675568e-002 + <_> + + <_> + + + + <_> + 16 4 2 6 -1. + <_> + 16 4 1 6 2. + 0 + -6.5024420619010925e-003 + 9.9367111921310425e-002 + -7.1672402322292328e-002 + <_> + + <_> + + + + <_> + 0 4 2 6 -1. + <_> + 1 4 1 6 2. + 0 + -3.4381379373371601e-003 + 1.2497270107269287e-001 + -1.8109659850597382e-001 + <_> + + <_> + + + + <_> + 10 6 4 1 -1. + <_> + 11 6 2 1 2. + 0 + -6.3433339819312096e-003 + 3.7100249528884888e-001 + -5.0013199448585510e-002 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 2.4360060691833496e-002 + -3.6683601140975952e-001 + 5.0595879554748535e-002 + <_> + + <_> + + + + <_> + 9 0 4 4 -1. + <_> + 10 0 2 4 2. + 0 + 8.0591458827257156e-003 + 3.8355801254510880e-002 + -3.9722838997840881e-001 + <_> + + <_> + + + + <_> + 6 6 2 2 -1. + <_> + 6 6 1 1 2. + <_> + 7 7 1 1 2. + 0 + -4.4672801159322262e-003 + 2.8062960505485535e-001 + -5.8162041008472443e-002 + <_> + + <_> + + + + <_> + 11 5 3 2 -1. + <_> + 12 6 1 2 3. + 1 + 3.4330900758504868e-002 + -3.9409149438142776e-002 + 2.3248769342899323e-001 + <_> + + <_> + + + + <_> + 7 5 2 3 -1. + <_> + 6 6 2 1 3. + 1 + 3.3590178936719894e-002 + 5.8214940130710602e-002 + -3.7649789452552795e-001 + <_> + + <_> + + + + <_> + 9 4 3 2 -1. + <_> + 10 5 1 2 3. + 1 + -4.8359300941228867e-002 + -3.1998670101165771e-001 + 3.7257380783557892e-002 + <_> + + <_> + + + + <_> + 9 4 2 3 -1. + <_> + 8 5 2 1 3. + 1 + -1.6094490885734558e-002 + 1.6750979423522949e-001 + -1.1763060092926025e-001 + <_> + + <_> + + + + <_> + 15 8 3 3 -1. + <_> + 15 9 3 1 3. + 0 + 1.2275910004973412e-002 + 1.5325929969549179e-002 + -2.7663159370422363e-001 + <_> + + <_> + + + + <_> + 0 8 3 3 -1. + <_> + 0 9 3 1 3. + 0 + 9.4588464125990868e-003 + 4.2470309883356094e-002 + -3.5148349404335022e-001 + <_> + + <_> + + + + <_> + 11 6 2 2 -1. + <_> + 12 6 1 1 2. + <_> + 11 7 1 1 2. + 0 + 5.2011879161000252e-003 + -4.8598669469356537e-002 + 2.2258450090885162e-001 + <_> + + <_> + + + + <_> + 3 0 6 5 -1. + <_> + 5 0 2 5 3. + 0 + -3.6433428525924683e-002 + -4.5761460065841675e-001 + 2.9529940336942673e-002 + <_> + + <_> + + + + <_> + 11 6 2 2 -1. + <_> + 12 6 1 1 2. + <_> + 11 7 1 1 2. + 0 + -3.7194520700722933e-003 + 2.8547590970993042e-001 + -3.9135500788688660e-002 + <_> + + <_> + + + + <_> + 5 6 2 2 -1. + <_> + 5 6 1 1 2. + <_> + 6 7 1 1 2. + 0 + -2.4795390199869871e-003 + 2.2883270680904388e-001 + -6.0576260089874268e-002 + <_> + + <_> + + + + <_> + 17 6 1 3 -1. + <_> + 17 7 1 1 3. + 0 + -5.4941270500421524e-003 + -3.0932080745697021e-001 + 2.9831670224666595e-002 + <_> + + <_> + + + + <_> + 4 5 1 2 -1. + <_> + 4 6 1 1 2. + 0 + 4.2734388262033463e-003 + -5.9098191559314728e-002 + 2.2960080206394196e-001 + <_> + + <_> + + + + <_> + 17 6 1 3 -1. + <_> + 17 7 1 1 3. + 0 + 2.8899749740958214e-003 + 3.2622959464788437e-002 + -2.0528559386730194e-001 + <_> + + <_> + + + + <_> + 1 3 10 2 -1. + <_> + 1 3 5 1 2. + <_> + 6 4 5 1 2. + 0 + -2.1825909614562988e-002 + 1.9279049336910248e-001 + -7.3136076331138611e-002 + <_> + + <_> + + + + <_> + 9 3 3 2 -1. + <_> + 9 4 3 1 2. + 0 + 1.3574689626693726e-002 + -1.6170579940080643e-002 + 2.6534038782119751e-001 + <_> + + <_> + + + + <_> + 0 6 1 3 -1. + <_> + 0 7 1 1 3. + 0 + 4.0199640206992626e-003 + 3.2929629087448120e-002 + -4.1653159260749817e-001 + <_> + + <_> + + + + <_> + 15 0 3 4 -1. + <_> + 16 1 1 4 3. + 1 + -3.7281829863786697e-002 + -2.7529978752136230e-001 + 2.0595779642462730e-002 + <_> + + <_> + + + + <_> + 0 1 16 1 -1. + <_> + 4 1 8 1 2. + 0 + 2.8378039598464966e-002 + -5.6658681482076645e-002 + 2.2680400311946869e-001 + <_> + + <_> + + + + <_> + 7 0 4 4 -1. + <_> + 7 1 4 2 2. + 0 + -1.8549919128417969e-002 + 2.8250589966773987e-001 + -5.3727861493825912e-002 + <_> + + <_> + + + + <_> + 3 0 4 3 -1. + <_> + 4 0 2 3 2. + 0 + 8.8881962001323700e-003 + 4.3956100940704346e-002 + -3.6961129307746887e-001 + <_> + + <_> + + + + <_> + 8 10 4 2 -1. + <_> + 9 10 2 2 2. + 0 + -6.3639208674430847e-003 + -3.8934838771820068e-001 + 1.6238860785961151e-002 + <_> + + <_> + + + + <_> + 3 4 8 6 -1. + <_> + 5 4 4 6 2. + 0 + -2.3416770622134209e-002 + -1.8020549416542053e-001 + 6.5479606389999390e-002 + <_> + + <_> + + + + <_> + 10 6 3 1 -1. + <_> + 11 6 1 1 3. + 0 + -2.0741058979183435e-003 + 1.5390050411224365e-001 + -8.0369636416435242e-002 + <_> + + <_> + + + + <_> + 2 4 12 8 -1. + <_> + 5 4 6 8 2. + 0 + -3.9896711707115173e-002 + 8.4819942712783813e-002 + -1.8152259290218353e-001 + <_> + + <_> + + + + <_> + 4 2 14 9 -1. + <_> + 4 2 7 9 2. + 0 + -5.8487498760223389e-001 + -5.4407620429992676e-001 + -2.0537020172923803e-003 + <_> + + <_> + + + + <_> + 2 3 12 9 -1. + <_> + 8 3 6 9 2. + 0 + 1.8590870499610901e-001 + -3.4733101725578308e-002 + 3.7966889142990112e-001 + <_> + + <_> + + + + <_> + 3 1 12 3 -1. + <_> + 3 1 6 3 2. + 0 + 4.4944491237401962e-002 + -1.0628589987754822e-001 + 1.2806500494480133e-001 + <_> + + <_> + + + + <_> + 6 2 3 3 -1. + <_> + 6 3 3 1 3. + 0 + -2.2796489298343658e-002 + 3.6542838811874390e-001 + -4.0509790182113647e-002 + <_> + + <_> + + + + <_> + 8 1 6 2 -1. + <_> + 10 1 2 2 3. + 0 + -2.6358839124441147e-002 + -5.2112942934036255e-001 + 3.0187880620360374e-002 + <_> + + <_> + + + + <_> + 5 6 3 1 -1. + <_> + 6 6 1 1 3. + 0 + -2.3396210744976997e-003 + 1.8814109265804291e-001 + -7.4049197137355804e-002 + <_> + + <_> + + + + <_> + 15 8 1 4 -1. + <_> + 15 9 1 2 2. + 0 + -1.2243230594322085e-004 + 5.7484649121761322e-002 + -3.9915520697832108e-002 + <_> + + <_> + + + + <_> + 2 8 1 4 -1. + <_> + 2 9 1 2 2. + 0 + 1.1718519817804918e-004 + -1.4954920113086700e-001 + 8.1642888486385345e-002 + <_> + + <_> + + + + <_> + 15 10 1 2 -1. + <_> + 15 11 1 1 2. + 0 + 4.4519607909023762e-003 + 1.6601830720901489e-002 + -1.5385159850120544e-001 + <_> + + <_> + + + + <_> + 2 10 1 2 -1. + <_> + 2 11 1 1 2. + 0 + 1.0932450095424429e-004 + -1.7002880573272705e-001 + 8.5956446826457977e-002 + <_> + + <_> + + + + <_> + 6 2 6 6 -1. + <_> + 8 4 2 2 9. + 0 + -8.5179023444652557e-002 + 8.5408963263034821e-002 + -1.3447010517120361e-001 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 6 0 6 1 3. + 0 + -5.0164520740509033e-002 + 1.8779170513153076e-001 + -6.7191623151302338e-002 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 8 0 2 3 3. + 0 + -3.1386420130729675e-002 + -6.1028450727462769e-001 + 1.9187970086932182e-002 + <_> + + <_> + + + + <_> + 2 8 2 2 -1. + <_> + 2 8 2 1 2. + 1 + 1.9179229857400060e-003 + -5.8911509811878204e-002 + 2.1525830030441284e-001 + <_> + + <_> + + + + <_> + 9 10 6 2 -1. + <_> + 11 10 2 2 3. + 0 + 2.4344459176063538e-002 + 1.1284279637038708e-002 + -3.6955431103706360e-001 + <_> + + <_> + + + + <_> + 6 9 5 2 -1. + <_> + 6 10 5 1 2. + 0 + -7.3110237717628479e-003 + 3.1973779201507568e-001 + -3.3365249633789063e-002 + <_> + + <_> + + + + <_> + 9 10 6 2 -1. + <_> + 11 10 2 2 3. + 0 + -2.2101389244198799e-002 + -2.7678531408309937e-001 + 1.2874299660325050e-002 + <_> + + <_> + + + + <_> + 3 10 6 2 -1. + <_> + 5 10 2 2 3. + 0 + -2.0385779440402985e-002 + -5.1266109943389893e-001 + 2.0121119916439056e-002 + <_> + + <_> + + + + <_> + 16 1 1 9 -1. + <_> + 13 4 1 3 3. + 1 + -1.1750890314579010e-001 + -1.9588080048561096e-001 + 2.0088920369744301e-002 + <_> + + <_> + + + + <_> + 6 2 1 3 -1. + <_> + 5 3 1 1 3. + 1 + -1.2457219883799553e-002 + -3.6020371317863464e-001 + 2.8396470472216606e-002 + <_> + + <_> + + + + <_> + 9 1 2 3 -1. + <_> + 9 2 2 1 3. + 0 + -6.5784770995378494e-003 + 1.8908539414405823e-001 + -4.3369468301534653e-002 + <_> + + <_> + + + + <_> + 0 2 18 4 -1. + <_> + 0 2 9 2 2. + <_> + 9 4 9 2 2. + 0 + 1.3688610494136810e-001 + 1.9999820739030838e-002 + -5.4874652624130249e-001 + <_> + + <_> + + + + <_> + 15 3 3 4 -1. + <_> + 15 4 3 2 2. + 0 + -2.8810320422053337e-002 + -5.5651491880416870e-001 + 1.0983499698340893e-002 + <_> + + <_> + + + + <_> + 0 3 3 4 -1. + <_> + 0 4 3 2 2. + 0 + 1.5747509896755219e-002 + 2.4598199874162674e-002 + -4.0236338973045349e-001 + <_> + + <_> + + + + <_> + 10 4 2 2 -1. + <_> + 11 4 1 1 2. + <_> + 10 5 1 1 2. + 0 + -7.6313503086566925e-005 + 5.5196251720190048e-002 + -8.7640739977359772e-002 + <_> + + <_> + + + + <_> + 4 4 3 4 -1. + <_> + 5 4 1 4 3. + 0 + -5.6491168215870857e-003 + 1.4749449491500854e-001 + -6.3069596886634827e-002 + <_> + + <_> + + + + <_> + 16 1 1 9 -1. + <_> + 13 4 1 3 3. + 1 + -1.7864599823951721e-001 + -7.5675052404403687e-001 + 3.4561890643090010e-003 + <_> + + <_> + + + + <_> + 2 1 9 1 -1. + <_> + 5 4 3 1 3. + 1 + -1.1177310347557068e-001 + -3.3842530846595764e-001 + 2.9908629134297371e-002 + <_> + + <_> + + + + <_> + 12 1 6 4 -1. + <_> + 15 1 3 2 2. + <_> + 12 3 3 2 2. + 0 + 1.7611680552363396e-002 + -2.5893269106745720e-002 + 1.0236769914627075e-001 + <_> + + <_> + + + + <_> + 1 0 14 4 -1. + <_> + 1 1 14 2 2. + 0 + 2.5229709222912788e-002 + -1.0067760199308395e-001 + 1.1171419918537140e-001 + <_> + + <_> + + + + <_> + 12 0 4 9 -1. + <_> + 13 0 2 9 2. + 0 + -7.2196209803223610e-003 + 1.3222789764404297e-001 + -1.1153940111398697e-001 + <_> + + <_> + + + + <_> + 0 10 3 2 -1. + <_> + 0 11 3 1 2. + 0 + -7.0246332325041294e-003 + -6.2780529260635376e-001 + 1.3513820245862007e-002 + <_> + + <_> + + + + <_> + 3 4 12 4 -1. + <_> + 6 4 6 4 2. + 0 + 5.8054771274328232e-002 + 1.9251599907875061e-002 + -4.7624149918556213e-001 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 7 1 4 1 3. + 0 + -1.0157009586691856e-002 + 1.8371550738811493e-001 + -5.8640699833631516e-002 + <_> + + <_> + + + + <_> + 12 0 4 9 -1. + <_> + 13 0 2 9 2. + 0 + -4.5374549925327301e-002 + -4.7950971126556396e-001 + 1.7445040866732597e-002 + <_> + + <_> + + + + <_> + 2 0 4 9 -1. + <_> + 3 0 2 9 2. + 0 + -1.0695769742596895e-004 + 6.9972157478332520e-002 + -1.4726209640502930e-001 + <_> + + <_> + + + + <_> + 15 0 3 2 -1. + <_> + 16 1 1 2 3. + 1 + -8.7402779608964920e-003 + -1.8943889439105988e-001 + 4.4850360602140427e-002 + <_> + + <_> + + + + <_> + 3 0 2 3 -1. + <_> + 2 1 2 1 3. + 1 + 1.4455690048635006e-002 + 2.9286550357937813e-002 + -3.3406850695610046e-001 + <_> + + <_> + + + + <_> + 10 3 4 5 -1. + <_> + 11 3 2 5 2. + 0 + -1.1007389985024929e-002 + 1.6767920553684235e-001 + -4.5263808220624924e-002 + <_> + + <_> + + + + <_> + 3 10 3 2 -1. + <_> + 4 10 1 2 3. + 0 + -8.1059811636805534e-003 + -5.3664588928222656e-001 + 1.8926989287137985e-002 + <_> + + <_> + + + + <_> + 1 11 16 1 -1. + <_> + 5 11 8 1 2. + 0 + 9.3566756695508957e-003 + -5.6550279259681702e-002 + 1.6391740739345551e-001 + <_> + + <_> + + + + <_> + 1 10 16 2 -1. + <_> + 5 10 8 2 2. + 0 + -1.1989709921181202e-002 + 9.8681986331939697e-002 + -9.3427039682865143e-002 + <_> + + <_> + + + + <_> + 15 1 3 3 -1. + <_> + 14 2 3 1 3. + 1 + -1.8332680687308311e-002 + 1.5537080168724060e-001 + -4.7529440373182297e-002 + <_> + + <_> + + + + <_> + 3 1 3 3 -1. + <_> + 4 2 1 3 3. + 1 + 2.2228980436921120e-002 + -5.3477160632610321e-002 + 1.7177890241146088e-001 + <_> + + <_> + + + + <_> + 8 2 2 2 -1. + <_> + 9 2 1 1 2. + <_> + 8 3 1 1 2. + 0 + 9.7822019597515464e-005 + -8.8446229696273804e-002 + 1.0630639642477036e-001 + <_> + + <_> + + + + <_> + 8 2 2 2 -1. + <_> + 8 2 1 1 2. + <_> + 9 3 1 1 2. + 0 + 9.5454830443486571e-005 + -8.7844558060169220e-002 + 1.0228630155324936e-001 + <_> + + <_> + + + + <_> + 8 10 4 2 -1. + <_> + 9 10 2 2 2. + 0 + 8.2959644496440887e-003 + 7.7602830715477467e-003 + -5.8247411251068115e-001 + <_> + + <_> + + + + <_> + 1 8 2 1 -1. + <_> + 1 8 1 1 2. + 1 + -8.2757556810975075e-005 + 6.4984649419784546e-002 + -1.3101190328598022e-001 + <_> + + <_> + + + + <_> + 2 6 16 6 -1. + <_> + 10 6 8 3 2. + <_> + 2 9 8 3 2. + 0 + 1.9920749962329865e-001 + 1.6709130257368088e-002 + -3.1872358918190002e-001 + <_> + + <_> + + + + <_> + 2 6 4 4 -1. + <_> + 2 6 2 2 2. + <_> + 4 8 2 2 2. + 0 + 1.3613670133054256e-002 + -6.2816083431243896e-002 + 1.7845809459686279e-001 + <_> + + <_> + + + + <_> + 13 0 4 10 -1. + <_> + 14 0 2 10 2. + 0 + -3.4157780464738607e-003 + 6.6462337970733643e-002 + -8.9528001844882965e-002 + <_> + + <_> + + + + <_> + 1 0 4 10 -1. + <_> + 2 0 2 10 2. + 0 + 8.7696220725774765e-003 + 5.9173680841922760e-002 + -1.9932749867439270e-001 + <_> + + <_> + + + + <_> + 9 5 3 2 -1. + <_> + 10 5 1 2 3. + 0 + -3.2113050110638142e-003 + 8.9376598596572876e-002 + -8.6342461407184601e-002 + <_> + + <_> + + + + <_> + 6 5 3 2 -1. + <_> + 7 5 1 2 3. + 0 + -6.0520251281559467e-003 + 1.8127410113811493e-001 + -4.9871731549501419e-002 + <_> + + <_> + + + + <_> + 10 7 3 1 -1. + <_> + 11 7 1 1 3. + 0 + -2.3850060533732176e-003 + 1.0447499901056290e-001 + -3.4482009708881378e-002 + <_> + + <_> + + + + <_> + 3 0 2 3 -1. + <_> + 2 1 2 1 3. + 1 + -2.1687719970941544e-002 + -4.5468750596046448e-001 + 2.1641310304403305e-002 + <_> + + <_> + + + + <_> + 10 7 3 1 -1. + <_> + 11 7 1 1 3. + 0 + 9.2866670456714928e-005 + -5.9006929397583008e-002 + 5.5168408900499344e-002 + <_> + + <_> + + + + <_> + 5 7 3 1 -1. + <_> + 6 7 1 1 3. + 0 + -1.4913419727236032e-003 + 1.6070629656314850e-001 + -5.8827608823776245e-002 + <_> + + <_> + + + + <_> + 10 10 8 2 -1. + <_> + 14 10 4 1 2. + <_> + 10 11 4 1 2. + 0 + 3.9107990451157093e-003 + -5.9656649827957153e-002 + 9.3852207064628601e-002 + <_> + + <_> + + + + <_> + 2 6 2 6 -1. + <_> + 2 8 2 2 3. + 0 + 3.5528650041669607e-003 + -1.0640110075473785e-001 + 9.0040393173694611e-002 + <_> + + <_> + + + + <_> + 13 9 3 2 -1. + <_> + 13 10 3 1 2. + 0 + 1.2945669703185558e-002 + 1.9677519798278809e-002 + -1.7321330308914185e-001 + <_> + + <_> + + + + <_> + 2 9 3 2 -1. + <_> + 2 10 3 1 2. + 0 + 8.4259969298727810e-005 + -2.3065930604934692e-001 + 5.5004071444272995e-002 + <_> + + <_> + + + + <_> + 14 4 2 6 -1. + <_> + 14 4 2 3 2. + 1 + -1.6149960458278656e-002 + 3.1157720834016800e-002 + -9.7619056701660156e-002 + <_> + + <_> + + + + <_> + 4 4 6 2 -1. + <_> + 4 4 3 2 2. + 1 + -1.3370880484580994e-001 + -4.6099790930747986e-001 + 2.0583210512995720e-002 + <_> + + <_> + + + + <_> + 11 7 2 1 -1. + <_> + 11 7 1 1 2. + 0 + -8.7964879348874092e-003 + 3.0732661485671997e-001 + -2.7057770639657974e-002 + <_> + + <_> + + + + <_> + 0 10 10 1 -1. + <_> + 5 10 5 1 2. + 0 + 5.8513940311968327e-003 + -5.1156919449567795e-002 + 1.6160629689693451e-001 + <_> + + <_> + + + + <_> + 4 3 12 9 -1. + <_> + 4 3 6 9 2. + 0 + 9.2029757797718048e-002 + -4.0357459336519241e-002 + 1.0516119748353958e-001 + <_> + + <_> + + + + <_> + 2 10 2 2 -1. + <_> + 2 10 1 1 2. + <_> + 3 11 1 1 2. + 0 + 1.0794289846671745e-004 + -9.3203842639923096e-002 + 9.3569189310073853e-002 + <_> + + <_> + + + + <_> + 15 8 1 3 -1. + <_> + 14 9 1 1 3. + 1 + -9.2651713639497757e-003 + -3.9545240998268127e-001 + 2.5677639991044998e-002 + <_> + + <_> + + + + <_> + 3 8 3 1 -1. + <_> + 4 9 1 1 3. + 1 + -1.4052440412342548e-002 + -5.9753012657165527e-001 + 1.5152829699218273e-002 + <_> + + <_> + + + + <_> + 7 5 4 4 -1. + <_> + 8 5 2 4 2. + 0 + -8.1634595990180969e-003 + 9.5714226365089417e-002 + -9.5124170184135437e-002 + <_> + + <_> + + + + <_> + 7 3 1 6 -1. + <_> + 7 3 1 3 2. + 1 + -7.2123326361179352e-002 + 3.2383221387863159e-001 + -2.8505349531769753e-002 + <_> + + <_> + + + + <_> + 15 2 2 4 -1. + <_> + 14 3 2 2 2. + 1 + -1.4225790277123451e-002 + 7.5030997395515442e-002 + -4.6096429228782654e-002 + <_> + + <_> + + + + <_> + 3 2 4 2 -1. + <_> + 4 3 2 2 2. + 1 + 4.9291448667645454e-003 + -7.9523496329784393e-002 + 1.3036440312862396e-001 + <_> + + <_> + + + + <_> + 6 4 12 6 -1. + <_> + 12 4 6 3 2. + <_> + 6 7 6 3 2. + 0 + -1.2931670062243938e-002 + -1.2009199708700180e-001 + 4.2189829051494598e-002 + <_> + + <_> + + + + <_> + 0 4 12 6 -1. + <_> + 0 4 6 3 2. + <_> + 6 7 6 3 2. + 0 + 1.8171440064907074e-001 + 2.2706279531121254e-002 + -4.8832720518112183e-001 + <_> + + <_> + + + + <_> + 10 3 1 4 -1. + <_> + 10 4 1 2 2. + 0 + -2.9113100841641426e-002 + -6.3608497381210327e-001 + 8.8415952632203698e-004 + <_> + + <_> + + + + <_> + 7 3 1 4 -1. + <_> + 7 4 1 2 2. + 0 + 5.7110278867185116e-003 + -3.9759650826454163e-002 + 2.3626869916915894e-001 + <_> + + <_> + + + + <_> + 17 3 1 4 -1. + <_> + 17 5 1 2 2. + 0 + 9.4733629375696182e-003 + 2.2379960864782333e-002 + -1.7788839340209961e-001 + <_> + + <_> + + + + <_> + 0 3 1 4 -1. + <_> + 0 5 1 2 2. + 0 + 9.1282920911908150e-003 + 3.3228699117898941e-002 + -2.5719881057739258e-001 + <_> + + <_> + + + + <_> + 11 4 2 1 -1. + <_> + 11 4 1 1 2. + 1 + -1.7273770645260811e-002 + 1.6270759701728821e-001 + -2.1705560386180878e-002 + <_> + + <_> + + + + <_> + 7 0 4 2 -1. + <_> + 8 0 2 2 2. + 0 + 5.9155421331524849e-003 + 2.9015779495239258e-002 + -2.9269620776176453e-001 + <_> + + <_> + + + + <_> + 1 2 16 1 -1. + <_> + 5 2 8 1 2. + 0 + 3.2589450478553772e-002 + -3.7038650363683701e-002 + 2.3939940333366394e-001 + <_> + + <_> + + + + <_> + 5 0 4 3 -1. + <_> + 6 0 2 3 2. + 0 + 6.0267271474003792e-003 + 4.7315951436758041e-002 + -2.2438630461692810e-001 + <_> + + <_> + + + + <_> + 16 0 2 3 -1. + <_> + 15 1 2 1 3. + 1 + -1.1691940017044544e-002 + 1.1056809872388840e-001 + -3.3759210258722305e-002 + <_> + + <_> + + + + <_> + 5 1 3 2 -1. + <_> + 5 2 3 1 2. + 0 + -4.0161567740142345e-003 + 1.0859990119934082e-001 + -7.9750627279281616e-002 + <_> + + <_> + + + + <_> + 7 3 9 1 -1. + <_> + 10 3 3 1 3. + 0 + -2.7831029146909714e-003 + 6.5243370831012726e-002 + -1.0473190248012543e-001 + <_> + + <_> + + + + <_> + 5 7 2 1 -1. + <_> + 6 7 1 1 2. + 0 + 1.0584440315142274e-004 + -8.9639373123645782e-002 + 9.8210841417312622e-002 + <_> + + <_> + + + + <_> + 9 2 6 2 -1. + <_> + 9 2 6 1 2. + 1 + -1.5233529731631279e-002 + -6.2021549791097641e-002 + 1.6327550634741783e-002 + <_> + + <_> + + + + <_> + 9 2 2 6 -1. + <_> + 9 2 1 6 2. + 1 + -5.0070729106664658e-002 + -4.4011878967285156e-001 + 2.0913720130920410e-002 + <_> + + <_> + + + + <_> + 11 4 2 1 -1. + <_> + 11 4 1 1 2. + 1 + -5.1066437736153603e-003 + -5.4624948650598526e-002 + 3.3620700240135193e-002 + <_> + + <_> + + + + <_> + 2 5 3 6 -1. + <_> + 2 7 3 2 3. + 0 + 1.1259020306169987e-002 + -6.2500476837158203e-002 + 1.5815970301628113e-001 + <_> + + <_> + + + + <_> + 12 3 4 2 -1. + <_> + 13 4 2 2 2. + 1 + -2.9940709471702576e-002 + 9.9289081990718842e-002 + -1.5471179969608784e-002 + <_> + + <_> + + + + <_> + 6 3 2 4 -1. + <_> + 5 4 2 2 2. + 1 + -5.5130548775196075e-002 + -6.7135852575302124e-001 + 1.5666810795664787e-002 + <_> + + <_> + + + + <_> + 16 8 2 4 -1. + <_> + 17 8 1 2 2. + <_> + 16 10 1 2 2. + 0 + -5.5883829481899738e-003 + 1.7980380356311798e-001 + -2.3508859798312187e-002 + <_> + + <_> + + + + <_> + 0 8 2 4 -1. + <_> + 0 8 1 2 2. + <_> + 1 10 1 2 2. + 0 + 1.0726720211096108e-004 + -1.2116920202970505e-001 + 7.4779331684112549e-002 + <_> + + <_> + + + + <_> + 17 0 1 3 -1. + <_> + 16 1 1 1 3. + 1 + -5.8314870111644268e-003 + 1.4616240561008453e-001 + -5.4507091641426086e-002 + <_> + + <_> + + + + <_> + 7 2 3 2 -1. + <_> + 8 2 1 2 3. + 0 + 8.7257036939263344e-003 + 1.9625810906291008e-002 + -4.1208940744400024e-001 + <_> + + <_> + + + + <_> + 12 6 2 2 -1. + <_> + 13 6 1 1 2. + <_> + 12 7 1 1 2. + 0 + -2.4206570815294981e-003 + 1.5835359692573547e-001 + -3.8983419537544250e-002 + <_> + + <_> + + + + <_> + 8 5 2 3 -1. + <_> + 7 6 2 1 3. + 1 + -2.1286660805344582e-002 + 2.2240610420703888e-001 + -3.5136040300130844e-002 + <_> + + <_> + + + + <_> + 10 4 2 1 -1. + <_> + 10 4 1 1 2. + 1 + 3.1091319397091866e-002 + 4.7937040217220783e-003 + -7.7131432294845581e-001 + <_> + + <_> + + + + <_> + 8 4 1 2 -1. + <_> + 8 4 1 1 2. + 1 + 1.7936730757355690e-002 + 1.5124980360269547e-002 + -5.3765070438385010e-001 + <_> + + <_> + + + + <_> + 12 6 2 2 -1. + <_> + 13 6 1 1 2. + <_> + 12 7 1 1 2. + 0 + 2.1349859889596701e-003 + -5.1612630486488342e-002 + 1.4234930276870728e-001 + <_> + + <_> + + + + <_> + 7 6 3 3 -1. + <_> + 8 7 1 3 3. + 1 + -3.0158199369907379e-002 + -3.8654580712318420e-001 + 2.1317519247531891e-002 + <_> + + <_> + + + + <_> + 16 0 2 3 -1. + <_> + 15 1 2 1 3. + 1 + 1.3773770071566105e-002 + -2.7151010930538177e-002 + 1.3596110045909882e-001 + <_> + + <_> + + + + <_> + 0 0 2 4 -1. + <_> + 0 2 2 2 2. + 0 + 4.1484188288450241e-002 + 1.2364120222628117e-002 + -6.0026621818542480e-001 + <_> + + <_> + + + + <_> + 16 0 2 3 -1. + <_> + 15 1 2 1 3. + 1 + 6.5589502453804016e-002 + -3.6776699125766754e-003 + 7.8460097312927246e-001 + <_> + + <_> + + + + <_> + 2 0 3 2 -1. + <_> + 3 1 1 2 3. + 1 + 1.1003009974956512e-002 + -6.3236251473426819e-002 + 1.5475340187549591e-001 + <_> + + <_> + + + + <_> + 17 0 1 3 -1. + <_> + 16 1 1 1 3. + 1 + -2.8239460662007332e-002 + -5.1131701469421387e-001 + 4.6110339462757111e-003 + <_> + + <_> + + + + <_> + 1 0 3 1 -1. + <_> + 2 1 1 1 3. + 1 + -1.2187300249934196e-002 + 2.7354350686073303e-001 + -3.5504270344972610e-002 + <_> + + <_> + + + + <_> + 15 2 3 3 -1. + <_> + 15 3 3 1 3. + 0 + 8.2632675766944885e-003 + 2.6573730632662773e-002 + -1.7602869868278503e-001 + <_> + + <_> + + + + <_> + 0 2 3 3 -1. + <_> + 0 3 3 1 3. + 0 + 5.9086610563099384e-003 + 4.5535139739513397e-002 + -1.7905420064926147e-001 + <_> + + <_> + + + + <_> + 0 2 18 3 -1. + <_> + 0 3 18 1 3. + 0 + 3.0929259955883026e-002 + -6.4203962683677673e-002 + 1.4781139791011810e-001 + <_> + + <_> + + + + <_> + 0 0 18 10 -1. + <_> + 9 0 9 10 2. + 0 + -6.3848549127578735e-001 + 3.0681729316711426e-001 + -2.5509320199489594e-002 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 0 11 9 1 2. + 0 + 7.2267033159732819e-002 + 2.5428939610719681e-002 + -3.7467381358146667e-001 + <_> + + <_> + + + + <_> + 6 6 2 4 -1. + <_> + 5 7 2 2 2. + 1 + -1.5226610004901886e-002 + 1.6329860687255859e-001 + -4.9246568232774734e-002 + <_> + + <_> + + + + <_> + 4 9 14 1 -1. + <_> + 4 9 7 1 2. + 0 + 1.2331340461969376e-002 + -4.1064839810132980e-002 + 8.4209568798542023e-002 + <_> + + <_> + + + + <_> + 4 9 6 2 -1. + <_> + 6 9 2 2 3. + 0 + 1.0107300244271755e-002 + 3.6028161644935608e-002 + -2.2353689372539520e-001 + <_> + + <_> + + + + <_> + 12 9 6 3 -1. + <_> + 12 10 6 1 3. + 0 + 2.2511450573801994e-002 + 1.1696700006723404e-002 + -3.9479258656501770e-001 + <_> + + <_> + + + + <_> + 0 9 2 2 -1. + <_> + 0 9 1 1 2. + <_> + 1 10 1 1 2. + 0 + -8.2349717558827251e-005 + 1.1120089888572693e-001 + -6.8608567118644714e-002 + <_> + + <_> + + + + <_> + 16 9 2 2 -1. + <_> + 17 9 1 1 2. + <_> + 16 10 1 1 2. + 0 + 1.0324839968234301e-004 + -6.6275127232074738e-002 + 6.7079029977321625e-002 + <_> + + <_> + + + + <_> + 0 9 2 2 -1. + <_> + 0 9 1 1 2. + <_> + 1 10 1 1 2. + 0 + 8.9090077381115407e-005 + -1.0303229838609695e-001 + 9.4525799155235291e-002 + <_> + + <_> + + + + <_> + 12 9 6 3 -1. + <_> + 12 10 6 1 3. + 0 + -4.1240658611059189e-002 + -7.6241451501846313e-001 + 4.3533057905733585e-003 + <_> + + <_> + + + + <_> + 0 9 1 2 -1. + <_> + 0 10 1 1 2. + 0 + 9.7355383331887424e-005 + -1.1680190265178680e-001 + 6.3053049147129059e-002 + <_> + + <_> + + + + <_> + 12 9 6 3 -1. + <_> + 12 10 6 1 3. + 0 + -1.0743820166680962e-004 + 6.4560279250144958e-002 + -5.4237850010395050e-002 + <_> + + <_> + + + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + 0 + 7.5144548900425434e-003 + 3.3215470612049103e-002 + -2.5936529040336609e-001 + <_> + + <_> + + + + <_> + 12 6 2 2 -1. + <_> + 13 6 1 1 2. + <_> + 12 7 1 1 2. + 0 + -1.2152430135756731e-003 + 7.2427697479724884e-002 + -3.1113930046558380e-002 + <_> + + <_> + + + + <_> + 4 6 2 2 -1. + <_> + 4 6 1 1 2. + <_> + 5 7 1 1 2. + 0 + 1.8813109491020441e-003 + -5.5175848305225372e-002 + 1.3634249567985535e-001 + <_> + + <_> + + + + <_> + 11 0 2 1 -1. + <_> + 11 0 1 1 2. + 0 + -5.5010379292070866e-003 + -4.3706288933753967e-001 + 1.2440679594874382e-002 + <_> + + <_> + + + + <_> + 5 0 2 1 -1. + <_> + 6 0 1 1 2. + 0 + -5.6884759105741978e-003 + -5.7385152578353882e-001 + 1.2120500206947327e-002 + <_> + + <_> + + + + <_> + 0 2 18 8 -1. + <_> + 9 2 9 4 2. + <_> + 0 6 9 4 2. + 0 + -3.1402000784873962e-001 + -5.8456861972808838e-001 + 1.0485970415174961e-002 + <_> + + <_> + + + + <_> + 2 5 14 6 -1. + <_> + 2 8 14 3 2. + 0 + -5.1054090261459351e-002 + -8.1812131404876709e-001 + 7.2916587814688683e-003 + <_> + + <_> + + + + <_> + 9 8 1 3 -1. + <_> + 9 9 1 1 3. + 0 + -3.5786549560725689e-003 + 1.6817580163478851e-001 + -3.0429689213633537e-002 + <_> + + <_> + + + + <_> + 8 9 2 2 -1. + <_> + 8 9 1 1 2. + <_> + 9 10 1 1 2. + 0 + -8.9935383584816009e-005 + 9.6470743417739868e-002 + -7.6730802655220032e-002 + <_> + + <_> + + + + <_> + 8 9 2 2 -1. + <_> + 9 9 1 1 2. + <_> + 8 10 1 1 2. + 0 + -9.1117057309020311e-005 + 1.1266720294952393e-001 + -9.5239438116550446e-002 + <_> + + <_> + + + + <_> + 4 4 1 3 -1. + <_> + 3 5 1 1 3. + 1 + -2.6042489334940910e-002 + -7.2348618507385254e-001 + 1.0882630012929440e-002 + <_> + + <_> + + + + <_> + 8 9 2 2 -1. + <_> + 9 9 1 1 2. + <_> + 8 10 1 1 2. + 0 + 8.9935383584816009e-005 + -8.0347903072834015e-002 + 9.3099772930145264e-002 + <_> + + <_> + + + + <_> + 8 8 2 1 -1. + <_> + 9 8 1 1 2. + 0 + 3.9171269163489342e-003 + 2.3305200040340424e-002 + -3.5824480652809143e-001 + <_> + + <_> + + + + <_> + 4 9 14 2 -1. + <_> + 4 9 7 2 2. + 0 + 1.1886080354452133e-001 + 4.6478789299726486e-003 + -5.0907981395721436e-001 + <_> + + <_> + + + + <_> + 0 9 14 2 -1. + <_> + 7 9 7 2 2. + 0 + 1.2497439980506897e-001 + -1.1920450255274773e-002 + 6.2223482131958008e-001 + <_> + + <_> + + + + <_> + 16 8 2 2 -1. + <_> + 16 9 2 1 2. + 0 + 3.2638079574098811e-005 + -5.9718921780586243e-002 + 2.8372069820761681e-002 + <_> + + <_> + + + + <_> + 0 8 2 2 -1. + <_> + 0 9 2 1 2. + 0 + -3.3235920127481222e-003 + -3.6871388554573059e-001 + 1.8724299967288971e-002 + <_> + + <_> + + + + <_> + 7 3 5 3 -1. + <_> + 7 4 5 1 3. + 0 + 3.6250781267881393e-002 + -2.9849739745259285e-002 + 2.6220449805259705e-001 + <_> + + <_> + + + + <_> + 5 5 3 2 -1. + <_> + 6 6 1 2 3. + 1 + 4.5288298279047012e-003 + -5.9577301144599915e-002 + 1.1369310319423676e-001 + <_> + + <_> + + + + <_> + 14 8 2 2 -1. + <_> + 15 8 1 1 2. + <_> + 14 9 1 1 2. + 0 + -1.1289530084468424e-004 + 6.7611873149871826e-002 + -5.3027831017971039e-002 + <_> + + <_> + + + + <_> + 2 8 2 2 -1. + <_> + 2 8 1 1 2. + <_> + 3 9 1 1 2. + 0 + 9.4089351478032768e-005 + -9.8176851868629456e-002 + 8.5162512958049774e-002 + <_> + + <_> + + + + <_> + 13 4 3 5 -1. + <_> + 14 4 1 5 3. + 0 + -5.3257388062775135e-003 + 1.2211889773607254e-001 + -9.0576842427253723e-002 + <_> + + <_> + + + + <_> + 2 1 3 7 -1. + <_> + 3 1 1 7 3. + 0 + -2.8568990528583527e-002 + -4.1049700975418091e-001 + 2.1933330222964287e-002 + <_> + + <_> + + + + <_> + 12 7 3 1 -1. + <_> + 13 7 1 1 3. + 0 + -1.9717009272426367e-003 + 1.6750890016555786e-001 + -6.1077561229467392e-002 + -1.5810970067977905e+000 + 18 + -1 + diff --git a/data/haarcascades/haarcascade_mcs_mouth.xml b/data/haarcascades/haarcascade_mcs_mouth.xml index 729aeb069..277a2eb67 100644 --- a/data/haarcascades/haarcascade_mcs_mouth.xml +++ b/data/haarcascades/haarcascade_mcs_mouth.xml @@ -1,85 +1,123 @@ BOOST diff --git a/data/haarcascades/haarcascade_mcs_nose.xml b/data/haarcascades/haarcascade_mcs_nose.xml index 53a79f6bc..d196df130 100644 --- a/data/haarcascades/haarcascade_mcs_nose.xml +++ b/data/haarcascades/haarcascade_mcs_nose.xml @@ -1,85 +1,122 @@ BOOST diff --git a/data/haarcascades/haarcascade_mcs_rightear.xml b/data/haarcascades/haarcascade_mcs_rightear.xml index ced31c4c0..61adf1692 100644 --- a/data/haarcascades/haarcascade_mcs_rightear.xml +++ b/data/haarcascades/haarcascade_mcs_rightear.xml @@ -1,66 +1,123 @@ - +If you have any commercial interest in this work contact mcastrillon@iusiani.ulpgc.es + + +Creative Commons Attribution-NonCommercial 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial 4.0 International +Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these +terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and +conditions. + +Section 1 – Definitions. + +Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public +License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. +Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public +License. +Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. +Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. +Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. +Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. +Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. +Licensor means the individual(s) or entity(ies) granting rights under this Public License. +NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. +Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. +Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. +You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + +License grant. + Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and + produce, reproduce, and Share Adapted Material for NonCommercial purposes only. + Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + Term. The term of this Public License is specified in Section 6(a). + Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + Downstream recipients. + Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +Other rights. + Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + Patent and trademark rights are not licensed under this Public License. + To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +Attribution. + + If You Share the Licensed Material (including in modified form), You must: + retain the following if it is supplied by the Licensor with the Licensed Material: + identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + a copyright notice; + a notice that refers to this Public License; + a notice that refers to the disclaimer of warranties; + a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + in any publication cite the following paper: + @INPROCEEDINGS{Castrillon11-caepia, + author = "Castrill\'on Santana, M. and Lorenzo Navarro, J. and Hern\'andez Sosa, D. ", + title = "An Study on Ear Detection and its Applications to Face Detection", + booktitle = "Conferencia de la Asociación Española para la Inteligencia Artificial (CAEPIA)", + year = "2011", + month = "November", + address = "La Laguna, Spain", + } + indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; + if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + upon express reinstatement by the Licensor. + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. +--> BOOST HAAR diff --git a/data/haarcascades/haarcascade_mcs_righteye.xml b/data/haarcascades/haarcascade_mcs_righteye.xml index 5f04afc21..8db288d26 100644 --- a/data/haarcascades/haarcascade_mcs_righteye.xml +++ b/data/haarcascades/haarcascade_mcs_righteye.xml @@ -1,85 +1,122 @@ BOOST diff --git a/data/haarcascades/haarcascade_mcs_righteye_alt.xml b/data/haarcascades/haarcascade_mcs_righteye_alt.xml new file mode 100644 index 000000000..43245afc3 --- /dev/null +++ b/data/haarcascades/haarcascade_mcs_righteye_alt.xml @@ -0,0 +1,22351 @@ + + + + + + 18 12 + + <_> + + + <_> + + <_> + + + + <_> + 3 0 12 12 -1. + <_> + 7 4 4 4 9. + 0 + -5.6810832023620605e-001 + 8.3960670232772827e-001 + -7.6481401920318604e-001 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 0 8 18 4 2. + 0 + 2.0721870660781860e-001 + -7.1712601184844971e-001 + 5.2041262388229370e-001 + <_> + + <_> + + + + <_> + 0 1 2 1 -1. + <_> + 1 1 1 1 2. + 0 + -3.3353710023220628e-005 + 4.7114491462707520e-001 + -6.5355622768402100e-001 + <_> + + <_> + + + + <_> + 12 2 5 8 -1. + <_> + 12 6 5 4 2. + 0 + 1.3509589433670044e-001 + 2.9115460813045502e-002 + -3.3245581388473511e-001 + <_> + + <_> + + + + <_> + 8 5 2 2 -1. + <_> + 8 5 2 1 2. + 1 + -2.0615929737687111e-002 + 6.8218058347702026e-001 + -2.8196701407432556e-001 + <_> + + <_> + + + + <_> + 14 0 2 5 -1. + <_> + 14 0 1 5 2. + 0 + -4.6026369091123343e-005 + 2.0233640074729919e-001 + -1.3312029838562012e-001 + <_> + + <_> + + + + <_> + 2 0 2 5 -1. + <_> + 3 0 1 5 2. + 0 + -4.4764939957531169e-005 + 2.8388169407844543e-001 + -4.7019150853157043e-001 + <_> + + <_> + + + + <_> + 3 0 12 6 -1. + <_> + 3 2 12 2 3. + 0 + 1.1478319764137268e-001 + -1.8182520568370819e-001 + 6.4350587129592896e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 7.4280993430875242e-005 + -4.9766281247138977e-001 + 2.3925340175628662e-001 + -1.8184880018234253e+000 + -1 + -1 + <_> + + + <_> + + <_> + + + + <_> + 3 0 12 12 -1. + <_> + 7 4 4 4 9. + 0 + -7.0355957746505737e-001 + 8.0994802713394165e-001 + -6.6400188207626343e-001 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 0 8 18 4 2. + 0 + 2.8693929314613342e-001 + -6.3067370653152466e-001 + 5.7269209623336792e-001 + <_> + + <_> + + + + <_> + 0 0 4 1 -1. + <_> + 2 0 2 1 2. + 0 + -4.2597850551828742e-005 + 3.1228521466255188e-001 + -6.9640642404556274e-001 + <_> + + <_> + + + + <_> + 4 2 10 6 -1. + <_> + 4 4 10 2 3. + 0 + -1.1617150157690048e-001 + 6.4757740497589111e-001 + -2.8760230541229248e-001 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 1.3706079684197903e-002 + -6.4052939414978027e-001 + 1.9451349973678589e-001 + <_> + + <_> + + + + <_> + 8 6 4 2 -1. + <_> + 8 6 2 2 2. + 0 + -1.3996980153024197e-002 + 2.3904429376125336e-001 + -1.2181480228900909e-001 + <_> + + <_> + + + + <_> + 5 6 6 2 -1. + <_> + 8 6 3 2 2. + 0 + -2.3848619312047958e-002 + 4.1974571347236633e-001 + -2.9327690601348877e-001 + <_> + + <_> + + + + <_> + 15 0 1 2 -1. + <_> + 15 1 1 1 2. + 0 + -5.0047809054376557e-005 + 9.3466326594352722e-002 + -8.5978589951992035e-002 + <_> + + <_> + + + + <_> + 2 0 1 2 -1. + <_> + 2 1 1 1 2. + 0 + -4.8869820602703840e-005 + 2.9515549540519714e-001 + -3.6450791358947754e-001 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + -8.1548085436224937e-003 + -7.9693388938903809e-001 + 1.1169960349798203e-001 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + 6.5567810088396072e-003 + 1.0915560275316238e-001 + -7.6665240526199341e-001 + -1.8897850513458252e+000 + 0 + -1 + <_> + + + <_> + + <_> + + + + <_> + 3 0 12 12 -1. + <_> + 7 4 4 4 9. + 0 + -7.9526257514953613e-001 + 7.6672828197479248e-001 + -5.7977437973022461e-001 + <_> + + <_> + + + + <_> + 12 0 6 5 -1. + <_> + 12 0 3 5 2. + 0 + -1.7080819234251976e-002 + 2.3749460279941559e-001 + -1.0151080042123795e-001 + <_> + + <_> + + + + <_> + 9 3 4 4 -1. + <_> + 9 3 4 2 2. + 1 + -8.8396757841110229e-002 + 6.1395412683486938e-001 + -4.0397110581398010e-001 + <_> + + <_> + + + + <_> + 6 0 12 4 -1. + <_> + 10 0 4 4 3. + 0 + 3.0759669840335846e-002 + -1.5979920327663422e-001 + 2.1410289406776428e-001 + <_> + + <_> + + + + <_> + 0 0 6 6 -1. + <_> + 3 0 3 6 2. + 0 + -2.8572969138622284e-002 + 4.6015259623527527e-001 + -4.9520689249038696e-001 + <_> + + <_> + + + + <_> + 0 6 18 6 -1. + <_> + 0 9 18 3 2. + 0 + 1.1635340005159378e-001 + -6.0537588596343994e-001 + 2.3268540203571320e-001 + <_> + + <_> + + + + <_> + 1 0 2 1 -1. + <_> + 1 0 1 1 2. + 1 + 1.0375100100645795e-004 + -5.2447670698165894e-001 + 2.0643760263919830e-001 + <_> + + <_> + + + + <_> + 10 10 8 2 -1. + <_> + 10 11 8 1 2. + 0 + -5.9346808120608330e-003 + -5.8789312839508057e-001 + 8.3713911473751068e-002 + <_> + + <_> + + + + <_> + 6 10 4 2 -1. + <_> + 7 10 2 2 2. + 0 + 6.6315559670329094e-003 + 1.0943070054054260e-001 + -7.9030650854110718e-001 + <_> + + <_> + + + + <_> + 11 9 1 2 -1. + <_> + 11 9 1 1 2. + 1 + 6.4884088933467865e-003 + 2.3464180529117584e-002 + -4.6662831306457520e-001 + <_> + + <_> + + + + <_> + 6 6 6 2 -1. + <_> + 8 6 2 2 3. + 0 + -2.5442529469728470e-002 + 4.1558659076690674e-001 + -2.0745509862899780e-001 + <_> + + <_> + + + + <_> + 11 9 1 2 -1. + <_> + 11 9 1 1 2. + 1 + -1.4391910284757614e-002 + -5.1255929470062256e-001 + 4.2892999947071075e-002 + <_> + + <_> + + + + <_> + 7 9 2 1 -1. + <_> + 7 9 1 1 2. + 1 + 3.7105670198798180e-003 + 1.3508659601211548e-001 + -6.7032521963119507e-001 + <_> + + <_> + + + + <_> + 7 1 4 3 -1. + <_> + 8 1 2 3 2. + 0 + -1.0664899833500385e-002 + -6.4452391862869263e-001 + 8.6801767349243164e-002 + <_> + + <_> + + + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + 0 + 1.3130259700119495e-002 + 7.2303600609302521e-002 + -7.2920471429824829e-001 + <_> + + <_> + + + + <_> + 14 9 4 3 -1. + <_> + 14 10 4 1 3. + 0 + -1.1123689822852612e-002 + -6.3051140308380127e-001 + 8.8690377771854401e-002 + -1.7659480571746826e+000 + 1 + -1 + <_> + + + <_> + + <_> + + + + <_> + 3 1 12 9 -1. + <_> + 7 4 4 3 9. + 0 + -4.8238849639892578e-001 + 6.7658770084381104e-001 + -6.3496381044387817e-001 + <_> + + <_> + + + + <_> + 1 4 16 8 -1. + <_> + 1 8 16 4 2. + 0 + 3.6105468869209290e-001 + -4.7645848989486694e-001 + 4.3273618817329407e-001 + <_> + + <_> + + + + <_> + 3 6 6 2 -1. + <_> + 5 6 2 2 3. + 0 + 3.7622179836034775e-002 + -2.5917899608612061e-001 + 6.6635400056838989e-001 + <_> + + <_> + + + + <_> + 6 0 12 4 -1. + <_> + 10 0 4 4 3. + 0 + 3.3445660024881363e-002 + -5.1630370318889618e-002 + 1.9169320166110992e-001 + <_> + + <_> + + + + <_> + 0 0 4 6 -1. + <_> + 2 0 2 6 2. + 0 + -1.5409329906105995e-002 + 2.8438740968704224e-001 + -4.7467359900474548e-001 + <_> + + <_> + + + + <_> + 17 0 1 2 -1. + <_> + 17 1 1 1 2. + 0 + -9.9044256785418838e-005 + 4.0987960994243622e-002 + -8.7138727307319641e-002 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + -1.1052149784518406e-004 + 2.7015548944473267e-001 + -3.5196688771247864e-001 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 2.2914599627256393e-002 + -5.8854997158050537e-001 + 1.4034299552440643e-001 + <_> + + <_> + + + + <_> + 9 2 6 2 -1. + <_> + 11 4 2 2 3. + 1 + -6.8064533174037933e-002 + 3.8482880592346191e-001 + -1.9926619529724121e-001 + <_> + + <_> + + + + <_> + 4 1 10 6 -1. + <_> + 4 3 10 2 3. + 0 + -1.3427540659904480e-001 + 5.3540730476379395e-001 + -1.2980240583419800e-001 + <_> + + <_> + + + + <_> + 2 0 9 4 -1. + <_> + 5 0 3 4 3. + 0 + -1.4653420075774193e-002 + 2.5729840993881226e-001 + -2.6571980118751526e-001 + <_> + + <_> + + + + <_> + 16 2 2 1 -1. + <_> + 16 2 1 1 2. + 0 + -1.2547649384941906e-004 + 7.7122293412685394e-002 + -7.7603712677955627e-002 + <_> + + <_> + + + + <_> + 0 2 2 1 -1. + <_> + 1 2 1 1 2. + 0 + -8.8957793195731938e-005 + 1.8061220645904541e-001 + -3.2629799842834473e-001 + <_> + + <_> + + + + <_> + 15 0 3 1 -1. + <_> + 16 1 1 1 3. + 1 + -1.5391400083899498e-002 + -4.6647891402244568e-001 + 2.8946319594979286e-002 + <_> + + <_> + + + + <_> + 5 8 2 2 -1. + <_> + 5 8 1 2 2. + 1 + -1.4515600167214870e-002 + -5.2544248104095459e-001 + 9.7634941339492798e-002 + <_> + + <_> + + + + <_> + 13 9 1 2 -1. + <_> + 13 9 1 1 2. + 1 + 6.8836379796266556e-003 + 2.6379430666565895e-002 + -5.2875238656997681e-001 + <_> + + <_> + + + + <_> + 5 9 2 1 -1. + <_> + 5 9 1 1 2. + 1 + 2.9651119839400053e-003 + 9.0258508920669556e-002 + -5.3580790758132935e-001 + <_> + + <_> + + + + <_> + 9 5 4 4 -1. + <_> + 10 5 2 4 2. + 0 + -1.8835909664630890e-002 + 3.1948068737983704e-001 + -6.3316017389297485e-002 + <_> + + <_> + + + + <_> + 3 0 1 3 -1. + <_> + 2 1 1 1 3. + 1 + -7.3288138955831528e-003 + -4.4683480262756348e-001 + 1.0952600091695786e-001 + <_> + + <_> + + + + <_> + 2 0 14 8 -1. + <_> + 2 2 14 4 2. + 0 + 1.0221300274133682e-001 + -1.0253670066595078e-001 + 4.8284870386123657e-001 + <_> + + <_> + + + + <_> + 7 5 4 4 -1. + <_> + 8 5 2 4 2. + 0 + -6.8491459824144840e-003 + 2.4407060444355011e-001 + -1.7565080523490906e-001 + <_> + + <_> + + + + <_> + 17 8 1 4 -1. + <_> + 17 9 1 2 2. + 0 + -4.0765879675745964e-003 + -4.6912059187889099e-001 + 7.7857926487922668e-002 + <_> + + <_> + + + + <_> + 4 0 1 3 -1. + <_> + 3 1 1 1 3. + 1 + 9.3826521188020706e-003 + 6.5722987055778503e-002 + -5.7086908817291260e-001 + <_> + + <_> + + + + <_> + 15 2 3 1 -1. + <_> + 16 3 1 1 3. + 1 + 1.1709299869835377e-002 + 2.9651859775185585e-002 + -4.4558471441268921e-001 + <_> + + <_> + + + + <_> + 3 2 1 3 -1. + <_> + 2 3 1 1 3. + 1 + 3.7532749120146036e-003 + 1.2010630220174789e-001 + -3.4494531154632568e-001 + <_> + + <_> + + + + <_> + 10 5 6 3 -1. + <_> + 12 5 2 3 3. + 0 + 4.9949299544095993e-002 + -3.8329821079969406e-002 + 2.5580260157585144e-001 + <_> + + <_> + + + + <_> + 2 5 6 3 -1. + <_> + 4 5 2 3 3. + 0 + -1.9659079611301422e-002 + 3.4948769211769104e-001 + -1.0688430070877075e-001 + <_> + + <_> + + + + <_> + 14 8 1 3 -1. + <_> + 13 9 1 1 3. + 1 + -9.4384029507637024e-003 + -4.4859799742698669e-001 + 6.0474641621112823e-002 + <_> + + <_> + + + + <_> + 5 0 6 4 -1. + <_> + 5 1 6 2 2. + 0 + -3.2340411096811295e-002 + 4.6869951486587524e-001 + -8.7362661957740784e-002 + <_> + + <_> + + + + <_> + 10 10 1 2 -1. + <_> + 10 11 1 1 2. + 0 + 1.6322209557984024e-004 + -1.5675650537014008e-001 + 1.1256299912929535e-001 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 8 9 2 3 2. + 0 + 1.0735830292105675e-002 + 5.0046779215335846e-002 + -6.9020110368728638e-001 + <_> + + <_> + + + + <_> + 2 0 14 4 -1. + <_> + 2 1 14 2 2. + 0 + 2.6855830103158951e-002 + -1.3781370222568512e-001 + 2.5898760557174683e-001 + -1.9269560575485229e+000 + 2 + -1 + <_> + + + <_> + + <_> + + + + <_> + 7 4 4 2 -1. + <_> + 7 4 4 1 2. + 1 + -4.0210861712694168e-002 + 7.2760909795761108e-001 + -4.8194059729576111e-001 + <_> + + <_> + + + + <_> + 0 1 18 9 -1. + <_> + 6 4 6 3 9. + 0 + -9.4253152608871460e-001 + 6.5825307369232178e-001 + -3.3508211374282837e-001 + <_> + + <_> + + + + <_> + 2 5 4 3 -1. + <_> + 3 5 2 3 2. + 0 + -6.7276130430400372e-003 + 4.6350660920143127e-001 + -2.6712501049041748e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 0 4 18 4 3. + 0 + -3.4221410751342773e-001 + 2.6187661290168762e-001 + -4.4321650266647339e-001 + <_> + + <_> + + + + <_> + 0 0 12 3 -1. + <_> + 3 0 6 3 2. + 0 + -2.6442220434546471e-002 + 2.5853350758552551e-001 + -4.2997428774833679e-001 + <_> + + <_> + + + + <_> + 10 9 1 2 -1. + <_> + 10 9 1 1 2. + 1 + -1.1211539822397754e-004 + 1.0946519672870636e-001 + -2.2906930744647980e-001 + <_> + + <_> + + + + <_> + 8 9 2 3 -1. + <_> + 9 9 1 3 2. + 0 + -5.8475080877542496e-003 + -6.3840919733047485e-001 + 1.2859229743480682e-001 + <_> + + <_> + + + + <_> + 16 0 2 7 -1. + <_> + 16 0 1 7 2. + 0 + -3.1806540209800005e-003 + 1.5797249972820282e-001 + -2.2806149721145630e-001 + <_> + + <_> + + + + <_> + 0 0 2 2 -1. + <_> + 1 0 1 2 2. + 0 + -7.6963173341937363e-005 + 1.7013229429721832e-001 + -4.0136960148811340e-001 + <_> + + <_> + + + + <_> + 11 5 3 3 -1. + <_> + 12 5 1 3 3. + 0 + 1.0161420330405235e-002 + -1.2210579961538315e-001 + 4.2467159032821655e-001 + <_> + + <_> + + + + <_> + 4 5 3 3 -1. + <_> + 5 5 1 3 3. + 0 + -4.1128029115498066e-003 + 3.7742561101913452e-001 + -1.6708080470561981e-001 + <_> + + <_> + + + + <_> + 14 8 2 2 -1. + <_> + 14 8 2 1 2. + 1 + 9.5285046845674515e-003 + 5.7505119591951370e-002 + -4.5794519782066345e-001 + <_> + + <_> + + + + <_> + 5 2 8 4 -1. + <_> + 5 3 8 2 2. + 0 + 3.5861488431692123e-002 + -1.1722719669342041e-001 + 5.0423789024353027e-001 + <_> + + <_> + + + + <_> + 15 0 2 1 -1. + <_> + 15 0 1 1 2. + 1 + 1.1980050243437290e-002 + 4.8618610948324203e-002 + -4.2829948663711548e-001 + <_> + + <_> + + + + <_> + 4 2 10 4 -1. + <_> + 4 3 10 2 2. + 0 + -4.5652940869331360e-002 + 4.4611850380897522e-001 + -1.2824800610542297e-001 + <_> + + <_> + + + + <_> + 16 0 2 1 -1. + <_> + 16 0 1 1 2. + 1 + -1.2624289840459824e-002 + -4.7304341197013855e-001 + 3.3563230186700821e-002 + <_> + + <_> + + + + <_> + 2 0 1 2 -1. + <_> + 2 0 1 1 2. + 1 + -6.4819469116628170e-003 + -4.9199560284614563e-001 + 1.0396429896354675e-001 + <_> + + <_> + + + + <_> + 16 2 2 8 -1. + <_> + 16 2 1 8 2. + 0 + -3.8513869512826204e-003 + 1.3302020728588104e-001 + -1.5856249630451202e-001 + <_> + + <_> + + + + <_> + 0 3 2 5 -1. + <_> + 1 3 1 5 2. + 0 + -5.6580482050776482e-003 + 2.5680649280548096e-001 + -2.1377700567245483e-001 + <_> + + <_> + + + + <_> + 14 8 2 2 -1. + <_> + 14 8 2 1 2. + 1 + -2.7151580899953842e-002 + -4.8710969090461731e-001 + 3.2073508948087692e-002 + <_> + + <_> + + + + <_> + 4 8 2 2 -1. + <_> + 4 8 1 2 2. + 1 + 4.4631878845393658e-003 + 1.0160399973392487e-001 + -5.0148272514343262e-001 + <_> + + <_> + + + + <_> + 3 0 12 12 -1. + <_> + 7 0 4 12 3. + 0 + -9.2112571001052856e-002 + 2.0617170631885529e-001 + -2.4160179495811462e-001 + <_> + + <_> + + + + <_> + 5 11 6 1 -1. + <_> + 7 11 2 1 3. + 0 + -1.3351120054721832e-002 + -7.3643708229064941e-001 + 6.3407666981220245e-002 + <_> + + <_> + + + + <_> + 4 0 10 6 -1. + <_> + 4 2 10 2 3. + 0 + 1.4642560482025146e-001 + -1.0779049992561340e-001 + 4.4443801045417786e-001 + <_> + + <_> + + + + <_> + 0 8 3 4 -1. + <_> + 0 9 3 2 2. + 0 + -1.0188819840550423e-002 + -5.2276557683944702e-001 + 8.4325402975082397e-002 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 1.6951869474723935e-004 + -4.0729030966758728e-001 + 1.0294459760189056e-001 + <_> + + <_> + + + + <_> + 7 3 5 3 -1. + <_> + 6 4 5 1 3. + 1 + 4.2296588420867920e-002 + -8.3421789109706879e-002 + 4.9257528781890869e-001 + <_> + + <_> + + + + <_> + 8 0 2 3 -1. + <_> + 8 0 1 3 2. + 0 + -8.8663380593061447e-003 + -5.9615707397460938e-001 + 7.2008118033409119e-002 + <_> + + <_> + + + + <_> + 8 4 3 3 -1. + <_> + 7 5 3 1 3. + 1 + -2.6932360604405403e-002 + 3.9307719469070435e-001 + -9.4045691192150116e-002 + <_> + + <_> + + + + <_> + 4 1 10 4 -1. + <_> + 4 2 10 2 2. + 0 + -3.2513670623302460e-002 + 4.0155789256095886e-001 + -8.1126846373081207e-002 + <_> + + <_> + + + + <_> + 7 0 3 3 -1. + <_> + 8 0 1 3 3. + 0 + 5.6395838037133217e-003 + 8.2285016775131226e-002 + -4.2262369394302368e-001 + <_> + + <_> + + + + <_> + 9 4 4 3 -1. + <_> + 8 5 4 1 3. + 1 + 5.0715889781713486e-002 + -3.0324889346957207e-002 + 5.8319318294525146e-001 + <_> + + <_> + + + + <_> + 9 4 3 4 -1. + <_> + 10 5 1 4 3. + 1 + -1.4977410435676575e-002 + 2.2337380051612854e-001 + -1.5484930574893951e-001 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 8 0 2 3 3. + 0 + -3.6284331232309341e-002 + -7.2883737087249756e-001 + 4.9019519239664078e-002 + -1.8730369806289673e+000 + 3 + -1 + <_> + + + <_> + + <_> + + + + <_> + 3 2 12 6 -1. + <_> + 3 4 12 2 3. + 0 + -1.4310139417648315e-001 + 5.9999501705169678e-001 + -4.6854639053344727e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -4.5538708567619324e-002 + 6.0437542200088501e-001 + -3.2276171445846558e-001 + <_> + + <_> + + + + <_> + 0 6 18 6 -1. + <_> + 0 9 18 3 2. + 0 + 2.0528450608253479e-001 + -5.2343052625656128e-001 + 3.6189851164817810e-001 + <_> + + <_> + + + + <_> + 14 0 4 2 -1. + <_> + 14 0 2 2 2. + 0 + 1.1236000136705115e-004 + -7.1042299270629883e-002 + 5.5464118719100952e-002 + <_> + + <_> + + + + <_> + 0 0 15 4 -1. + <_> + 5 0 5 4 3. + 0 + -6.6982686519622803e-002 + 2.1147069334983826e-001 + -3.7349238991737366e-001 + <_> + + <_> + + + + <_> + 0 6 18 6 -1. + <_> + 9 6 9 3 2. + <_> + 0 9 9 3 2. + 0 + 4.2605780065059662e-002 + 1.5919719636440277e-001 + -4.6124869585037231e-001 + <_> + + <_> + + + + <_> + 0 0 2 3 -1. + <_> + 1 0 1 3 2. + 0 + -1.1038989759981632e-004 + 1.4112940430641174e-001 + -4.5499908924102783e-001 + <_> + + <_> + + + + <_> + 6 3 6 6 -1. + <_> + 8 5 2 2 9. + 0 + -1.1507949978113174e-001 + 2.5770258903503418e-001 + -2.6506200432777405e-001 + <_> + + <_> + + + + <_> + 0 10 6 2 -1. + <_> + 0 11 6 1 2. + 0 + -4.3419501744210720e-003 + -5.9668141603469849e-001 + 1.0230260342359543e-001 + <_> + + <_> + + + + <_> + 8 10 4 2 -1. + <_> + 9 10 2 2 2. + 0 + -7.3655629530549049e-003 + -7.5729858875274658e-001 + 6.3309803605079651e-002 + <_> + + <_> + + + + <_> + 6 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + 1.5698159113526344e-002 + 5.5984470993280411e-002 + -7.6305878162384033e-001 + <_> + + <_> + + + + <_> + 13 5 3 4 -1. + <_> + 14 6 1 4 3. + 1 + -1.4888670295476913e-002 + 1.4457429945468903e-001 + -5.9155210852622986e-002 + <_> + + <_> + + + + <_> + 1 6 6 2 -1. + <_> + 3 6 2 2 3. + 0 + -1.3309270143508911e-002 + 2.8473040461540222e-001 + -1.7599380016326904e-001 + <_> + + <_> + + + + <_> + 9 0 4 4 -1. + <_> + 10 0 2 4 2. + 0 + 1.2894039973616600e-002 + 5.7657320052385330e-002 + -5.1801967620849609e-001 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + -6.8263791035860777e-005 + 1.6647399961948395e-001 + -2.7714401483535767e-001 + <_> + + <_> + + + + <_> + 5 1 8 6 -1. + <_> + 5 3 8 2 3. + 0 + -1.4141130447387695e-001 + 5.0337702035903931e-001 + -9.7330093383789063e-002 + <_> + + <_> + + + + <_> + 9 2 6 3 -1. + <_> + 11 4 2 3 3. + 1 + -7.0793926715850830e-002 + 2.2329810261726379e-001 + -1.8872700631618500e-001 + <_> + + <_> + + + + <_> + 7 0 4 2 -1. + <_> + 8 0 2 2 2. + 0 + 6.0439859516918659e-003 + 7.4497416615486145e-002 + -5.1863551139831543e-001 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 8 9 2 3 2. + 0 + -8.5664521902799606e-003 + -5.3494322299957275e-001 + 6.5551057457923889e-002 + <_> + + <_> + + + + <_> + 15 7 3 2 -1. + <_> + 15 8 3 1 2. + 0 + 1.2475060066208243e-004 + -2.2479990124702454e-001 + 8.8108353316783905e-002 + <_> + + <_> + + + + <_> + 0 5 2 7 -1. + <_> + 1 5 1 7 2. + 0 + -1.0743389837443829e-002 + 2.6506188511848450e-001 + -1.3862170279026031e-001 + <_> + + <_> + + + + <_> + 13 9 1 2 -1. + <_> + 13 9 1 1 2. + 1 + 6.9530052132904530e-003 + 3.3702958375215530e-002 + -4.7984018921852112e-001 + <_> + + <_> + + + + <_> + 5 9 2 1 -1. + <_> + 5 9 1 1 2. + 1 + -7.5777601450681686e-003 + -4.4925630092620850e-001 + 8.1961393356323242e-002 + <_> + + <_> + + + + <_> + 4 1 10 4 -1. + <_> + 4 2 10 2 2. + 0 + -3.6117959767580032e-002 + 4.0106239914894104e-001 + -9.4889998435974121e-002 + <_> + + <_> + + + + <_> + 6 2 6 3 -1. + <_> + 6 3 6 1 3. + 0 + 3.0786920338869095e-002 + -8.4221139550209045e-002 + 4.5751860737800598e-001 + <_> + + <_> + + + + <_> + 16 3 2 4 -1. + <_> + 16 4 2 2 2. + 0 + 1.0906560346484184e-002 + 3.6288078874349594e-002 + -3.1307759881019592e-001 + <_> + + <_> + + + + <_> + 4 9 1 2 -1. + <_> + 4 10 1 1 2. + 0 + 7.7241609687916934e-005 + -2.6226210594177246e-001 + 1.2772110104560852e-001 + <_> + + <_> + + + + <_> + 16 3 2 4 -1. + <_> + 16 4 2 2 2. + 0 + -1.8342709168791771e-002 + -3.8035660982131958e-001 + 2.0931210368871689e-002 + <_> + + <_> + + + + <_> + 0 3 2 4 -1. + <_> + 0 4 2 2 2. + 0 + -1.4488579705357552e-002 + -6.2516981363296509e-001 + 5.0568919628858566e-002 + <_> + + <_> + + + + <_> + 17 2 1 8 -1. + <_> + 17 4 1 4 2. + 0 + -2.6086460798978806e-002 + -2.5289660692214966e-001 + 2.2778680548071861e-002 + <_> + + <_> + + + + <_> + 6 0 5 4 -1. + <_> + 6 1 5 2 2. + 0 + 2.4344440549612045e-002 + -1.0455399751663208e-001 + 3.2213151454925537e-001 + <_> + + <_> + + + + <_> + 17 2 1 8 -1. + <_> + 17 4 1 4 2. + 0 + 1.6739370301365852e-002 + 1.5031609684228897e-002 + -2.3286940157413483e-001 + <_> + + <_> + + + + <_> + 0 2 1 8 -1. + <_> + 0 4 1 4 2. + 0 + 6.9860741496086121e-003 + 8.2456819713115692e-002 + -4.0554359555244446e-001 + <_> + + <_> + + + + <_> + 11 6 3 2 -1. + <_> + 12 6 1 2 3. + 0 + -6.3432222232222557e-003 + 3.0635970830917358e-001 + -5.6111559271812439e-002 + <_> + + <_> + + + + <_> + 3 0 4 4 -1. + <_> + 4 0 2 4 2. + 0 + 1.3267910107970238e-002 + 5.8571081608533859e-002 + -5.6226778030395508e-001 + <_> + + <_> + + + + <_> + 9 0 4 3 -1. + <_> + 10 0 2 3 2. + 0 + -7.8068808652460575e-003 + -3.3495968580245972e-001 + 4.8010118305683136e-002 + <_> + + <_> + + + + <_> + 4 6 3 2 -1. + <_> + 5 6 1 2 3. + 0 + -4.6056290157139301e-003 + 3.3558750152587891e-001 + -1.0367739945650101e-001 + <_> + + <_> + + + + <_> + 3 5 12 6 -1. + <_> + 7 5 4 6 3. + 0 + -3.5391300916671753e-002 + 1.3985100388526917e-001 + -2.4411860108375549e-001 + <_> + + <_> + + + + <_> + 5 0 7 3 -1. + <_> + 5 1 7 1 3. + 0 + -3.1272999942302704e-002 + 4.2635110020637512e-001 + -6.7719720304012299e-002 + <_> + + <_> + + + + <_> + 9 0 4 3 -1. + <_> + 10 0 2 3 2. + 0 + 5.0648758187890053e-003 + 5.6782770901918411e-002 + -1.8407820165157318e-001 + <_> + + <_> + + + + <_> + 5 0 4 3 -1. + <_> + 6 0 2 3 2. + 0 + 1.1429510079324245e-002 + 5.1047790795564651e-002 + -5.8645612001419067e-001 + <_> + + <_> + + + + <_> + 12 5 6 3 -1. + <_> + 14 5 2 3 3. + 0 + -1.2818889692425728e-002 + 2.5195059180259705e-001 + -1.7262229323387146e-001 + <_> + + <_> + + + + <_> + 5 6 3 1 -1. + <_> + 6 6 1 1 3. + 0 + -2.5068391114473343e-003 + 3.4061318635940552e-001 + -8.6949199438095093e-002 + <_> + + <_> + + + + <_> + 12 9 1 2 -1. + <_> + 12 9 1 1 2. + 1 + 5.4749757982790470e-003 + 2.3750610649585724e-002 + -2.5926721096038818e-001 + <_> + + <_> + + + + <_> + 6 3 6 3 -1. + <_> + 6 4 6 1 3. + 0 + 1.1854119598865509e-002 + -9.0619556605815887e-002 + 2.9119190573692322e-001 + -1.8880920410156250e+000 + 4 + -1 + <_> + + + <_> + + <_> + + + + <_> + 7 4 4 2 -1. + <_> + 7 4 4 1 2. + 1 + -4.7739148139953613e-002 + 7.0311528444290161e-001 + -4.0234449505805969e-001 + <_> + + <_> + + + + <_> + 0 1 18 9 -1. + <_> + 6 4 6 3 9. + 0 + -8.0938947200775146e-001 + 4.6052539348602295e-001 + -4.0787270665168762e-001 + <_> + + <_> + + + + <_> + 8 2 4 4 -1. + <_> + 8 2 4 2 2. + 1 + 1.9570919871330261e-001 + 6.3850008882582188e-003 + -1.0483790283203125e+003 + <_> + + <_> + + + + <_> + 12 5 3 3 -1. + <_> + 13 5 1 3 3. + 0 + -5.5437600240111351e-003 + 4.4707939028739929e-001 + -2.0605599880218506e-001 + <_> + + <_> + + + + <_> + 2 0 13 4 -1. + <_> + 2 1 13 2 2. + 0 + 4.1489699482917786e-001 + 8.0591542646288872e-003 + -1.9253439941406250e+003 + <_> + + <_> + + + + <_> + 15 0 2 2 -1. + <_> + 15 0 1 2 2. + 0 + 1.2064840120729059e-004 + -8.8089093565940857e-002 + 9.6394099295139313e-002 + <_> + + <_> + + + + <_> + 0 3 2 1 -1. + <_> + 1 3 1 1 2. + 0 + -9.2417707492131740e-005 + 1.6505399346351624e-001 + -4.8010158538818359e-001 + <_> + + <_> + + + + <_> + 11 6 6 1 -1. + <_> + 13 6 2 1 3. + 0 + -1.2108679860830307e-002 + 3.5905620455741882e-001 + -1.1650399863719940e-001 + <_> + + <_> + + + + <_> + 0 6 18 6 -1. + <_> + 0 9 18 3 2. + 0 + 1.0738140344619751e-001 + -5.6591778993606567e-001 + 1.3803580403327942e-001 + <_> + + <_> + + + + <_> + 8 5 6 2 -1. + <_> + 10 5 2 2 3. + 0 + -2.1975189447402954e-002 + 4.2953509092330933e-001 + -1.5891620516777039e-001 + <_> + + <_> + + + + <_> + 1 4 6 4 -1. + <_> + 3 4 2 4 3. + 0 + -1.1959870345890522e-002 + 2.9616978764533997e-001 + -2.5460711121559143e-001 + <_> + + <_> + + + + <_> + 16 0 1 2 -1. + <_> + 16 1 1 1 2. + 0 + -9.0528890723362565e-005 + 7.4505448341369629e-002 + -6.9072231650352478e-002 + <_> + + <_> + + + + <_> + 1 0 2 1 -1. + <_> + 2 0 1 1 2. + 0 + -8.5102466982789338e-005 + 1.6419610381126404e-001 + -3.6688721179962158e-001 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 0 11 9 1 2. + 0 + 2.8498729690909386e-002 + 1.2233109772205353e-001 + -4.8675718903541565e-001 + <_> + + <_> + + + + <_> + 7 11 4 1 -1. + <_> + 9 11 2 1 2. + 0 + 7.7169570140540600e-003 + 6.4482487738132477e-002 + -6.9540137052536011e-001 + <_> + + <_> + + + + <_> + 7 5 4 6 -1. + <_> + 8 5 2 6 2. + 0 + -7.1217319928109646e-003 + 2.0365479588508606e-001 + -2.2741779685020447e-001 + <_> + + <_> + + + + <_> + 8 9 2 1 -1. + <_> + 8 9 1 1 2. + 1 + -1.1075680231442675e-004 + 1.4500780403614044e-001 + -3.4105348587036133e-001 + <_> + + <_> + + + + <_> + 15 0 1 2 -1. + <_> + 15 1 1 1 2. + 0 + 1.1053880007239059e-004 + -6.8307012319564819e-002 + 7.4650689959526062e-002 + <_> + + <_> + + + + <_> + 2 0 1 2 -1. + <_> + 2 1 1 1 2. + 0 + -9.6507181297056377e-005 + 1.8268570303916931e-001 + -2.7704128623008728e-001 + <_> + + <_> + + + + <_> + 0 0 18 4 -1. + <_> + 0 1 18 2 2. + 0 + 3.3470049500465393e-002 + -1.5655350685119629e-001 + 3.1936529278755188e-001 + <_> + + <_> + + + + <_> + 2 2 14 3 -1. + <_> + 2 3 14 1 3. + 0 + 2.0096020773053169e-002 + -1.5562969446182251e-001 + 3.1467041373252869e-001 + <_> + + <_> + + + + <_> + 17 1 1 4 -1. + <_> + 17 2 1 2 2. + 0 + 7.0277601480484009e-003 + 3.7986829876899719e-002 + -3.0223649740219116e-001 + <_> + + <_> + + + + <_> + 6 11 6 1 -1. + <_> + 8 11 2 1 3. + 0 + 6.9380169734358788e-003 + 8.1531472504138947e-002 + -5.6371027231216431e-001 + <_> + + <_> + + + + <_> + 17 1 1 4 -1. + <_> + 17 2 1 2 2. + 0 + -2.7956028934568167e-003 + -1.8539020419120789e-001 + 3.9439260959625244e-002 + <_> + + <_> + + + + <_> + 0 0 1 6 -1. + <_> + 0 2 1 2 3. + 0 + 1.5885600820183754e-002 + 5.9267118573188782e-002 + -7.1854251623153687e-001 + <_> + + <_> + + + + <_> + 16 0 2 4 -1. + <_> + 16 0 1 4 2. + 1 + 3.7774249911308289e-002 + 1.4310140162706375e-002 + -5.0811702013015747e-001 + <_> + + <_> + + + + <_> + 2 0 4 2 -1. + <_> + 2 0 4 1 2. + 1 + 1.5504850074648857e-002 + 8.0278262495994568e-002 + -4.4908508658409119e-001 + <_> + + <_> + + + + <_> + 15 2 2 8 -1. + <_> + 15 4 2 4 2. + 0 + -1.9444189965724945e-002 + 1.7838209867477417e-001 + -1.8505999445915222e-001 + <_> + + <_> + + + + <_> + 6 3 6 3 -1. + <_> + 6 4 6 1 3. + 0 + 2.8419150039553642e-002 + -8.1356927752494812e-002 + 4.9391180276870728e-001 + <_> + + <_> + + + + <_> + 5 1 8 6 -1. + <_> + 5 3 8 2 3. + 0 + -8.3308592438697815e-002 + 3.3119910955429077e-001 + -1.1275950074195862e-001 + <_> + + <_> + + + + <_> + 5 0 8 3 -1. + <_> + 5 1 8 1 3. + 0 + -2.0398350432515144e-002 + 3.7371310591697693e-001 + -1.0401429980993271e-001 + <_> + + <_> + + + + <_> + 15 1 3 9 -1. + <_> + 15 4 3 3 3. + 0 + 1.4064489305019379e-001 + 8.4198080003261566e-003 + -6.9457089900970459e-001 + <_> + + <_> + + + + <_> + 0 1 3 9 -1. + <_> + 0 4 3 3 3. + 0 + 1.9191060215234756e-002 + 8.8749423623085022e-002 + -4.0662020444869995e-001 + <_> + + <_> + + + + <_> + 7 11 4 1 -1. + <_> + 8 11 2 1 2. + 0 + -3.9051079656928778e-003 + -5.7998901605606079e-001 + 5.1149401813745499e-002 + <_> + + <_> + + + + <_> + 0 10 1 2 -1. + <_> + 0 11 1 1 2. + 0 + -2.0223320461809635e-003 + -4.7456279397010803e-001 + 5.7810228317975998e-002 + <_> + + <_> + + + + <_> + 11 5 3 3 -1. + <_> + 12 5 1 3 3. + 0 + -7.0939320139586926e-003 + 2.5586429238319397e-001 + -5.9901829808950424e-002 + <_> + + <_> + + + + <_> + 3 5 4 4 -1. + <_> + 4 5 2 4 2. + 0 + -8.3198416978120804e-003 + 2.6578190922737122e-001 + -1.1572790145874023e-001 + <_> + + <_> + + + + <_> + 16 9 2 3 -1. + <_> + 16 10 2 1 3. + 0 + -7.8159309923648834e-003 + -5.6447637081146240e-001 + 5.0173521041870117e-002 + <_> + + <_> + + + + <_> + 0 9 2 3 -1. + <_> + 0 10 2 1 3. + 0 + -1.1840989813208580e-002 + -7.6622551679611206e-001 + 3.0004199594259262e-002 + <_> + + <_> + + + + <_> + 10 4 3 3 -1. + <_> + 11 5 1 3 3. + 1 + -1.4432789757847786e-002 + 1.5162460505962372e-001 + -1.3350149989128113e-001 + <_> + + <_> + + + + <_> + 2 0 9 4 -1. + <_> + 5 0 3 4 3. + 0 + -8.0706225708127022e-003 + 1.2732319533824921e-001 + -2.2091729938983917e-001 + <_> + + <_> + + + + <_> + 8 0 4 3 -1. + <_> + 9 0 2 3 2. + 0 + 1.1658039875328541e-002 + 4.3274190276861191e-002 + -5.2941519021987915e-001 + <_> + + <_> + + + + <_> + 8 8 2 2 -1. + <_> + 8 8 1 2 2. + 1 + -1.9893579185009003e-002 + -5.3083962202072144e-001 + 4.3910909444093704e-002 + <_> + + <_> + + + + <_> + 14 9 1 2 -1. + <_> + 14 9 1 1 2. + 1 + 6.7451149225234985e-003 + 2.1857760846614838e-002 + -4.6655520796775818e-001 + <_> + + <_> + + + + <_> + 4 9 2 1 -1. + <_> + 4 9 1 1 2. + 1 + -1.0237179958494380e-004 + 1.1223310232162476e-001 + -2.4498760700225830e-001 + <_> + + <_> + + + + <_> + 10 4 3 3 -1. + <_> + 11 5 1 3 3. + 1 + -3.7937998771667480e-002 + 1.5558369457721710e-001 + -2.5431839749217033e-002 + <_> + + <_> + + + + <_> + 5 8 2 2 -1. + <_> + 5 8 1 2 2. + 1 + -1.2750740163028240e-002 + -3.4159570932388306e-001 + 7.8362293541431427e-002 + <_> + + <_> + + + + <_> + 16 8 2 2 -1. + <_> + 16 8 1 2 2. + 0 + -1.2596500164363533e-004 + 1.3888040184974670e-001 + -1.7169789969921112e-001 + <_> + + <_> + + + + <_> + 0 8 2 2 -1. + <_> + 1 8 1 2 2. + 0 + -4.9405978061258793e-003 + 2.7017688751220703e-001 + -9.4520643353462219e-002 + <_> + + <_> + + + + <_> + 16 3 2 1 -1. + <_> + 16 3 1 1 2. + 0 + -2.8547599868034013e-005 + 6.3881427049636841e-002 + -6.6255062818527222e-002 + -1.8309839963912964e+000 + 5 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.2969099916517735e-002 + -4.2454311251640320e-001 + 6.9157850742340088e-001 + <_> + + <_> + + + + <_> + 0 1 18 9 -1. + <_> + 6 4 6 3 9. + 0 + -1.0824010372161865e+000 + 6.2524372339248657e-001 + -2.5212618708610535e-001 + <_> + + <_> + + + + <_> + 1 4 10 3 -1. + <_> + 6 4 5 3 2. + 0 + 2.3240320384502411e-001 + 2.6453230530023575e-002 + -1.4411560058593750e+003 + <_> + + <_> + + + + <_> + 10 2 3 5 -1. + <_> + 11 3 1 5 3. + 1 + -2.4583930149674416e-002 + 1.5964910387992859e-001 + -7.7864259481430054e-002 + <_> + + <_> + + + + <_> + 7 5 2 2 -1. + <_> + 7 5 1 1 2. + <_> + 8 6 1 1 2. + 0 + -3.5321910399943590e-003 + 4.6771478652954102e-001 + -1.8968330323696136e-001 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 0 8 18 4 2. + 0 + 3.3865550160408020e-001 + -4.1563400626182556e-001 + 1.8573409318923950e-001 + <_> + + <_> + + + + <_> + 0 0 6 4 -1. + <_> + 3 0 3 4 2. + 0 + -2.1326009184122086e-002 + 1.8573179841041565e-001 + -3.5007140040397644e-001 + <_> + + <_> + + + + <_> + 9 5 3 2 -1. + <_> + 10 5 1 2 3. + 0 + -6.4955209381878376e-003 + 3.5978358983993530e-001 + -1.0183329880237579e-001 + <_> + + <_> + + + + <_> + 6 5 3 2 -1. + <_> + 7 5 1 2 3. + 0 + 1.1344100348651409e-002 + -9.0360596776008606e-002 + 5.8457189798355103e-001 + <_> + + <_> + + + + <_> + 11 10 1 2 -1. + <_> + 11 11 1 1 2. + 0 + 9.0495683252811432e-005 + -2.5225359201431274e-001 + 1.3392220437526703e-001 + <_> + + <_> + + + + <_> + 5 0 8 6 -1. + <_> + 5 2 8 2 3. + 0 + 7.7168926596641541e-002 + -1.5260620415210724e-001 + 3.4043470025062561e-001 + <_> + + <_> + + + + <_> + 17 0 1 2 -1. + <_> + 17 1 1 1 2. + 0 + -9.9228993349242955e-005 + 8.5841812193393707e-002 + -5.2303139120340347e-002 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + 2.1849910262972116e-003 + 7.4815556406974792e-002 + -5.9763509035110474e-001 + <_> + + <_> + + + + <_> + 13 9 1 2 -1. + <_> + 13 9 1 1 2. + 1 + -1.0754860006272793e-002 + -3.8698300719261169e-001 + 3.2411929219961166e-002 + <_> + + <_> + + + + <_> + 5 9 2 1 -1. + <_> + 5 9 1 1 2. + 1 + -1.0488190309843048e-004 + 1.3360279798507690e-001 + -3.4231778979301453e-001 + <_> + + <_> + + + + <_> + 11 1 3 6 -1. + <_> + 12 2 1 6 3. + 1 + -5.4005950689315796e-002 + 2.1657359600067139e-001 + -3.0087789520621300e-002 + <_> + + <_> + + + + <_> + 7 1 6 3 -1. + <_> + 6 2 6 1 3. + 1 + -1.8531499430537224e-002 + 1.7578999698162079e-001 + -2.3588539659976959e-001 + <_> + + <_> + + + + <_> + 8 0 4 3 -1. + <_> + 9 0 2 3 2. + 0 + -9.0950122103095055e-003 + -5.1968222856521606e-001 + 6.4523756504058838e-002 + <_> + + <_> + + + + <_> + 4 10 2 1 -1. + <_> + 5 10 1 1 2. + 0 + -9.8823191365227103e-005 + 1.9835579395294189e-001 + -2.0098380744457245e-001 + <_> + + <_> + + + + <_> + 5 4 8 2 -1. + <_> + 5 5 8 1 2. + 0 + 2.1061999723315239e-002 + -8.2831703126430511e-002 + 4.1824889183044434e-001 + <_> + + <_> + + + + <_> + 5 3 8 3 -1. + <_> + 5 4 8 1 3. + 0 + 1.6518259420990944e-002 + -9.7873881459236145e-002 + 3.6431550979614258e-001 + <_> + + <_> + + + + <_> + 16 4 2 2 -1. + <_> + 16 4 1 2 2. + 0 + -1.9625299610197544e-003 + 1.8844370543956757e-001 + -1.6893580555915833e-001 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + 5.3389389067888260e-003 + 6.2860213220119476e-002 + -5.6821030378341675e-001 + <_> + + <_> + + + + <_> + 16 4 2 4 -1. + <_> + 16 4 1 4 2. + 0 + -4.2285309173166752e-003 + 1.2900340557098389e-001 + -1.4946889877319336e-001 + <_> + + <_> + + + + <_> + 6 11 6 1 -1. + <_> + 8 11 2 1 3. + 0 + -1.3029079884290695e-002 + -7.4421662092208862e-001 + 4.5929558575153351e-002 + <_> + + <_> + + + + <_> + 16 4 2 4 -1. + <_> + 16 4 1 4 2. + 0 + -2.1244779229164124e-002 + -3.6576640605926514e-001 + 1.0424939915537834e-002 + <_> + + <_> + + + + <_> + 0 4 2 4 -1. + <_> + 1 4 1 4 2. + 0 + -4.5967479236423969e-003 + 1.7677290737628937e-001 + -1.8999819457530975e-001 + <_> + + <_> + + + + <_> + 11 0 4 4 -1. + <_> + 12 0 2 4 2. + 0 + -8.0737788230180740e-003 + -3.2994970679283142e-001 + 6.1676099896430969e-002 + <_> + + <_> + + + + <_> + 0 3 3 3 -1. + <_> + 0 4 3 1 3. + 0 + -1.6974760219454765e-002 + -7.1400022506713867e-001 + 4.0978480130434036e-002 + <_> + + <_> + + + + <_> + 3 0 12 3 -1. + <_> + 3 1 12 1 3. + 0 + 2.0088389515876770e-002 + -1.2316899746656418e-001 + 2.6806059479713440e-001 + <_> + + <_> + + + + <_> + 3 2 12 3 -1. + <_> + 3 3 12 1 3. + 0 + 2.1707860752940178e-002 + -1.2791140377521515e-001 + 2.8688108921051025e-001 + <_> + + <_> + + + + <_> + 15 4 3 4 -1. + <_> + 15 5 3 2 2. + 0 + 1.4121609739959240e-002 + 3.0740590766072273e-002 + -3.4621009230613708e-001 + <_> + + <_> + + + + <_> + 0 4 2 4 -1. + <_> + 0 5 2 2 2. + 0 + -1.3910040259361267e-002 + -5.6334692239761353e-001 + 5.4368961602449417e-002 + <_> + + <_> + + + + <_> + 11 0 4 4 -1. + <_> + 12 0 2 4 2. + 0 + 1.3910540379583836e-002 + 3.5999219864606857e-002 + -3.7284949421882629e-001 + <_> + + <_> + + + + <_> + 4 1 8 3 -1. + <_> + 6 1 4 3 2. + 0 + -6.9868760183453560e-003 + 1.5719449520111084e-001 + -1.8703240156173706e-001 + <_> + + <_> + + + + <_> + 12 6 6 6 -1. + <_> + 12 8 6 2 3. + 0 + 1.0331939905881882e-001 + 2.4535490199923515e-002 + -5.5506777763366699e-001 + <_> + + <_> + + + + <_> + 0 6 6 6 -1. + <_> + 0 8 6 2 3. + 0 + -5.4182611405849457e-002 + -4.5211860537528992e-001 + 5.8777388185262680e-002 + <_> + + <_> + + + + <_> + 16 9 2 2 -1. + <_> + 16 10 2 1 2. + 0 + -2.7721941005438566e-003 + -4.3239548802375793e-001 + 4.4798858463764191e-002 + <_> + + <_> + + + + <_> + 8 3 6 1 -1. + <_> + 10 5 2 1 3. + 1 + -2.7594869956374168e-002 + 1.6330890357494354e-001 + -1.6784989833831787e-001 + <_> + + <_> + + + + <_> + 16 9 2 2 -1. + <_> + 16 10 2 1 2. + 0 + 1.5242209658026695e-002 + 2.7706470340490341e-002 + -6.2536621093750000e-001 + <_> + + <_> + + + + <_> + 0 9 2 2 -1. + <_> + 0 10 2 1 2. + 0 + -2.6314980350434780e-003 + -4.2216229438781738e-001 + 6.5155752003192902e-002 + <_> + + <_> + + + + <_> + 7 2 4 4 -1. + <_> + 7 3 4 2 2. + 0 + -2.3606320843100548e-002 + 3.3093869686126709e-001 + -8.2543507218360901e-002 + <_> + + <_> + + + + <_> + 8 4 4 3 -1. + <_> + 7 5 4 1 3. + 1 + -4.0896769613027573e-002 + 4.7317719459533691e-001 + -5.4770849645137787e-002 + <_> + + <_> + + + + <_> + 11 6 3 2 -1. + <_> + 12 6 1 2 3. + 0 + 1.1066540144383907e-002 + -6.1698198318481445e-002 + 3.9080050587654114e-001 + <_> + + <_> + + + + <_> + 7 6 3 3 -1. + <_> + 6 7 3 1 3. + 1 + -3.5964860580861568e-004 + 1.7784999310970306e-001 + -1.5802909433841705e-001 + <_> + + <_> + + + + <_> + 15 7 3 2 -1. + <_> + 15 7 3 1 2. + 1 + 1.0035860352218151e-002 + 3.2939091324806213e-002 + -3.5791549086570740e-001 + <_> + + <_> + + + + <_> + 3 7 2 3 -1. + <_> + 3 7 1 3 2. + 1 + -2.1251719444990158e-002 + -4.0622410178184509e-001 + 5.7364061474800110e-002 + <_> + + <_> + + + + <_> + 16 0 1 2 -1. + <_> + 16 1 1 1 2. + 0 + -9.6790026873350143e-005 + 5.5528908967971802e-002 + -6.0613408684730530e-002 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 4 6 2 2 2. + 1 + -2.0986420568078756e-003 + 8.7490037083625793e-002 + -2.5980108976364136e-001 + <_> + + <_> + + + + <_> + 15 8 2 1 -1. + <_> + 15 8 1 1 2. + 1 + -1.5904919710010290e-003 + 9.1209657490253448e-002 + -1.8434490263462067e-001 + <_> + + <_> + + + + <_> + 3 8 1 2 -1. + <_> + 3 8 1 1 2. + 1 + 2.8348378837108612e-003 + -7.5825102627277374e-002 + 3.1011909246444702e-001 + <_> + + <_> + + + + <_> + 4 11 14 1 -1. + <_> + 4 11 7 1 2. + 0 + 5.2976410835981369e-002 + 2.2894360125064850e-002 + -3.6694788932800293e-001 + <_> + + <_> + + + + <_> + 0 11 16 1 -1. + <_> + 8 11 8 1 2. + 0 + 5.2993461489677429e-002 + 4.8855211585760117e-002 + -4.9654829502105713e-001 + <_> + + <_> + + + + <_> + 16 1 2 1 -1. + <_> + 16 1 1 1 2. + 0 + 1.1254799755988643e-004 + -6.4805597066879272e-002 + 7.7355362474918365e-002 + <_> + + <_> + + + + <_> + 0 1 2 1 -1. + <_> + 1 1 1 1 2. + 0 + -3.5766988730756566e-005 + 1.0217899829149246e-001 + -2.4918699264526367e-001 + <_> + + <_> + + + + <_> + 16 0 2 1 -1. + <_> + 16 0 1 1 2. + 1 + 1.2803260236978531e-002 + 2.1008219569921494e-002 + -4.8412579298019409e-001 + <_> + + <_> + + + + <_> + 2 0 1 2 -1. + <_> + 2 0 1 1 2. + 1 + -4.2998609133064747e-003 + -2.8178960084915161e-001 + 8.6436942219734192e-002 + <_> + + <_> + + + + <_> + 8 0 4 3 -1. + <_> + 9 0 2 3 2. + 0 + 7.0341289974749088e-003 + 4.7605708241462708e-002 + -3.1112289428710938e-001 + <_> + + <_> + + + + <_> + 4 5 2 2 -1. + <_> + 4 5 1 1 2. + <_> + 5 6 1 1 2. + 0 + -1.0176310315728188e-003 + 2.3361669480800629e-001 + -9.6844062209129333e-002 + <_> + + <_> + + + + <_> + 7 9 6 3 -1. + <_> + 9 9 2 3 3. + 0 + 1.2555380351841450e-002 + 6.3771553337574005e-002 + -3.2026350498199463e-001 + <_> + + <_> + + + + <_> + 2 5 12 6 -1. + <_> + 2 5 6 3 2. + <_> + 8 8 6 3 2. + 0 + 1.4610219746828079e-002 + -1.7586620151996613e-001 + 1.1790910363197327e-001 + <_> + + <_> + + + + <_> + 12 5 6 4 -1. + <_> + 14 5 2 4 3. + 0 + -1.8952880054712296e-002 + 1.6201509535312653e-001 + -9.1056473553180695e-002 + <_> + + <_> + + + + <_> + 0 5 6 4 -1. + <_> + 2 5 2 4 3. + 0 + -1.7667450010776520e-002 + 1.7925499379634857e-001 + -1.3047270476818085e-001 + -1.7924000024795532e+000 + 6 + -1 + <_> + + + <_> + + <_> + + + + <_> + 6 6 6 2 -1. + <_> + 8 6 2 2 3. + 0 + -1.9953019917011261e-002 + 4.6304538846015930e-001 + -5.4309362173080444e-001 + <_> + + <_> + + + + <_> + 6 4 11 6 -1. + <_> + 6 7 11 3 2. + 0 + 1.4101259410381317e-001 + -4.3483141064643860e-001 + 2.3144249618053436e-001 + <_> + + <_> + + + + <_> + 3 5 3 4 -1. + <_> + 4 5 1 4 3. + 0 + -3.8832230493426323e-003 + 3.5248211026191711e-001 + -3.3487960696220398e-001 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 5.5682440288364887e-003 + -5.0852102041244507e-001 + 2.4366380274295807e-001 + <_> + + <_> + + + + <_> + 1 7 10 2 -1. + <_> + 1 8 10 1 2. + 0 + 1.7619030177593231e-001 + -4.3959591537714005e-002 + -2.1098750000000000e+003 + <_> + + <_> + + + + <_> + 16 0 2 4 -1. + <_> + 16 0 1 4 2. + 0 + 2.1687010303139687e-003 + -1.0676959902048111e-001 + 1.9657030701637268e-001 + <_> + + <_> + + + + <_> + 0 0 2 5 -1. + <_> + 1 0 1 5 2. + 0 + -2.4930729996412992e-003 + 1.5274609625339508e-001 + -4.5544859766960144e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 6 4 6 4 9. + 0 + -1.3881989717483521e+000 + 3.6814248561859131e-001 + -2.1648240089416504e-001 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + -1.2570229591801763e-004 + 1.6871599853038788e-001 + -3.3025780320167542e-001 + <_> + + <_> + + + + <_> + 4 0 10 2 -1. + <_> + 4 1 10 1 2. + 0 + 2.0360499620437622e-002 + -1.0959889739751816e-001 + 4.3592530488967896e-001 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 7 5 1 3 3. + 0 + -7.7699557878077030e-003 + 3.7267988920211792e-001 + -1.1310379952192307e-001 + <_> + + <_> + + + + <_> + 7 0 9 4 -1. + <_> + 10 0 3 4 3. + 0 + -6.6438332200050354e-002 + -5.0932061672210693e-001 + 3.8267329335212708e-002 + <_> + + <_> + + + + <_> + 5 6 3 1 -1. + <_> + 6 6 1 1 3. + 0 + -2.3943830747157335e-003 + 3.7487560510635376e-001 + -1.1466500163078308e-001 + <_> + + <_> + + + + <_> + 11 5 3 3 -1. + <_> + 12 5 1 3 3. + 0 + 1.9620539620518684e-002 + -6.1430118978023529e-002 + 4.3453490734100342e-001 + <_> + + <_> + + + + <_> + 4 5 3 3 -1. + <_> + 5 5 1 3 3. + 0 + -3.5895970650017262e-003 + 2.9000890254974365e-001 + -1.4118500053882599e-001 + <_> + + <_> + + + + <_> + 10 0 4 3 -1. + <_> + 11 0 2 3 2. + 0 + 1.4298349618911743e-002 + 4.3023601174354553e-002 + -5.9506058692932129e-001 + <_> + + <_> + + + + <_> + 4 0 4 3 -1. + <_> + 5 0 2 3 2. + 0 + 8.2771573215723038e-003 + 5.7618878781795502e-002 + -6.0915398597717285e-001 + <_> + + <_> + + + + <_> + 12 6 2 2 -1. + <_> + 13 6 1 1 2. + <_> + 12 7 1 1 2. + 0 + -2.4311929009854794e-003 + 2.6851660013198853e-001 + -7.8011967241764069e-002 + <_> + + <_> + + + + <_> + 3 1 1 3 -1. + <_> + 2 2 1 1 3. + 1 + -1.1357249692082405e-002 + -5.7373368740081787e-001 + 6.1811648309230804e-002 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 6 1 6 1 3. + 0 + -2.0995700731873512e-002 + 3.7857949733734131e-001 + -9.0212509036064148e-002 + <_> + + <_> + + + + <_> + 4 0 4 5 -1. + <_> + 5 0 2 5 2. + 0 + -1.9253190606832504e-002 + -6.1270111799240112e-001 + 5.8162990957498550e-002 + <_> + + <_> + + + + <_> + 13 8 2 2 -1. + <_> + 13 8 2 1 2. + 1 + -2.5958230253309011e-003 + 8.5419252514839172e-002 + -1.5067149698734283e-001 + <_> + + <_> + + + + <_> + 5 8 2 2 -1. + <_> + 5 8 1 2 2. + 1 + -1.7749400809407234e-002 + -5.6233870983123779e-001 + 5.8707099407911301e-002 + <_> + + <_> + + + + <_> + 12 5 6 3 -1. + <_> + 14 5 2 3 3. + 0 + -7.0752850733697414e-003 + 1.8340730667114258e-001 + -2.0476980507373810e-001 + <_> + + <_> + + + + <_> + 1 4 4 5 -1. + <_> + 2 4 2 5 2. + 0 + -8.4588937461376190e-003 + 2.5018799304962158e-001 + -1.4016430079936981e-001 + <_> + + <_> + + + + <_> + 9 3 1 8 -1. + <_> + 9 3 1 4 2. + 1 + 6.0339421033859253e-003 + 1.7297219485044479e-002 + -1.0938909649848938e-001 + <_> + + <_> + + + + <_> + 3 0 1 2 -1. + <_> + 3 0 1 1 2. + 1 + -8.7690055370330811e-003 + -5.3809267282485962e-001 + 5.5717989802360535e-002 + <_> + + <_> + + + + <_> + 0 2 18 8 -1. + <_> + 6 2 6 8 3. + 0 + -2.0211340487003326e-001 + 1.4996449649333954e-001 + -1.9804969429969788e-001 + <_> + + <_> + + + + <_> + 0 10 6 2 -1. + <_> + 3 10 3 2 2. + 0 + 9.2534068971872330e-003 + -1.2579849362373352e-001 + 2.6560428738594055e-001 + <_> + + <_> + + + + <_> + 6 6 6 2 -1. + <_> + 8 6 2 2 3. + 0 + -1.9985489547252655e-002 + -2.0184940099716187e-001 + 1.4270460605621338e-001 + <_> + + <_> + + + + <_> + 5 3 6 4 -1. + <_> + 5 3 3 2 2. + <_> + 8 5 3 2 2. + 0 + -6.4325458370149136e-003 + 1.4902539551258087e-001 + -2.2481849789619446e-001 + <_> + + <_> + + + + <_> + 15 1 2 1 -1. + <_> + 15 1 1 1 2. + 0 + -1.2979759776499122e-004 + 7.9636313021183014e-002 + -6.8467393517494202e-002 + <_> + + <_> + + + + <_> + 0 2 4 9 -1. + <_> + 0 5 4 3 3. + 0 + 7.4666491709649563e-003 + 9.1552861034870148e-002 + -3.0332839488983154e-001 + <_> + + <_> + + + + <_> + 4 2 10 4 -1. + <_> + 4 3 10 2 2. + 0 + -4.8323269933462143e-002 + 3.1203231215476990e-001 + -9.4739243388175964e-002 + <_> + + <_> + + + + <_> + 1 1 2 1 -1. + <_> + 2 1 1 1 2. + 0 + -1.0795370326377451e-004 + 1.1953579634428024e-001 + -2.3774090409278870e-001 + <_> + + <_> + + + + <_> + 6 1 6 3 -1. + <_> + 6 2 6 1 3. + 0 + -2.1394219249486923e-002 + 3.8132411241531372e-001 + -6.8722970783710480e-002 + <_> + + <_> + + + + <_> + 5 9 6 3 -1. + <_> + 7 9 2 3 3. + 0 + -2.6666570454835892e-002 + -5.3747171163558960e-001 + 5.0780180841684341e-002 + <_> + + <_> + + + + <_> + 13 8 1 3 -1. + <_> + 12 9 1 1 3. + 1 + -1.6129670664668083e-002 + -5.7956278324127197e-001 + 7.9791489988565445e-003 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 0 0 9 6 2. + <_> + 9 6 9 6 2. + 0 + 3.9990308880805969e-001 + 3.5521049052476883e-002 + -6.6213911771774292e-001 + <_> + + <_> + + + + <_> + 14 5 4 6 -1. + <_> + 14 7 4 2 3. + 0 + 5.8418158441781998e-002 + 2.0374530926346779e-002 + -3.9533859491348267e-001 + <_> + + <_> + + + + <_> + 9 2 6 3 -1. + <_> + 11 4 2 3 3. + 1 + -6.9553457200527191e-002 + 1.5149369835853577e-001 + -1.7391009628772736e-001 + <_> + + <_> + + + + <_> + 14 6 4 6 -1. + <_> + 14 8 4 2 3. + 0 + 7.5673670507967472e-003 + -1.0654059797525406e-001 + 1.0897749662399292e-001 + <_> + + <_> + + + + <_> + 0 6 4 6 -1. + <_> + 0 8 4 2 3. + 0 + 4.7387808561325073e-002 + 4.9468740820884705e-002 + -5.5027878284454346e-001 + <_> + + <_> + + + + <_> + 14 3 4 4 -1. + <_> + 14 4 4 2 2. + 0 + -3.7050791084766388e-002 + -3.8515409827232361e-001 + 2.2248979657888412e-002 + <_> + + <_> + + + + <_> + 0 3 4 4 -1. + <_> + 0 4 4 2 2. + 0 + -3.0018899589776993e-002 + -6.4674687385559082e-001 + 3.3203490078449249e-002 + <_> + + <_> + + + + <_> + 11 3 4 4 -1. + <_> + 11 4 4 2 2. + 0 + 1.5431820414960384e-002 + -4.4999931007623672e-002 + 2.4443189799785614e-001 + <_> + + <_> + + + + <_> + 2 3 6 4 -1. + <_> + 2 4 6 2 2. + 0 + -8.2180695608258247e-003 + 1.5854990482330322e-001 + -1.9471940398216248e-001 + <_> + + <_> + + + + <_> + 13 5 3 3 -1. + <_> + 14 6 1 3 3. + 1 + 4.0984179824590683e-002 + -3.4700211137533188e-002 + 3.3703771233558655e-001 + <_> + + <_> + + + + <_> + 5 5 3 3 -1. + <_> + 4 6 3 1 3. + 1 + -8.5833184421062469e-003 + 1.9440969824790955e-001 + -1.2268470227718353e-001 + <_> + + <_> + + + + <_> + 9 1 4 4 -1. + <_> + 10 1 2 4 2. + 0 + -4.5410390943288803e-002 + -8.1189441680908203e-001 + 8.0366088077425957e-003 + <_> + + <_> + + + + <_> + 4 9 4 2 -1. + <_> + 5 9 2 2 2. + 0 + -9.0532200410962105e-003 + -5.5083888769149780e-001 + 4.0210179984569550e-002 + <_> + + <_> + + + + <_> + 15 6 3 3 -1. + <_> + 16 7 1 3 3. + 1 + -1.1325759813189507e-002 + 9.9898673593997955e-002 + -3.9981659501791000e-002 + <_> + + <_> + + + + <_> + 5 1 4 4 -1. + <_> + 6 1 2 4 2. + 0 + -1.7502499744296074e-002 + -5.0785058736801147e-001 + 4.4904891401529312e-002 + <_> + + <_> + + + + <_> + 15 6 3 3 -1. + <_> + 16 7 1 3 3. + 1 + 4.0354807861149311e-003 + -7.3971033096313477e-002 + 8.6997002363204956e-002 + <_> + + <_> + + + + <_> + 3 6 3 3 -1. + <_> + 2 7 3 1 3. + 1 + -1.9440140575170517e-002 + 3.5637879371643066e-001 + -6.4185008406639099e-002 + <_> + + <_> + + + + <_> + 13 6 2 4 -1. + <_> + 13 6 2 2 2. + 1 + 3.4901369363069534e-002 + 1.3781890273094177e-002 + -3.0902290344238281e-001 + <_> + + <_> + + + + <_> + 5 6 4 2 -1. + <_> + 5 6 2 2 2. + 1 + -5.0566188991069794e-002 + -3.5108640789985657e-001 + 6.5844587981700897e-002 + <_> + + <_> + + + + <_> + 7 1 9 3 -1. + <_> + 10 1 3 3 3. + 0 + -1.4756169915199280e-001 + -6.8759101629257202e-001 + 4.7263758460758254e-005 + <_> + + <_> + + + + <_> + 2 1 9 3 -1. + <_> + 5 1 3 3 3. + 0 + -1.0150520130991936e-002 + 1.2052480131387711e-001 + -1.7938989400863647e-001 + <_> + + <_> + + + + <_> + 11 0 4 5 -1. + <_> + 12 0 2 5 2. + 0 + -2.2828230634331703e-002 + -4.8896029591560364e-001 + 1.8085980787873268e-002 + <_> + + <_> + + + + <_> + 7 5 3 3 -1. + <_> + 6 6 3 1 3. + 1 + -1.8258199095726013e-002 + 3.4773400425910950e-001 + -6.3224472105503082e-002 + <_> + + <_> + + + + <_> + 11 0 4 5 -1. + <_> + 12 0 2 5 2. + 0 + 1.3490609824657440e-002 + 2.3697679862380028e-002 + -1.3777829706668854e-001 + <_> + + <_> + + + + <_> + 3 0 4 5 -1. + <_> + 4 0 2 5 2. + 0 + -1.6170579940080643e-002 + -4.2869010567665100e-001 + 5.1102340221405029e-002 + <_> + + <_> + + + + <_> + 6 2 6 3 -1. + <_> + 6 3 6 1 3. + 0 + -1.8929179757833481e-002 + 2.6792019605636597e-001 + -7.7223733067512512e-002 + -1.7122819423675537e+000 + 7 + -1 + <_> + + + <_> + + <_> + + + + <_> + 7 4 6 2 -1. + <_> + 7 4 6 1 2. + 1 + -5.6362848728895187e-002 + 6.2295049428939819e-001 + -3.9318370819091797e-001 + <_> + + <_> + + + + <_> + 6 0 12 3 -1. + <_> + 10 0 4 3 3. + 0 + 1.9950939342379570e-002 + -1.4530490338802338e-001 + 2.4978880584239960e-001 + <_> + + <_> + + + + <_> + 9 3 6 1 -1. + <_> + 9 3 3 1 2. + 1 + -4.6843659132719040e-002 + 3.9532458782196045e-001 + -3.0981910228729248e-001 + <_> + + <_> + + + + <_> + 14 0 4 2 -1. + <_> + 14 0 2 2 2. + 0 + 3.4703789278864861e-003 + -7.6643757522106171e-002 + 1.4895190298557281e-001 + <_> + + <_> + + + + <_> + 0 0 6 2 -1. + <_> + 3 0 3 2 2. + 0 + -6.1464528553187847e-003 + 1.8411460518836975e-001 + -4.8829838633537292e-001 + <_> + + <_> + + + + <_> + 3 10 12 2 -1. + <_> + 3 11 12 1 2. + 0 + 6.1217881739139557e-003 + -4.2313280701637268e-001 + 1.9597740471363068e-001 + <_> + + <_> + + + + <_> + 1 3 16 2 -1. + <_> + 1 4 16 1 2. + 0 + -1.8062189221382141e-002 + 2.3335799574851990e-001 + -2.9320231080055237e-001 + <_> + + <_> + + + + <_> + 12 5 4 3 -1. + <_> + 13 5 2 3 2. + 0 + -5.3905011154711246e-003 + 3.0706161260604858e-001 + -2.2423399984836578e-001 + <_> + + <_> + + + + <_> + 0 1 2 1 -1. + <_> + 1 1 1 1 2. + 0 + -1.1563429870875552e-004 + 1.2549179792404175e-001 + -3.5768839716911316e-001 + <_> + + <_> + + + + <_> + 12 9 1 2 -1. + <_> + 12 9 1 1 2. + 1 + -1.2130189687013626e-002 + -4.3862840533256531e-001 + 1.5064669772982597e-002 + <_> + + <_> + + + + <_> + 8 5 3 1 -1. + <_> + 9 6 1 1 3. + 1 + -4.5520379208028316e-003 + 1.7858989536762238e-001 + -2.0970739424228668e-001 + <_> + + <_> + + + + <_> + 14 0 3 2 -1. + <_> + 15 1 1 2 3. + 1 + -2.3341009393334389e-002 + -4.7605940699577332e-001 + 2.9896590858697891e-002 + <_> + + <_> + + + + <_> + 4 0 2 3 -1. + <_> + 3 1 2 1 3. + 1 + 1.0201729834079742e-002 + 7.7540546655654907e-002 + -4.6611380577087402e-001 + <_> + + <_> + + + + <_> + 11 6 6 2 -1. + <_> + 13 6 2 2 3. + 0 + 4.7306690365076065e-002 + -3.8885660469532013e-002 + 5.0057899951934814e-001 + <_> + + <_> + + + + <_> + 1 6 6 2 -1. + <_> + 3 6 2 2 3. + 0 + -9.2814108356833458e-003 + 2.0289039611816406e-001 + -1.8781319260597229e-001 + <_> + + <_> + + + + <_> + 12 9 1 2 -1. + <_> + 12 9 1 1 2. + 1 + 1.1665919795632362e-002 + 3.4593590535223484e-003 + -6.7075312137603760e-001 + <_> + + <_> + + + + <_> + 6 9 2 1 -1. + <_> + 6 9 1 1 2. + 1 + -1.1174700222909451e-002 + -6.7676198482513428e-001 + 5.3503561764955521e-002 + <_> + + <_> + + + + <_> + 13 0 3 7 -1. + <_> + 14 0 1 7 3. + 0 + -3.0277540907263756e-002 + -6.1764931678771973e-001 + 2.5672059506177902e-002 + <_> + + <_> + + + + <_> + 2 0 3 7 -1. + <_> + 3 0 1 7 3. + 0 + -2.6489820331335068e-002 + -6.5213251113891602e-001 + 4.6798661351203918e-002 + <_> + + <_> + + + + <_> + 4 3 10 3 -1. + <_> + 4 4 10 1 3. + 0 + 3.6063250154256821e-002 + -7.9508572816848755e-002 + 3.9742410182952881e-001 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 3.8237631320953369e-002 + -3.4497588872909546e-001 + 8.8161222636699677e-002 + <_> + + <_> + + + + <_> + 16 9 2 3 -1. + <_> + 16 10 2 1 3. + 0 + 9.8143024370074272e-003 + 3.8055408746004105e-002 + -5.7297128438949585e-001 + <_> + + <_> + + + + <_> + 0 5 18 6 -1. + <_> + 0 5 9 3 2. + <_> + 9 8 9 3 2. + 0 + 1.0969569848384708e-004 + -2.3766790330410004e-001 + 1.1281009763479233e-001 + <_> + + <_> + + + + <_> + 13 1 5 9 -1. + <_> + 13 4 5 3 3. + 0 + -6.4720593392848969e-002 + 5.7318519800901413e-002 + -8.4692500531673431e-002 + <_> + + <_> + + + + <_> + 0 1 5 9 -1. + <_> + 0 4 5 3 3. + 0 + -9.3549508601427078e-003 + 1.0101249814033508e-001 + -3.0118590593338013e-001 + <_> + + <_> + + + + <_> + 0 4 18 2 -1. + <_> + 6 4 6 2 3. + 0 + -6.4732283353805542e-002 + 1.3135200738906860e-001 + -2.2299380600452423e-001 + <_> + + <_> + + + + <_> + 6 2 6 2 -1. + <_> + 6 3 6 1 2. + 0 + 1.4942260459065437e-002 + -7.4695453047752380e-002 + 4.2155799269676208e-001 + <_> + + <_> + + + + <_> + 6 0 6 2 -1. + <_> + 6 1 6 1 2. + 0 + 9.1112721711397171e-003 + -1.0271769762039185e-001 + 2.9674398899078369e-001 + <_> + + <_> + + + + <_> + 4 0 10 6 -1. + <_> + 4 2 10 2 3. + 0 + -1.0131099820137024e-001 + 4.0764111280441284e-001 + -8.9215211570262909e-002 + <_> + + <_> + + + + <_> + 16 0 2 2 -1. + <_> + 16 0 1 2 2. + 1 + 1.9525960087776184e-002 + 4.5859400182962418e-002 + -5.3067690134048462e-001 + <_> + + <_> + + + + <_> + 2 0 2 2 -1. + <_> + 2 0 2 1 2. + 1 + -1.6093149781227112e-002 + -5.0799179077148438e-001 + 4.7188449651002884e-002 + <_> + + <_> + + + + <_> + 10 11 2 1 -1. + <_> + 10 11 1 1 2. + 0 + -3.7084550131112337e-003 + -5.4375791549682617e-001 + 1.7073409631848335e-002 + <_> + + <_> + + + + <_> + 6 11 2 1 -1. + <_> + 7 11 1 1 2. + 0 + -1.0553289757808670e-004 + 1.6604019701480865e-001 + -1.4265109598636627e-001 + <_> + + <_> + + + + <_> + 10 4 3 4 -1. + <_> + 11 5 1 4 3. + 1 + -2.2228319197893143e-002 + 1.1051969975233078e-001 + -6.7340642213821411e-002 + <_> + + <_> + + + + <_> + 0 6 2 2 -1. + <_> + 1 6 1 2 2. + 0 + -3.9571961387991905e-003 + 1.9017930328845978e-001 + -1.2256579846143723e-001 + <_> + + <_> + + + + <_> + 15 8 2 2 -1. + <_> + 15 8 1 2 2. + 1 + -2.9267009813338518e-003 + 9.4764962792396545e-002 + -1.8430569767951965e-001 + <_> + + <_> + + + + <_> + 3 8 2 2 -1. + <_> + 3 8 2 1 2. + 1 + 4.4974898919463158e-003 + -9.1449737548828125e-002 + 3.5069960355758667e-001 + <_> + + <_> + + + + <_> + 0 0 18 1 -1. + <_> + 0 0 9 1 2. + 0 + -1.8627950921654701e-002 + 2.3541490733623505e-001 + -1.0408759862184525e-001 + <_> + + <_> + + + + <_> + 2 8 2 2 -1. + <_> + 2 8 1 2 2. + 1 + -1.2022979557514191e-002 + -3.8634741306304932e-001 + 6.5065048635005951e-002 + <_> + + <_> + + + + <_> + 15 5 3 6 -1. + <_> + 15 7 3 2 3. + 0 + 5.6308001279830933e-002 + 1.1871179565787315e-002 + -4.9800288677215576e-001 + <_> + + <_> + + + + <_> + 0 5 3 6 -1. + <_> + 0 7 3 2 3. + 0 + 3.9565019309520721e-002 + 3.7156730890274048e-002 + -6.4833837747573853e-001 + <_> + + <_> + + + + <_> + 10 4 3 4 -1. + <_> + 11 5 1 4 3. + 1 + 2.8078509494662285e-002 + -2.1756550297141075e-002 + 2.5639408826828003e-001 + <_> + + <_> + + + + <_> + 8 4 4 3 -1. + <_> + 7 5 4 1 3. + 1 + 4.6927139163017273e-002 + -5.3349718451499939e-002 + 4.3058720231056213e-001 + <_> + + <_> + + + + <_> + 11 3 3 4 -1. + <_> + 12 4 1 4 3. + 1 + -2.5176439434289932e-002 + 9.7822599112987518e-002 + -5.9893220663070679e-002 + <_> + + <_> + + + + <_> + 7 2 1 3 -1. + <_> + 6 3 1 1 3. + 1 + 8.8344141840934753e-003 + 5.6916769593954086e-002 + -4.0340718626976013e-001 + <_> + + <_> + + + + <_> + 13 3 2 1 -1. + <_> + 13 3 1 1 2. + 1 + 1.7008539289236069e-002 + 1.8180780112743378e-002 + -5.2570241689682007e-001 + <_> + + <_> + + + + <_> + 5 3 1 2 -1. + <_> + 5 3 1 1 2. + 1 + -8.2875955849885941e-003 + -4.3682220578193665e-001 + 5.4094731807708740e-002 + <_> + + <_> + + + + <_> + 11 3 3 4 -1. + <_> + 12 4 1 4 3. + 1 + 3.8746491074562073e-002 + -1.8321389332413673e-002 + 3.3403670787811279e-001 + <_> + + <_> + + + + <_> + 6 10 4 2 -1. + <_> + 7 10 2 2 2. + 0 + -7.2010462172329426e-003 + -5.4613822698593140e-001 + 4.0649890899658203e-002 + <_> + + <_> + + + + <_> + 11 3 3 4 -1. + <_> + 12 4 1 4 3. + 1 + -9.9961467087268829e-002 + -4.5017239451408386e-001 + 2.8199090156704187e-003 + <_> + + <_> + + + + <_> + 7 3 4 3 -1. + <_> + 6 4 4 1 3. + 1 + -2.5273600593209267e-002 + 2.8241640329360962e-001 + -7.7918551862239838e-002 + <_> + + <_> + + + + <_> + 11 5 4 3 -1. + <_> + 12 5 2 3 2. + 0 + 1.0812750086188316e-002 + -6.5411068499088287e-002 + 1.8664279580116272e-001 + <_> + + <_> + + + + <_> + 0 8 6 4 -1. + <_> + 0 9 6 2 2. + 0 + 2.7010150253772736e-002 + 3.8035649806261063e-002 + -5.4452228546142578e-001 + <_> + + <_> + + + + <_> + 16 1 2 2 -1. + <_> + 17 1 1 1 2. + <_> + 16 2 1 1 2. + 0 + -1.1786170216510072e-004 + 1.0787220299243927e-001 + -9.9519513547420502e-002 + <_> + + <_> + + + + <_> + 0 1 2 2 -1. + <_> + 0 1 1 1 2. + <_> + 1 2 1 1 2. + 0 + -1.1047790030715987e-004 + 1.5495459735393524e-001 + -1.3301509618759155e-001 + <_> + + <_> + + + + <_> + 5 1 8 2 -1. + <_> + 5 2 8 1 2. + 0 + 1.8215600401163101e-002 + -6.8660423159599304e-002 + 3.1199648976325989e-001 + <_> + + <_> + + + + <_> + 0 0 10 4 -1. + <_> + 0 0 5 2 2. + <_> + 5 2 5 2 2. + 0 + -5.3898409008979797e-002 + 3.9685648679733276e-001 + -6.3897557556629181e-002 + <_> + + <_> + + + + <_> + 11 0 3 5 -1. + <_> + 12 0 1 5 3. + 0 + 1.3358090072870255e-002 + 3.1209040433168411e-002 + -2.4712960422039032e-001 + <_> + + <_> + + + + <_> + 4 0 3 5 -1. + <_> + 5 0 1 5 3. + 0 + -1.5800479799509048e-002 + -5.2216792106628418e-001 + 4.1600730270147324e-002 + <_> + + <_> + + + + <_> + 17 1 1 2 -1. + <_> + 17 2 1 1 2. + 0 + -1.1199319851584733e-004 + 8.4395922720432281e-002 + -8.4499090909957886e-002 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + -9.2885202320758253e-005 + 9.7559772431850433e-002 + -2.1725979447364807e-001 + <_> + + <_> + + + + <_> + 11 5 3 4 -1. + <_> + 12 5 1 4 3. + 0 + -4.7041969373822212e-003 + 2.4064439535140991e-001 + -8.1906877458095551e-002 + <_> + + <_> + + + + <_> + 3 4 4 5 -1. + <_> + 4 4 2 5 2. + 0 + -6.7193550057709217e-003 + 2.0804579555988312e-001 + -1.2089549750089645e-001 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 8 9 2 3 2. + 0 + 1.1287519708275795e-002 + 2.9528530314564705e-002 + -7.2591358423233032e-001 + <_> + + <_> + + + + <_> + 8 2 5 3 -1. + <_> + 7 3 5 1 3. + 1 + -1.5930920839309692e-002 + 1.1086650192737579e-001 + -1.8737399578094482e-001 + <_> + + <_> + + + + <_> + 16 8 1 2 -1. + <_> + 16 9 1 1 2. + 0 + 1.2024390161968768e-004 + -1.7434149980545044e-001 + 6.9688543677330017e-002 + <_> + + <_> + + + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + 0 + -1.0100419633090496e-002 + -5.1131051778793335e-001 + 3.8271598517894745e-002 + <_> + + <_> + + + + <_> + 13 1 3 3 -1. + <_> + 12 2 3 1 3. + 1 + 2.5751100853085518e-002 + -5.4672010242938995e-002 + 2.3799930512905121e-001 + <_> + + <_> + + + + <_> + 5 1 3 3 -1. + <_> + 6 2 1 3 3. + 1 + -2.0234059542417526e-002 + 2.6857110857963562e-001 + -7.7714122831821442e-002 + <_> + + <_> + + + + <_> + 16 0 1 2 -1. + <_> + 16 1 1 1 2. + 0 + -2.0138830586802214e-004 + 6.1015319079160690e-002 + -5.6767448782920837e-002 + <_> + + <_> + + + + <_> + 0 7 1 2 -1. + <_> + 0 8 1 1 2. + 0 + 8.7477441411465406e-005 + -1.6955520212650299e-001 + 1.1403830349445343e-001 + -1.7348790168762207e+000 + 8 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.8045219630002975e-002 + 6.2558948993682861e-001 + -3.3365538716316223e-001 + <_> + + <_> + + + + <_> + 4 3 10 4 -1. + <_> + 4 4 10 2 2. + 0 + -5.0243478268384933e-002 + 4.7322180867195129e-001 + -2.9186329245567322e-001 + <_> + + <_> + + + + <_> + 1 4 16 8 -1. + <_> + 1 8 16 4 2. + 0 + 3.8331419229507446e-001 + -3.9113879203796387e-001 + 2.5622650980949402e-001 + <_> + + <_> + + + + <_> + 12 6 2 4 -1. + <_> + 13 6 1 2 2. + <_> + 12 8 1 2 2. + 0 + -4.0044081397354603e-003 + 3.6399510502815247e-001 + -1.9256359338760376e-001 + <_> + + <_> + + + + <_> + 0 0 12 3 -1. + <_> + 4 0 4 3 3. + 0 + -3.7470009177923203e-002 + 1.7452430725097656e-001 + -3.1919050216674805e-001 + <_> + + <_> + + + + <_> + 13 5 3 4 -1. + <_> + 14 6 1 4 3. + 1 + 2.9117159545421600e-002 + -5.4369669407606125e-002 + 3.1064510345458984e-001 + <_> + + <_> + + + + <_> + 5 5 4 3 -1. + <_> + 4 6 4 1 3. + 1 + -1.1656920425593853e-002 + 2.5671890377998352e-001 + -1.8017989397048950e-001 + <_> + + <_> + + + + <_> + 16 3 2 1 -1. + <_> + 16 3 1 1 2. + 0 + -1.0440209734952077e-004 + 6.1535339802503586e-002 + -9.6504412591457367e-002 + <_> + + <_> + + + + <_> + 0 3 2 1 -1. + <_> + 1 3 1 1 2. + 0 + -1.0555270273471251e-004 + 1.2562979757785797e-001 + -2.9777041077613831e-001 + <_> + + <_> + + + + <_> + 2 6 16 6 -1. + <_> + 10 6 8 3 2. + <_> + 2 9 8 3 2. + 0 + 7.5841680169105530e-002 + 7.2272002696990967e-002 + -3.9159971475601196e-001 + <_> + + <_> + + + + <_> + 6 5 6 3 -1. + <_> + 8 6 2 1 9. + 0 + -3.0494170263409615e-002 + 1.4515119791030884e-001 + -2.1794329583644867e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.8034840971231461e-002 + -4.3140959739685059e-001 + 9.2317827045917511e-002 + <_> + + <_> + + + + <_> + 1 1 10 8 -1. + <_> + 6 1 5 8 2. + 0 + -2.9059879481792450e-002 + 1.2736010551452637e-001 + -2.6893270015716553e-001 + <_> + + <_> + + + + <_> + 16 0 1 2 -1. + <_> + 16 1 1 1 2. + 0 + 1.1368029663572088e-004 + -7.3847033083438873e-002 + 8.1634096801280975e-002 + <_> + + <_> + + + + <_> + 1 0 1 2 -1. + <_> + 1 1 1 1 2. + 0 + -9.8208111012354493e-005 + 1.4976090192794800e-001 + -2.6417461037635803e-001 + <_> + + <_> + + + + <_> + 3 0 15 4 -1. + <_> + 3 1 15 2 2. + 0 + 3.9730750024318695e-002 + -1.3633200526237488e-001 + 2.3572669923305511e-001 + <_> + + <_> + + + + <_> + 2 2 14 4 -1. + <_> + 2 3 14 2 2. + 0 + 2.9196860268712044e-002 + -1.1701930314302444e-001 + 3.0721390247344971e-001 + <_> + + <_> + + + + <_> + 15 0 3 1 -1. + <_> + 16 1 1 1 3. + 1 + 7.9500172287225723e-003 + 6.5656699240207672e-002 + -3.5064420104026794e-001 + <_> + + <_> + + + + <_> + 3 0 1 3 -1. + <_> + 2 1 1 1 3. + 1 + -1.0177420452237129e-002 + -5.5617290735244751e-001 + 5.7798638939857483e-002 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 1.6030209371820092e-004 + -4.1421860456466675e-001 + 6.5753549337387085e-002 + <_> + + <_> + + + + <_> + 7 9 2 1 -1. + <_> + 7 9 1 1 2. + 1 + -9.3059297651052475e-003 + -5.4771828651428223e-001 + 5.4126661270856857e-002 + <_> + + <_> + + + + <_> + 12 6 2 2 -1. + <_> + 13 6 1 1 2. + <_> + 12 7 1 1 2. + 0 + 3.0308510176837444e-003 + -7.0931516587734222e-002 + 2.7669700980186462e-001 + <_> + + <_> + + + + <_> + 4 6 2 2 -1. + <_> + 4 6 1 1 2. + <_> + 5 7 1 1 2. + 0 + -1.1008529691025615e-003 + 2.4519720673561096e-001 + -1.1666910350322723e-001 + <_> + + <_> + + + + <_> + 11 0 4 4 -1. + <_> + 12 0 2 4 2. + 0 + 1.1806489899754524e-002 + 3.6385551095008850e-002 + -3.4721049666404724e-001 + <_> + + <_> + + + + <_> + 2 1 3 2 -1. + <_> + 2 1 3 1 2. + 1 + 1.1421480216085911e-002 + 6.0349930077791214e-002 + -4.1798681020736694e-001 + <_> + + <_> + + + + <_> + 5 2 8 3 -1. + <_> + 5 3 8 1 3. + 0 + -3.1913980841636658e-002 + 3.7621480226516724e-001 + -7.5227960944175720e-002 + <_> + + <_> + + + + <_> + 0 3 2 2 -1. + <_> + 0 3 1 1 2. + <_> + 1 4 1 1 2. + 0 + -1.0130680311704054e-004 + 1.8032610416412354e-001 + -1.4267539978027344e-001 + <_> + + <_> + + + + <_> + 8 0 4 4 -1. + <_> + 9 0 2 4 2. + 0 + 1.2019679881632328e-002 + 4.4374089688062668e-002 + -4.2647609114646912e-001 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + -1.1055770301027223e-004 + 9.3973703682422638e-002 + -2.4647060036659241e-001 + <_> + + <_> + + + + <_> + 15 0 2 3 -1. + <_> + 15 0 1 3 2. + 1 + 3.0081219971179962e-002 + 1.8790829926729202e-002 + -3.6197790503501892e-001 + <_> + + <_> + + + + <_> + 3 0 3 2 -1. + <_> + 3 0 3 1 2. + 1 + -1.3911399990320206e-002 + -3.4600418806076050e-001 + 6.4775317907333374e-002 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 7 1 4 1 3. + 0 + -1.1680570431053638e-002 + 2.8401941061019897e-001 + -8.2157500088214874e-002 + <_> + + <_> + + + + <_> + 6 9 2 1 -1. + <_> + 6 9 1 1 2. + 1 + -1.1604610335780308e-004 + 9.5449857413768768e-002 + -2.5136241316795349e-001 + <_> + + <_> + + + + <_> + 9 1 4 5 -1. + <_> + 10 2 2 5 2. + 1 + -4.9045611172914505e-002 + 1.6295669972896576e-001 + -3.1894739717245102e-002 + <_> + + <_> + + + + <_> + 9 1 5 4 -1. + <_> + 8 2 5 2 2. + 1 + -3.2497879117727280e-002 + 1.2830619513988495e-001 + -1.9523960351943970e-001 + <_> + + <_> + + + + <_> + 10 4 3 3 -1. + <_> + 11 5 1 3 3. + 1 + -1.1159799993038177e-002 + 9.6235200762748718e-002 + -1.3243910670280457e-001 + <_> + + <_> + + + + <_> + 4 8 3 1 -1. + <_> + 5 9 1 1 3. + 1 + -1.0230819694697857e-002 + -5.4654151201248169e-001 + 4.2988520115613937e-002 + <_> + + <_> + + + + <_> + 11 3 3 5 -1. + <_> + 12 4 1 5 3. + 1 + 1.3818079605698586e-002 + -3.5042509436607361e-002 + 1.9387160241603851e-001 + <_> + + <_> + + + + <_> + 7 3 5 3 -1. + <_> + 6 4 5 1 3. + 1 + -3.2773461192846298e-002 + 3.3459728956222534e-001 + -6.9436222314834595e-002 + <_> + + <_> + + + + <_> + 11 6 4 1 -1. + <_> + 12 6 2 1 2. + 0 + -3.0122410971671343e-003 + 2.3572669923305511e-001 + -6.8288393318653107e-002 + <_> + + <_> + + + + <_> + 3 5 4 3 -1. + <_> + 4 5 2 3 2. + 0 + -3.6818650551140308e-003 + 1.9051979482173920e-001 + -1.4668950438499451e-001 + <_> + + <_> + + + + <_> + 12 3 3 1 -1. + <_> + 13 4 1 1 3. + 1 + -3.0836980789899826e-002 + -3.7860611081123352e-001 + 1.3093659654259682e-002 + <_> + + <_> + + + + <_> + 6 3 1 3 -1. + <_> + 5 4 1 1 3. + 1 + -1.6258839517831802e-002 + -6.0836392641067505e-001 + 4.6812709420919418e-002 + <_> + + <_> + + + + <_> + 8 0 3 3 -1. + <_> + 9 0 1 3 3. + 0 + -9.0061817318201065e-003 + -5.4105937480926514e-001 + 3.7968978285789490e-002 + <_> + + <_> + + + + <_> + 6 0 5 2 -1. + <_> + 6 1 5 1 2. + 0 + 1.1912579648196697e-002 + -8.6741238832473755e-002 + 2.6622739434242249e-001 + <_> + + <_> + + + + <_> + 13 0 3 2 -1. + <_> + 14 1 1 2 3. + 1 + -4.3502021580934525e-002 + -7.2856420278549194e-001 + 7.2535811923444271e-003 + <_> + + <_> + + + + <_> + 5 0 2 3 -1. + <_> + 4 1 2 1 3. + 1 + 1.1481899768114090e-002 + 6.1771500855684280e-002 + -4.0001630783081055e-001 + <_> + + <_> + + + + <_> + 6 10 6 2 -1. + <_> + 8 10 2 2 3. + 0 + -2.1509420126676559e-002 + -6.4027559757232666e-001 + 2.7487259358167648e-002 + <_> + + <_> + + + + <_> + 0 6 18 6 -1. + <_> + 0 9 18 3 2. + 0 + -3.9324969984591007e-003 + -7.3666751384735107e-001 + 2.0676780492067337e-002 + <_> + + <_> + + + + <_> + 14 6 4 6 -1. + <_> + 15 6 2 6 2. + 0 + -4.7581312246620655e-003 + 1.4155970513820648e-001 + -9.4146639108657837e-002 + <_> + + <_> + + + + <_> + 7 7 2 2 -1. + <_> + 7 7 1 2 2. + 1 + -1.7454020678997040e-002 + -3.8733229041099548e-001 + 4.8368278890848160e-002 + <_> + + <_> + + + + <_> + 14 6 4 6 -1. + <_> + 15 6 2 6 2. + 0 + -4.7281790524721146e-002 + -4.6986758708953857e-001 + 5.1076877862215042e-003 + <_> + + <_> + + + + <_> + 0 6 4 6 -1. + <_> + 1 6 2 6 2. + 0 + -1.0604689829051495e-002 + 2.0816320180892944e-001 + -8.8896490633487701e-002 + <_> + + <_> + + + + <_> + 11 0 3 1 -1. + <_> + 12 1 1 1 3. + 1 + -6.6771931014955044e-003 + 1.4150680601596832e-001 + -2.3727510124444962e-002 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 8 0 2 3 2. + 0 + 8.6871385574340820e-003 + 4.5327730476856232e-002 + -4.2952930927276611e-001 + <_> + + <_> + + + + <_> + 14 5 4 5 -1. + <_> + 15 5 2 5 2. + 0 + -5.8880778960883617e-003 + 6.8065337836742401e-002 + -4.6702779829502106e-002 + <_> + + <_> + + + + <_> + 0 5 4 5 -1. + <_> + 1 5 2 5 2. + 0 + 9.6327122300863266e-003 + -8.0038279294967651e-002 + 2.5579911470413208e-001 + <_> + + <_> + + + + <_> + 8 0 3 4 -1. + <_> + 9 0 1 4 3. + 0 + 1.3295389711856842e-002 + 1.7721930518746376e-002 + -3.2223680615425110e-001 + <_> + + <_> + + + + <_> + 5 9 2 1 -1. + <_> + 5 9 1 1 2. + 1 + -2.2117589833214879e-004 + 8.6900167167186737e-002 + -2.2269949316978455e-001 + <_> + + <_> + + + + <_> + 16 4 2 2 -1. + <_> + 17 4 1 1 2. + <_> + 16 5 1 1 2. + 0 + -1.1635709961410612e-004 + 1.1741170287132263e-001 + -1.1703369766473770e-001 + <_> + + <_> + + + + <_> + 0 4 2 2 -1. + <_> + 0 4 1 1 2. + <_> + 1 5 1 1 2. + 0 + -1.1243829794693738e-004 + 1.5170790255069733e-001 + -1.2557980418205261e-001 + <_> + + <_> + + + + <_> + 6 1 12 2 -1. + <_> + 12 1 6 1 2. + <_> + 6 2 6 1 2. + 0 + 1.3494050130248070e-002 + -3.2267540693283081e-002 + 1.3067859411239624e-001 + <_> + + <_> + + + + <_> + 0 1 12 2 -1. + <_> + 0 1 6 1 2. + <_> + 6 2 6 1 2. + 0 + -1.4105159789323807e-002 + 2.5845968723297119e-001 + -8.1946328282356262e-002 + <_> + + <_> + + + + <_> + 16 1 1 2 -1. + <_> + 16 2 1 1 2. + 0 + -4.9773012287914753e-003 + -2.4286900460720062e-001 + 2.4097239598631859e-002 + <_> + + <_> + + + + <_> + 1 1 1 2 -1. + <_> + 1 2 1 1 2. + 0 + -1.1385620018700138e-004 + 1.2425749748945236e-001 + -1.9230820238590240e-001 + <_> + + <_> + + + + <_> + 0 9 18 3 -1. + <_> + 6 9 6 3 3. + 0 + -8.6696133017539978e-002 + 2.1385669708251953e-001 + -9.1387532651424408e-002 + <_> + + <_> + + + + <_> + 3 7 3 2 -1. + <_> + 3 7 3 1 2. + 1 + 1.0115380398929119e-002 + -5.7194989174604416e-002 + 3.4964808821678162e-001 + <_> + + <_> + + + + <_> + 15 8 3 4 -1. + <_> + 15 9 3 2 2. + 0 + 1.2917679734528065e-002 + 6.4482808113098145e-002 + -3.6598050594329834e-001 + <_> + + <_> + + + + <_> + 0 8 3 4 -1. + <_> + 0 9 3 2 2. + 0 + -1.0063810274004936e-002 + -4.3763339519500732e-001 + 4.6401929110288620e-002 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + -3.8289760705083609e-003 + 2.6984658837318420e-001 + -4.3675228953361511e-002 + <_> + + <_> + + + + <_> + 3 0 6 4 -1. + <_> + 5 0 2 4 3. + 0 + 2.9884070158004761e-002 + 3.4730698913335800e-002 + -4.9211961030960083e-001 + <_> + + <_> + + + + <_> + 10 0 1 6 -1. + <_> + 8 2 1 2 3. + 1 + 4.9557611346244812e-002 + -1.4452800154685974e-002 + 2.5015810132026672e-001 + <_> + + <_> + + + + <_> + 0 4 5 6 -1. + <_> + 0 6 5 2 3. + 0 + -1.1242230236530304e-001 + -7.0981448888778687e-001 + 2.4513319134712219e-002 + <_> + + <_> + + + + <_> + 11 5 1 3 -1. + <_> + 10 6 1 1 3. + 1 + -7.2617297992110252e-003 + 1.1259379982948303e-001 + -9.0036422014236450e-002 + <_> + + <_> + + + + <_> + 0 4 3 2 -1. + <_> + 0 5 3 1 2. + 0 + 1.0905790142714977e-002 + 3.5278510302305222e-002 + -4.7903269529342651e-001 + <_> + + <_> + + + + <_> + 7 3 4 3 -1. + <_> + 7 4 4 1 3. + 0 + -2.1580660715699196e-002 + 2.4947710335254669e-001 + -6.7340537905693054e-002 + <_> + + <_> + + + + <_> + 6 0 3 4 -1. + <_> + 7 0 1 4 3. + 0 + 1.2180290184915066e-002 + 3.3950321376323700e-002 + -4.9424359202384949e-001 + <_> + + <_> + + + + <_> + 9 3 1 6 -1. + <_> + 7 5 1 2 3. + 1 + 6.1639029532670975e-002 + -1.5156419947743416e-002 + 1.7232060432434082e-001 + <_> + + <_> + + + + <_> + 9 3 6 1 -1. + <_> + 11 5 2 1 3. + 1 + -3.4598629921674728e-002 + 1.7717359960079193e-001 + -9.7788341343402863e-002 + <_> + + <_> + + + + <_> + 8 9 3 3 -1. + <_> + 9 9 1 3 3. + 0 + -6.7015062086284161e-003 + -3.5656741261482239e-001 + 3.8341779261827469e-002 + <_> + + <_> + + + + <_> + 6 10 6 2 -1. + <_> + 8 10 2 2 3. + 0 + 1.7201770097017288e-002 + 2.7020750567317009e-002 + -5.7964348793029785e-001 + <_> + + <_> + + + + <_> + 8 5 4 3 -1. + <_> + 9 5 2 3 2. + 0 + -8.1718079745769501e-003 + 1.1538869887590408e-001 + -7.7362932264804840e-002 + <_> + + <_> + + + + <_> + 6 5 4 3 -1. + <_> + 7 5 2 3 2. + 0 + -5.1809311844408512e-003 + 1.5495200455188751e-001 + -1.1836340278387070e-001 + <_> + + <_> + + + + <_> + 10 6 4 1 -1. + <_> + 11 6 2 1 2. + 0 + -2.5254609063267708e-003 + 2.1247270703315735e-001 + -6.8675488233566284e-002 + <_> + + <_> + + + + <_> + 6 6 2 1 -1. + <_> + 7 6 1 1 2. + 0 + 6.1780458781868219e-004 + -7.9140536487102509e-002 + 2.4011979997158051e-001 + <_> + + <_> + + + + <_> + 0 0 18 3 -1. + <_> + 6 0 6 3 3. + 0 + -1.1357679963111877e-001 + 1.8214240670204163e-001 + -9.2686779797077179e-002 + -1.6796829700469971e+000 + 9 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -6.2196098268032074e-002 + 6.2321871519088745e-001 + -3.0846419930458069e-001 + <_> + + <_> + + + + <_> + 3 2 15 6 -1. + <_> + 3 4 15 2 3. + 0 + -1.6721360385417938e-001 + 3.9328968524932861e-001 + -2.9381090402603149e-001 + <_> + + <_> + + + + <_> + 0 0 4 3 -1. + <_> + 2 0 2 3 2. + 0 + -6.1970818787813187e-003 + 1.9036029279232025e-001 + -4.2775529623031616e-001 + <_> + + <_> + + + + <_> + 12 6 2 4 -1. + <_> + 13 6 1 2 2. + <_> + 12 8 1 2 2. + 0 + -6.0129230841994286e-003 + 3.3292838931083679e-001 + -1.6145950555801392e-001 + <_> + + <_> + + + + <_> + 0 6 18 6 -1. + <_> + 0 9 18 3 2. + 0 + 1.7938390374183655e-001 + -4.7852781414985657e-001 + 8.2675926387310028e-002 + <_> + + <_> + + + + <_> + 12 5 3 3 -1. + <_> + 13 5 1 3 3. + 0 + -2.8582969680428505e-002 + -6.5726870298385620e-001 + 2.7196610346436501e-002 + <_> + + <_> + + + + <_> + 3 5 3 3 -1. + <_> + 4 5 1 3 3. + 0 + -4.3926457874476910e-003 + 2.2020849585533142e-001 + -1.9411289691925049e-001 + <_> + + <_> + + + + <_> + 10 0 4 5 -1. + <_> + 11 1 2 5 2. + 1 + 1.9471900537610054e-002 + -3.7211358547210693e-002 + 1.0708980262279510e-001 + <_> + + <_> + + + + <_> + 0 4 18 2 -1. + <_> + 6 4 6 2 3. + 0 + -8.2243539392948151e-002 + 1.6777120530605316e-001 + -2.5471720099449158e-001 + <_> + + <_> + + + + <_> + 15 0 3 1 -1. + <_> + 16 1 1 1 3. + 1 + 1.1272449977695942e-002 + 3.0362820252776146e-002 + -3.2199749350547791e-001 + <_> + + <_> + + + + <_> + 3 0 1 3 -1. + <_> + 2 1 1 1 3. + 1 + 7.7296248637139797e-003 + 5.1309239119291306e-002 + -5.2529060840606689e-001 + <_> + + <_> + + + + <_> + 6 6 6 1 -1. + <_> + 8 6 2 1 3. + 0 + -6.6719911992549896e-003 + 1.2681700289249420e-001 + -2.2429600358009338e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -6.2269289046525955e-002 + -4.0020480751991272e-001 + 8.0248616635799408e-002 + <_> + + <_> + + + + <_> + 13 5 3 4 -1. + <_> + 14 6 1 4 3. + 1 + 5.1855400204658508e-002 + -8.9768264442682266e-003 + 3.4974721074104309e-001 + <_> + + <_> + + + + <_> + 5 5 4 3 -1. + <_> + 4 6 4 1 3. + 1 + -7.2366232052445412e-003 + 1.7443999648094177e-001 + -1.7355519533157349e-001 + <_> + + <_> + + + + <_> + 2 6 16 6 -1. + <_> + 10 6 8 3 2. + <_> + 2 9 8 3 2. + 0 + 7.4777632951736450e-002 + 5.1062591373920441e-002 + -3.6973360180854797e-001 + <_> + + <_> + + + + <_> + 3 9 2 1 -1. + <_> + 3 9 1 1 2. + 1 + -1.1314899893477559e-004 + 1.0845900326967239e-001 + -2.3838439583778381e-001 + <_> + + <_> + + + + <_> + 17 9 1 3 -1. + <_> + 17 10 1 1 3. + 0 + -2.9757779557257891e-003 + -3.7891590595245361e-001 + 4.7076370567083359e-002 + <_> + + <_> + + + + <_> + 1 0 16 4 -1. + <_> + 1 1 16 2 2. + 0 + 4.3355841189622879e-002 + -1.0889430344104767e-001 + 2.2752620279788971e-001 + <_> + + <_> + + + + <_> + 5 2 8 4 -1. + <_> + 5 3 8 2 2. + 0 + 3.1121319159865379e-002 + -1.0356359928846359e-001 + 3.2433480024337769e-001 + <_> + + <_> + + + + <_> + 3 0 8 4 -1. + <_> + 5 0 4 4 2. + 0 + -3.2188410405069590e-003 + 1.1988320201635361e-001 + -2.5309950113296509e-001 + <_> + + <_> + + + + <_> + 8 0 4 4 -1. + <_> + 9 0 2 4 2. + 0 + -1.3322260230779648e-002 + -4.6327260136604309e-001 + 2.7917400002479553e-002 + <_> + + <_> + + + + <_> + 6 0 4 4 -1. + <_> + 7 0 2 4 2. + 0 + -1.1763609945774078e-002 + -4.9447950720787048e-001 + 6.2780112028121948e-002 + <_> + + <_> + + + + <_> + 5 4 8 2 -1. + <_> + 5 5 8 1 2. + 0 + 2.6546010747551918e-002 + -7.0860996842384338e-002 + 3.8759338855743408e-001 + <_> + + <_> + + + + <_> + 0 0 1 6 -1. + <_> + 0 2 1 2 3. + 0 + 1.0983680374920368e-002 + 5.2215598523616791e-002 + -4.7912430763244629e-001 + <_> + + <_> + + + + <_> + 10 3 1 6 -1. + <_> + 8 5 1 2 3. + 1 + -3.5203430801630020e-002 + 1.4733970165252686e-001 + -4.7205299139022827e-002 + <_> + + <_> + + + + <_> + 3 0 6 5 -1. + <_> + 5 0 2 5 3. + 0 + -4.8792399466037750e-002 + -4.8313421010971069e-001 + 5.1030978560447693e-002 + <_> + + <_> + + + + <_> + 13 9 1 2 -1. + <_> + 13 9 1 1 2. + 1 + -1.4748310204595327e-003 + 8.6995199322700500e-002 + -1.3301639258861542e-001 + <_> + + <_> + + + + <_> + 8 3 6 1 -1. + <_> + 10 5 2 1 3. + 1 + -2.3379849269986153e-002 + 1.2155140191316605e-001 + -1.8905250728130341e-001 + <_> + + <_> + + + + <_> + 5 0 8 6 -1. + <_> + 5 2 8 2 3. + 0 + -1.4968539774417877e-001 + 5.3282499313354492e-001 + -4.3869771063327789e-002 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 0 0 9 6 2. + <_> + 9 6 9 6 2. + 0 + 4.3147540092468262e-001 + 3.6285050213336945e-002 + -7.2065258026123047e-001 + <_> + + <_> + + + + <_> + 11 9 7 3 -1. + <_> + 11 10 7 1 3. + 0 + 3.2757069915533066e-002 + 1.5488710254430771e-002 + -6.0830378532409668e-001 + <_> + + <_> + + + + <_> + 6 9 6 2 -1. + <_> + 8 9 2 2 3. + 0 + -2.0532529801130295e-002 + -5.3597778081893921e-001 + 3.8419000804424286e-002 + <_> + + <_> + + + + <_> + 11 9 7 3 -1. + <_> + 11 10 7 1 3. + 0 + -4.3228048831224442e-002 + -6.8606472015380859e-001 + 4.9887378700077534e-003 + <_> + + <_> + + + + <_> + 4 5 3 3 -1. + <_> + 5 5 1 3 3. + 0 + -6.1122281476855278e-003 + 2.4422119557857513e-001 + -8.1252299249172211e-002 + <_> + + <_> + + + + <_> + 12 5 6 3 -1. + <_> + 14 5 2 3 3. + 0 + -1.4673279598355293e-002 + 2.1088060736656189e-001 + -1.6600500047206879e-001 + <_> + + <_> + + + + <_> + 0 5 6 3 -1. + <_> + 2 5 2 3 3. + 0 + -1.0619849897921085e-002 + 1.5236820280551910e-001 + -1.5812709927558899e-001 + <_> + + <_> + + + + <_> + 13 5 5 4 -1. + <_> + 13 6 5 2 2. + 0 + -6.5401569008827209e-002 + -5.9497058391571045e-001 + 1.7393449321389198e-002 + <_> + + <_> + + + + <_> + 0 9 7 3 -1. + <_> + 0 10 7 1 3. + 0 + 2.1991839632391930e-002 + 3.2845780253410339e-002 + -5.8278721570968628e-001 + <_> + + <_> + + + + <_> + 13 9 1 2 -1. + <_> + 13 9 1 1 2. + 1 + -1.6024880111217499e-002 + -5.9319758415222168e-001 + 7.7277477830648422e-003 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + -7.4009672971442342e-005 + 1.0054150223731995e-001 + -1.9513580203056335e-001 + <_> + + <_> + + + + <_> + 0 1 18 9 -1. + <_> + 6 1 6 9 3. + 0 + -1.8304589390754700e-001 + 1.1641489714384079e-001 + -1.9243900477886200e-001 + <_> + + <_> + + + + <_> + 5 9 2 1 -1. + <_> + 5 9 1 1 2. + 1 + 5.1587168127298355e-003 + 2.7310799807310104e-002 + -6.5126478672027588e-001 + <_> + + <_> + + + + <_> + 15 7 2 3 -1. + <_> + 15 7 1 3 2. + 1 + -4.0543098002672195e-003 + 3.5822600126266479e-002 + -1.2355879694223404e-001 + <_> + + <_> + + + + <_> + 3 7 3 2 -1. + <_> + 3 7 3 1 2. + 1 + 1.0826930403709412e-002 + -5.6947678327560425e-002 + 3.7964731454849243e-001 + <_> + + <_> + + + + <_> + 15 0 3 2 -1. + <_> + 16 1 1 2 3. + 1 + -1.9336320459842682e-002 + -2.7437770366668701e-001 + 2.3742979392409325e-002 + <_> + + <_> + + + + <_> + 0 9 4 3 -1. + <_> + 1 9 2 3 2. + 0 + 3.0844670254737139e-003 + -8.8440679013729095e-002 + 2.0758619904518127e-001 + <_> + + <_> + + + + <_> + 15 0 3 2 -1. + <_> + 16 1 1 2 3. + 1 + 1.4967800118029118e-002 + 3.0504930764436722e-002 + -2.1708330512046814e-001 + <_> + + <_> + + + + <_> + 4 1 7 2 -1. + <_> + 4 2 7 1 2. + 0 + 1.4697089791297913e-002 + -6.8411618471145630e-002 + 2.7859160304069519e-001 + <_> + + <_> + + + + <_> + 15 2 1 2 -1. + <_> + 15 3 1 1 2. + 0 + -1.2393240467645228e-004 + 6.8553149700164795e-002 + -8.7831273674964905e-002 + <_> + + <_> + + + + <_> + 2 2 1 2 -1. + <_> + 2 3 1 1 2. + 0 + -1.0554819891694933e-004 + 1.1712960153818130e-001 + -1.5531350672245026e-001 + <_> + + <_> + + + + <_> + 0 0 18 3 -1. + <_> + 6 1 6 1 9. + 0 + 1.0648550093173981e-001 + -6.1998508870601654e-002 + 2.7710339426994324e-001 + <_> + + <_> + + + + <_> + 5 0 8 4 -1. + <_> + 5 1 8 2 2. + 0 + -3.0953379347920418e-002 + 3.0595239996910095e-001 + -6.0716990381479263e-002 + <_> + + <_> + + + + <_> + 15 1 3 2 -1. + <_> + 16 2 1 2 3. + 1 + -2.9498629271984100e-002 + -3.9406108856201172e-001 + 1.6826160252094269e-002 + <_> + + <_> + + + + <_> + 0 6 4 6 -1. + <_> + 0 8 4 2 3. + 0 + 4.9228470772504807e-002 + 3.4308459609746933e-002 + -5.0780892372131348e-001 + <_> + + <_> + + + + <_> + 5 4 9 8 -1. + <_> + 5 8 9 4 2. + 0 + -1.1081350035965443e-002 + -6.4533978700637817e-001 + 2.1389039233326912e-002 + <_> + + <_> + + + + <_> + 5 1 1 4 -1. + <_> + 4 2 1 2 2. + 1 + -1.5145439654588699e-002 + -4.2602449655532837e-001 + 3.9356358349323273e-002 + <_> + + <_> + + + + <_> + 10 5 3 2 -1. + <_> + 11 5 1 2 3. + 0 + -5.2890921942889690e-003 + 1.9488410651683807e-001 + -6.0674101114273071e-002 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + -7.3016500100493431e-003 + -5.4184222221374512e-001 + 3.1283780932426453e-002 + <_> + + <_> + + + + <_> + 9 2 2 1 -1. + <_> + 9 2 1 1 2. + 0 + -4.2362208478152752e-003 + -2.9087099432945251e-001 + 1.4468260109424591e-002 + <_> + + <_> + + + + <_> + 7 2 2 1 -1. + <_> + 8 2 1 1 2. + 0 + 1.1999450362054631e-004 + -1.3722729682922363e-001 + 1.2392169982194901e-001 + <_> + + <_> + + + + <_> + 16 11 2 1 -1. + <_> + 16 11 1 1 2. + 0 + 1.9742529839277267e-003 + 2.9429899528622627e-002 + -1.6445399820804596e-001 + <_> + + <_> + + + + <_> + 0 11 2 1 -1. + <_> + 1 11 1 1 2. + 0 + -1.2930440425407141e-004 + 1.2450899928808212e-001 + -1.3043509423732758e-001 + <_> + + <_> + + + + <_> + 16 8 2 2 -1. + <_> + 16 8 1 2 2. + 1 + -2.2735600359737873e-003 + 6.0308720916509628e-002 + -1.3316330313682556e-001 + <_> + + <_> + + + + <_> + 2 8 2 2 -1. + <_> + 2 8 2 1 2. + 1 + 4.2600082233548164e-003 + -6.8703986704349518e-002 + 2.7337071299552917e-001 + <_> + + <_> + + + + <_> + 2 11 16 1 -1. + <_> + 2 11 8 1 2. + 0 + -7.8149579465389252e-002 + -4.7220858931541443e-001 + 2.1372530609369278e-002 + <_> + + <_> + + + + <_> + 0 6 1 4 -1. + <_> + 0 8 1 2 2. + 0 + -4.1436408646404743e-003 + -3.3360588550567627e-001 + 5.2412509918212891e-002 + <_> + + <_> + + + + <_> + 14 2 2 2 -1. + <_> + 15 2 1 1 2. + <_> + 14 3 1 1 2. + 0 + -1.1810749856522307e-004 + 1.2552410364151001e-001 + -1.2879179418087006e-001 + <_> + + <_> + + + + <_> + 2 2 2 2 -1. + <_> + 2 2 1 1 2. + <_> + 3 3 1 1 2. + 0 + -1.2218070332892239e-004 + 1.3134269416332245e-001 + -1.2296169996261597e-001 + <_> + + <_> + + + + <_> + 9 0 4 4 -1. + <_> + 10 0 2 4 2. + 0 + -1.8656680360436440e-002 + -3.5880041122436523e-001 + 1.2528499588370323e-002 + <_> + + <_> + + + + <_> + 6 2 6 7 -1. + <_> + 8 2 2 7 3. + 0 + -3.4258540719747543e-002 + 1.2983490526676178e-001 + -1.2182570248842239e-001 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 5 1 3 3. + 0 + 7.7113481238484383e-003 + -5.6336041539907455e-002 + 1.5032570064067841e-001 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + -7.5950678437948227e-003 + 3.3188471198081970e-001 + -6.1699498444795609e-002 + <_> + + <_> + + + + <_> + 16 4 2 1 -1. + <_> + 16 4 1 1 2. + 0 + -1.0678060352802277e-002 + -6.6613417863845825e-001 + 1.2147589586675167e-002 + <_> + + <_> + + + + <_> + 0 4 2 1 -1. + <_> + 1 4 1 1 2. + 0 + -1.3358499563764781e-004 + 8.6387783288955688e-002 + -2.0256230235099792e-001 + <_> + + <_> + + + + <_> + 7 11 6 1 -1. + <_> + 9 11 2 1 3. + 0 + -1.4575020410120487e-002 + -7.3572522401809692e-001 + 2.1267030388116837e-002 + <_> + + <_> + + + + <_> + 5 11 6 1 -1. + <_> + 7 11 2 1 3. + 0 + -1.1412939988076687e-002 + -5.0988101959228516e-001 + 2.6772709563374519e-002 + <_> + + <_> + + + + <_> + 15 0 3 3 -1. + <_> + 14 1 3 1 3. + 1 + -3.4162081778049469e-002 + 3.6300870776176453e-001 + -2.7194390073418617e-002 + <_> + + <_> + + + + <_> + 3 0 3 3 -1. + <_> + 4 1 1 3 3. + 1 + -2.2955790162086487e-002 + 2.7859601378440857e-001 + -5.2748218178749084e-002 + <_> + + <_> + + + + <_> + 13 2 3 9 -1. + <_> + 14 5 1 3 9. + 0 + -2.8807529807090759e-001 + -8.1691658496856689e-001 + 9.1450996696949005e-003 + <_> + + <_> + + + + <_> + 2 2 3 9 -1. + <_> + 3 5 1 3 9. + 0 + -2.7352200821042061e-002 + 1.0071670264005661e-001 + -1.6602990031242371e-001 + <_> + + <_> + + + + <_> + 9 6 4 1 -1. + <_> + 10 6 2 1 2. + 0 + -2.8700050897896290e-003 + 1.2723830342292786e-001 + -5.8128058910369873e-002 + <_> + + <_> + + + + <_> + 6 6 3 2 -1. + <_> + 7 6 1 2 3. + 0 + -3.0184709466993809e-003 + 1.8212230503559113e-001 + -8.9592203497886658e-002 + <_> + + <_> + + + + <_> + 13 1 3 2 -1. + <_> + 14 2 1 2 3. + 1 + 2.5293970480561256e-002 + 1.2859360314905643e-002 + -2.1852749586105347e-001 + <_> + + <_> + + + + <_> + 5 1 2 3 -1. + <_> + 4 2 2 1 3. + 1 + 9.6635837107896805e-003 + 5.2143279463052750e-002 + -3.0202549695968628e-001 + <_> + + <_> + + + + <_> + 10 8 2 2 -1. + <_> + 10 8 2 1 2. + 1 + 4.5520989224314690e-003 + -2.3607470095157623e-002 + 1.8376210331916809e-001 + <_> + + <_> + + + + <_> + 0 0 18 6 -1. + <_> + 0 3 18 3 2. + 0 + -4.9739900231361389e-001 + -5.3579831123352051e-001 + 2.8743360191583633e-002 + <_> + + <_> + + + + <_> + 11 1 3 3 -1. + <_> + 12 1 1 3 3. + 0 + -1.5186400152742863e-002 + -3.3224511146545410e-001 + 8.5207987576723099e-003 + <_> + + <_> + + + + <_> + 8 8 2 2 -1. + <_> + 8 8 1 2 2. + 1 + -1.6664810478687286e-002 + -3.6154919862747192e-001 + 4.0535591542720795e-002 + <_> + + <_> + + + + <_> + 11 9 1 2 -1. + <_> + 11 9 1 1 2. + 1 + -1.6777740092948079e-003 + 5.6449390947818756e-002 + -8.3506047725677490e-002 + <_> + + <_> + + + + <_> + 7 9 2 1 -1. + <_> + 7 9 1 1 2. + 1 + -8.6815550457686186e-004 + 8.6002722382545471e-002 + -1.6662649810314178e-001 + <_> + + <_> + + + + <_> + 7 2 4 3 -1. + <_> + 7 3 4 1 3. + 0 + -2.1504880860447884e-002 + 3.0984830856323242e-001 + -4.7374550253152847e-002 + <_> + + <_> + + + + <_> + 3 2 12 3 -1. + <_> + 3 3 12 1 3. + 0 + 1.2018860317766666e-002 + -1.1302450299263000e-001 + 1.5601180493831635e-001 + <_> + + <_> + + + + <_> + 11 1 3 1 -1. + <_> + 12 2 1 1 3. + 1 + -4.8626540228724480e-003 + 7.7384807169437408e-002 + -2.6118829846382141e-002 + <_> + + <_> + + + + <_> + 7 1 1 3 -1. + <_> + 6 2 1 1 3. + 1 + 8.0883055925369263e-003 + 5.0701878964900970e-002 + -3.0898410081863403e-001 + <_> + + <_> + + + + <_> + 14 6 4 4 -1. + <_> + 15 6 2 4 2. + 0 + -6.0818139463663101e-003 + 1.0439839959144592e-001 + -5.4040290415287018e-002 + <_> + + <_> + + + + <_> + 4 0 10 6 -1. + <_> + 4 2 10 2 3. + 0 + 2.3746709525585175e-001 + -3.6280110478401184e-002 + 3.9113318920135498e-001 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 6 11 6 1 3. + 0 + -1.7426609992980957e-002 + 1.6401870548725128e-001 + -8.8042907416820526e-002 + <_> + + <_> + + + + <_> + 0 6 4 4 -1. + <_> + 1 6 2 4 2. + 0 + -1.0071439668536186e-002 + 1.9563260674476624e-001 + -6.9586493074893951e-002 + <_> + + <_> + + + + <_> + 14 0 4 4 -1. + <_> + 15 0 2 4 2. + 0 + 1.6055470332503319e-002 + 1.6443690285086632e-002 + -1.8746310472488403e-001 + <_> + + <_> + + + + <_> + 0 0 4 4 -1. + <_> + 1 0 2 4 2. + 0 + -1.9599670544266701e-002 + -4.7449600696563721e-001 + 3.2551929354667664e-002 + <_> + + <_> + + + + <_> + 5 1 12 2 -1. + <_> + 11 1 6 1 2. + <_> + 5 2 6 1 2. + 0 + 1.0608370415866375e-002 + -3.7545830011367798e-002 + 9.7375199198722839e-002 + <_> + + <_> + + + + <_> + 1 1 12 2 -1. + <_> + 1 1 6 1 2. + <_> + 7 2 6 1 2. + 0 + -1.4044529758393764e-002 + 2.1422649919986725e-001 + -6.7895002663135529e-002 + <_> + + <_> + + + + <_> + 12 0 4 2 -1. + <_> + 13 0 2 2 2. + 0 + -1.5813199803233147e-002 + -6.4780187606811523e-001 + 1.3148790225386620e-002 + <_> + + <_> + + + + <_> + 2 0 4 2 -1. + <_> + 3 0 2 2 2. + 0 + -1.5055449679493904e-002 + -6.8386191129684448e-001 + 1.9564820453524590e-002 + <_> + + <_> + + + + <_> + 14 4 4 6 -1. + <_> + 14 6 4 2 3. + 0 + -1.5806560218334198e-001 + -5.3126132488250732e-001 + 3.8119140663184226e-004 + <_> + + <_> + + + + <_> + 2 6 12 4 -1. + <_> + 2 6 6 2 2. + <_> + 8 8 6 2 2. + 0 + 2.0771630108356476e-002 + -1.1685659736394882e-001 + 1.1046549677848816e-001 + <_> + + <_> + + + + <_> + 13 3 3 1 -1. + <_> + 14 4 1 1 3. + 1 + -2.8288820758461952e-002 + -5.9239888191223145e-001 + 7.6842932030558586e-003 + <_> + + <_> + + + + <_> + 5 3 1 3 -1. + <_> + 4 4 1 1 3. + 1 + 5.6896908208727837e-003 + 4.6517208218574524e-002 + -2.9473629593849182e-001 + -1.6673049926757812e+000 + 10 + -1 + <_> + + + <_> + + <_> + + + + <_> + 7 4 3 2 -1. + <_> + 7 4 3 1 2. + 1 + -3.9956759661436081e-002 + 5.2230298519134521e-001 + -3.5263240337371826e-001 + <_> + + <_> + + + + <_> + 10 2 1 6 -1. + <_> + 8 4 1 2 3. + 1 + -2.8569729998707771e-002 + 1.4566479623317719e-001 + -1.1563750356435776e-001 + <_> + + <_> + + + + <_> + 8 1 6 1 -1. + <_> + 10 3 2 1 3. + 1 + -4.1501019150018692e-002 + 3.6643621325492859e-001 + -2.2006149590015411e-001 + <_> + + <_> + + + + <_> + 7 7 9 1 -1. + <_> + 10 7 3 1 3. + 0 + 2.3764509707689285e-002 + -1.0637629777193069e-001 + 3.3757281303405762e-001 + <_> + + <_> + + + + <_> + 1 0 12 3 -1. + <_> + 5 0 4 3 3. + 0 + -3.6841601133346558e-002 + 2.0969760417938232e-001 + -3.5538119077682495e-001 + <_> + + <_> + + + + <_> + 1 4 16 8 -1. + <_> + 1 8 16 4 2. + 0 + 4.5045730471611023e-001 + -2.5148901343345642e-001 + 2.7531328797340393e-001 + <_> + + <_> + + + + <_> + 0 2 2 1 -1. + <_> + 1 2 1 1 2. + 0 + -1.1612180242082104e-004 + 1.4220459759235382e-001 + -3.4681579470634460e-001 + <_> + + <_> + + + + <_> + 12 5 3 3 -1. + <_> + 13 6 1 3 3. + 1 + -2.4308359250426292e-002 + 2.7634850144386292e-001 + -5.8556519448757172e-002 + <_> + + <_> + + + + <_> + 9 2 6 3 -1. + <_> + 11 4 2 3 3. + 1 + -1.0739170014858246e-001 + 2.5513848662376404e-001 + -1.8360190093517303e-001 + <_> + + <_> + + + + <_> + 11 5 6 3 -1. + <_> + 13 5 2 3 3. + 0 + -2.1329099312424660e-002 + 2.8843191266059875e-001 + -1.2600709497928619e-001 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 5 6 3 1 3. + 1 + -9.9198631942272186e-003 + 2.5516051054000854e-001 + -1.7994299530982971e-001 + <_> + + <_> + + + + <_> + 2 10 16 2 -1. + <_> + 2 11 16 1 2. + 0 + 3.3280439674854279e-003 + -3.5088729858398438e-001 + 1.0136920213699341e-001 + <_> + + <_> + + + + <_> + 0 0 1 4 -1. + <_> + 0 1 1 2 2. + 0 + 4.8708179965615273e-003 + 5.1397740840911865e-002 + -5.6077277660369873e-001 + <_> + + <_> + + + + <_> + 9 0 4 3 -1. + <_> + 10 0 2 3 2. + 0 + 9.8150614649057388e-003 + 3.9320938289165497e-002 + -4.5681610703468323e-001 + <_> + + <_> + + + + <_> + 5 0 4 3 -1. + <_> + 6 0 2 3 2. + 0 + -1.2296459637582302e-002 + -5.4089337587356567e-001 + 4.8353921622037888e-002 + <_> + + <_> + + + + <_> + 8 0 5 2 -1. + <_> + 8 1 5 1 2. + 0 + 1.5832969918847084e-002 + -9.2032462358474731e-002 + 3.3556351065635681e-001 + <_> + + <_> + + + + <_> + 0 1 1 2 -1. + <_> + 0 2 1 1 2. + 0 + -1.1616790288826451e-004 + 1.3700810074806213e-001 + -2.0924359560012817e-001 + <_> + + <_> + + + + <_> + 8 9 4 3 -1. + <_> + 9 9 2 3 2. + 0 + 9.3623008579015732e-003 + 3.4387368708848953e-002 + -6.4315831661224365e-001 + <_> + + <_> + + + + <_> + 6 9 4 3 -1. + <_> + 7 9 2 3 2. + 0 + 7.3407022282481194e-003 + 4.7527570277452469e-002 + -5.2763640880584717e-001 + <_> + + <_> + + + + <_> + 10 4 3 3 -1. + <_> + 11 5 1 3 3. + 1 + -9.7040366381406784e-003 + 6.1033390462398529e-002 + -1.1603049933910370e-001 + <_> + + <_> + + + + <_> + 3 0 4 4 -1. + <_> + 4 0 2 4 2. + 0 + -1.6028270125389099e-002 + -5.8752918243408203e-001 + 4.3372269719839096e-002 + <_> + + <_> + + + + <_> + 10 4 3 3 -1. + <_> + 11 5 1 3 3. + 1 + -1.0594909638166428e-001 + -6.6139537096023560e-001 + -1.2790230102837086e-003 + <_> + + <_> + + + + <_> + 8 4 3 3 -1. + <_> + 7 5 3 1 3. + 1 + 2.9476720839738846e-002 + -8.3381086587905884e-002 + 3.2143539190292358e-001 + <_> + + <_> + + + + <_> + 13 2 4 4 -1. + <_> + 13 2 2 4 2. + 0 + -1.2502159923315048e-002 + 9.9471800029277802e-002 + -6.8885073065757751e-002 + <_> + + <_> + + + + <_> + 0 1 1 3 -1. + <_> + 0 2 1 1 3. + 0 + -3.1669840682297945e-003 + -3.3657288551330566e-001 + 6.7130729556083679e-002 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + -3.7675988860428333e-003 + 2.5373768806457520e-001 + -5.4118018597364426e-002 + <_> + + <_> + + + + <_> + 3 0 3 5 -1. + <_> + 4 0 1 5 3. + 0 + 9.5973610877990723e-003 + 5.0982888787984848e-002 + -3.9950078725814819e-001 + <_> + + <_> + + + + <_> + 7 2 8 2 -1. + <_> + 9 2 4 2 2. + 0 + 6.5194750204682350e-003 + -5.6820228695869446e-002 + 9.7085036337375641e-002 + <_> + + <_> + + + + <_> + 1 0 8 4 -1. + <_> + 1 0 4 2 2. + <_> + 5 2 4 2 2. + 0 + -3.0232090502977371e-002 + 2.6110428571701050e-001 + -7.0189543068408966e-002 + <_> + + <_> + + + + <_> + 4 1 10 6 -1. + <_> + 4 3 10 2 3. + 0 + 1.9264510273933411e-001 + -3.8105361163616180e-002 + 4.9786558747291565e-001 + <_> + + <_> + + + + <_> + 1 2 2 1 -1. + <_> + 2 2 1 1 2. + 0 + -1.0531100269872695e-004 + 1.0181579738855362e-001 + -1.9895200431346893e-001 + <_> + + <_> + + + + <_> + 14 1 4 6 -1. + <_> + 16 1 2 3 2. + <_> + 14 4 2 3 2. + 0 + -1.7167180776596069e-002 + 1.7047409713268280e-001 + -1.1575569957494736e-001 + <_> + + <_> + + + + <_> + 0 1 4 6 -1. + <_> + 0 1 2 3 2. + <_> + 2 4 2 3 2. + 0 + -1.6330849379301071e-002 + 2.3561200499534607e-001 + -8.8093422353267670e-002 + <_> + + <_> + + + + <_> + 16 4 2 3 -1. + <_> + 16 5 2 1 3. + 0 + 9.9368933588266373e-003 + 3.6905229091644287e-002 + -4.8101478815078735e-001 + <_> + + <_> + + + + <_> + 8 9 2 1 -1. + <_> + 8 9 1 1 2. + 1 + -9.1113299131393433e-003 + -3.9816591143608093e-001 + 4.4077850878238678e-002 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 1.4140089973807335e-002 + -4.0721800923347473e-001 + 4.7490529716014862e-002 + <_> + + <_> + + + + <_> + 6 6 2 2 -1. + <_> + 6 6 1 1 2. + <_> + 7 7 1 1 2. + 0 + -1.8617640016600490e-003 + 2.3672190308570862e-001 + -7.6820157468318939e-002 + <_> + + <_> + + + + <_> + 15 4 3 3 -1. + <_> + 15 5 3 1 3. + 0 + -2.7797909453511238e-002 + -5.5653101205825806e-001 + 1.8978169187903404e-002 + <_> + + <_> + + + + <_> + 9 2 5 3 -1. + <_> + 8 3 5 1 3. + 1 + -2.7056299149990082e-002 + 1.3742800056934357e-001 + -1.2685729563236237e-001 + <_> + + <_> + + + + <_> + 17 9 1 3 -1. + <_> + 17 10 1 1 3. + 0 + 5.5972482077777386e-003 + 2.3374689742922783e-002 + -3.7989559769630432e-001 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + -1.4289989485405385e-004 + 9.2340193688869476e-002 + -1.8222640454769135e-001 + <_> + + <_> + + + + <_> + 3 0 14 2 -1. + <_> + 10 0 7 1 2. + <_> + 3 1 7 1 2. + 0 + 4.7072111628949642e-003 + -8.2098759710788727e-002 + 1.4458109438419342e-001 + <_> + + <_> + + + + <_> + 0 9 2 3 -1. + <_> + 0 10 2 1 3. + 0 + 8.2740625366568565e-003 + 3.5707078874111176e-002 + -4.9938249588012695e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 9 0 9 6 2. + <_> + 0 6 9 6 2. + 0 + 4.1985020041465759e-001 + 2.5246109813451767e-002 + -5.8404290676116943e-001 + <_> + + <_> + + + + <_> + 0 8 3 4 -1. + <_> + 0 9 3 2 2. + 0 + -1.1979590170085430e-002 + -4.3877130746841431e-001 + 3.5344090312719345e-002 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 7 1 4 1 3. + 0 + -1.0584940202534199e-002 + 2.2189530730247498e-001 + -7.5947776436805725e-002 + <_> + + <_> + + + + <_> + 0 4 4 4 -1. + <_> + 0 5 4 2 2. + 0 + -3.6539521068334579e-002 + -7.4320507049560547e-001 + 2.2532209753990173e-002 + <_> + + <_> + + + + <_> + 17 4 1 4 -1. + <_> + 17 5 1 2 2. + 0 + 6.2696770764887333e-003 + 2.5996619835495949e-002 + -4.3524068593978882e-001 + <_> + + <_> + + + + <_> + 5 6 2 2 -1. + <_> + 5 6 1 1 2. + <_> + 6 7 1 1 2. + 0 + -2.2490890696644783e-003 + 2.4717779457569122e-001 + -6.4497016370296478e-002 + <_> + + <_> + + + + <_> + 17 4 1 4 -1. + <_> + 17 5 1 2 2. + 0 + -1.9729709252715111e-002 + -8.2047319412231445e-001 + 7.4640130624175072e-003 + <_> + + <_> + + + + <_> + 0 4 1 4 -1. + <_> + 0 5 1 2 2. + 0 + 4.4493898749351501e-003 + 4.1863039135932922e-002 + -3.7814080715179443e-001 + <_> + + <_> + + + + <_> + 12 7 3 2 -1. + <_> + 13 8 1 2 3. + 1 + 7.3664717376232147e-002 + -4.8542860895395279e-003 + 7.5385349988937378e-001 + <_> + + <_> + + + + <_> + 6 7 2 3 -1. + <_> + 5 8 2 1 3. + 1 + -6.0322289355099201e-003 + 1.7529049515724182e-001 + -9.2345252633094788e-002 + <_> + + <_> + + + + <_> + 15 8 2 2 -1. + <_> + 15 8 1 2 2. + 1 + -3.9990269578993320e-003 + 7.0288032293319702e-002 + -1.3759149610996246e-001 + <_> + + <_> + + + + <_> + 3 8 2 2 -1. + <_> + 3 8 2 1 2. + 1 + 4.4922139495611191e-003 + -7.2460688650608063e-002 + 2.6984411478042603e-001 + <_> + + <_> + + + + <_> + 14 10 4 2 -1. + <_> + 14 10 2 2 2. + 0 + -9.6887518884614110e-004 + 1.0673040151596069e-001 + -1.0224950313568115e-001 + <_> + + <_> + + + + <_> + 3 0 12 3 -1. + <_> + 3 1 12 1 3. + 0 + 1.4500839635729790e-002 + -1.0403750091791153e-001 + 1.6688880324363708e-001 + <_> + + <_> + + + + <_> + 12 3 3 9 -1. + <_> + 13 3 1 9 3. + 0 + -3.5295259207487106e-002 + -5.0939851999282837e-001 + 2.0862380042672157e-002 + <_> + + <_> + + + + <_> + 0 5 18 6 -1. + <_> + 0 8 18 3 2. + 0 + 8.5677601397037506e-002 + -3.8956940174102783e-001 + 3.8175251334905624e-002 + <_> + + <_> + + + + <_> + 14 10 4 2 -1. + <_> + 14 10 2 2 2. + 0 + -2.5425739586353302e-002 + -3.1342959403991699e-001 + 1.3558049686253071e-002 + <_> + + <_> + + + + <_> + 0 10 4 2 -1. + <_> + 2 10 2 2 2. + 0 + -8.3960685878992081e-003 + 2.0714859664440155e-001 + -9.0884797275066376e-002 + <_> + + <_> + + + + <_> + 4 3 10 2 -1. + <_> + 4 4 10 1 2. + 0 + 2.7257710695266724e-002 + -3.4004978835582733e-002 + 4.2590439319610596e-001 + <_> + + <_> + + + + <_> + 1 1 16 4 -1. + <_> + 1 2 16 2 2. + 0 + 3.2978549599647522e-002 + -9.6014492213726044e-002 + 1.6614159941673279e-001 + <_> + + <_> + + + + <_> + 12 2 2 1 -1. + <_> + 12 2 1 1 2. + 1 + -6.8808980286121368e-003 + 2.0307220518589020e-001 + -2.9098080471158028e-002 + <_> + + <_> + + + + <_> + 5 0 3 3 -1. + <_> + 4 1 3 1 3. + 1 + 1.2321489863097668e-002 + 5.6583181023597717e-002 + -2.9808661341667175e-001 + <_> + + <_> + + + + <_> + 12 1 2 2 -1. + <_> + 12 1 1 2 2. + 1 + 8.0069275572896004e-003 + -4.5793779194355011e-002 + 6.0080189257860184e-002 + <_> + + <_> + + + + <_> + 6 1 2 2 -1. + <_> + 6 1 2 1 2. + 1 + 1.8184490501880646e-002 + 3.9265241473913193e-002 + -4.3420770764350891e-001 + <_> + + <_> + + + + <_> + 5 2 12 2 -1. + <_> + 11 2 6 1 2. + <_> + 5 3 6 1 2. + 0 + -1.2880899943411350e-002 + 7.1062043309211731e-002 + -3.2926250249147415e-002 + <_> + + <_> + + + + <_> + 1 2 12 2 -1. + <_> + 1 2 6 1 2. + <_> + 7 3 6 1 2. + 0 + 1.7656469717621803e-002 + -5.3377009928226471e-002 + 2.8472688794136047e-001 + <_> + + <_> + + + + <_> + 13 8 1 3 -1. + <_> + 12 9 1 1 3. + 1 + 1.7241619527339935e-002 + 1.2728299945592880e-002 + -5.9147852659225464e-001 + <_> + + <_> + + + + <_> + 5 8 3 1 -1. + <_> + 6 9 1 1 3. + 1 + -8.1344433128833771e-003 + -3.9443930983543396e-001 + 3.5933971405029297e-002 + <_> + + <_> + + + + <_> + 7 2 4 2 -1. + <_> + 8 2 2 2 2. + 0 + 6.2624989077448845e-003 + 4.1950210928916931e-002 + -3.1127980351448059e-001 + <_> + + <_> + + + + <_> + 6 0 6 4 -1. + <_> + 8 0 2 4 3. + 0 + -3.7106670439243317e-002 + -4.6345439553260803e-001 + 3.2157208770513535e-002 + <_> + + <_> + + + + <_> + 8 5 4 2 -1. + <_> + 9 5 2 2 2. + 0 + 5.2173170261085033e-003 + -3.0107850208878517e-002 + 1.4784480631351471e-001 + <_> + + <_> + + + + <_> + 5 8 2 1 -1. + <_> + 5 8 1 1 2. + 1 + -8.0826329067349434e-003 + -2.8399410843849182e-001 + 4.7271709889173508e-002 + <_> + + <_> + + + + <_> + 14 9 1 2 -1. + <_> + 14 9 1 1 2. + 1 + 1.8598020076751709e-002 + 1.2912260135635734e-003 + -8.2174521684646606e-001 + <_> + + <_> + + + + <_> + 4 9 2 1 -1. + <_> + 4 9 1 1 2. + 1 + -1.0656929953256622e-004 + 7.9160809516906738e-002 + -1.9015760719776154e-001 + <_> + + <_> + + + + <_> + 11 4 3 4 -1. + <_> + 12 4 1 4 3. + 0 + -6.2989699654281139e-003 + 1.4902189373970032e-001 + -4.3334830552339554e-002 + <_> + + <_> + + + + <_> + 2 3 2 2 -1. + <_> + 2 3 1 1 2. + <_> + 3 4 1 1 2. + 0 + -1.3413479609880596e-004 + 1.2274789810180664e-001 + -1.1754590272903442e-001 + <_> + + <_> + + + + <_> + 9 1 1 8 -1. + <_> + 9 1 1 4 2. + 1 + -8.0092161893844604e-002 + -1.9501920044422150e-001 + 1.7820900306105614e-002 + <_> + + <_> + + + + <_> + 9 1 8 1 -1. + <_> + 9 1 4 1 2. + 1 + -9.0993821620941162e-002 + 4.8223200440406799e-001 + -3.1845889985561371e-002 + <_> + + <_> + + + + <_> + 11 5 3 3 -1. + <_> + 12 5 1 3 3. + 0 + 1.1353549547493458e-002 + -2.8713610023260117e-002 + 1.0261540114879608e-001 + <_> + + <_> + + + + <_> + 3 6 12 6 -1. + <_> + 7 8 4 2 9. + 0 + 3.9425060153007507e-001 + -2.1073190495371819e-002 + 6.6874951124191284e-001 + <_> + + <_> + + + + <_> + 12 9 6 3 -1. + <_> + 14 9 2 3 3. + 0 + -2.9247280210256577e-002 + -2.3554429411888123e-001 + 2.3138720542192459e-002 + <_> + + <_> + + + + <_> + 0 9 6 3 -1. + <_> + 2 9 2 3 3. + 0 + 9.9638495594263077e-003 + -7.8489832580089569e-002 + 1.8867549300193787e-001 + <_> + + <_> + + + + <_> + 15 7 3 2 -1. + <_> + 15 7 3 1 2. + 1 + -2.3715409915894270e-003 + 4.1485100984573364e-002 + -1.0372100025415421e-001 + <_> + + <_> + + + + <_> + 3 7 2 3 -1. + <_> + 3 7 1 3 2. + 1 + -2.3743370547890663e-002 + -3.9640530943870544e-001 + 3.4268859773874283e-002 + <_> + + <_> + + + + <_> + 15 6 3 2 -1. + <_> + 16 6 1 2 3. + 0 + 1.0030630044639111e-002 + 2.1527150645852089e-002 + -2.5675439834594727e-001 + <_> + + <_> + + + + <_> + 0 6 3 2 -1. + <_> + 1 6 1 2 3. + 0 + -4.3138000182807446e-003 + 1.9897720217704773e-001 + -7.1912497282028198e-002 + <_> + + <_> + + + + <_> + 16 6 2 5 -1. + <_> + 16 6 1 5 2. + 0 + -2.5737010873854160e-003 + 1.0103909671306610e-001 + -1.2687060236930847e-001 + <_> + + <_> + + + + <_> + 0 6 2 5 -1. + <_> + 1 6 1 5 2. + 0 + 8.6109479889273643e-003 + -5.2193351089954376e-002 + 3.1577721238136292e-001 + <_> + + <_> + + + + <_> + 16 9 2 2 -1. + <_> + 16 10 2 1 2. + 0 + -1.5778529923409224e-003 + -1.9565540552139282e-001 + 3.0738929286599159e-002 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + -8.8134268298745155e-003 + -8.0713188648223877e-001 + 1.7111089080572128e-002 + <_> + + <_> + + + + <_> + 16 9 2 2 -1. + <_> + 16 10 2 1 2. + 0 + 3.9245299994945526e-003 + 5.1848150789737701e-002 + -1.0634920001029968e-001 + <_> + + <_> + + + + <_> + 0 9 2 2 -1. + <_> + 0 10 2 1 2. + 0 + -2.6619979180395603e-003 + -3.1994658708572388e-001 + 4.2416218668222427e-002 + <_> + + <_> + + + + <_> + 9 6 3 1 -1. + <_> + 10 6 1 1 3. + 0 + -1.5030719805508852e-003 + 9.4091989099979401e-002 + -7.0534393191337585e-002 + <_> + + <_> + + + + <_> + 2 3 2 1 -1. + <_> + 3 3 1 1 2. + 0 + -1.0380429739598185e-004 + 8.6452230811119080e-002 + -1.5703070163726807e-001 + <_> + + <_> + + + + <_> + 0 1 18 3 -1. + <_> + 6 1 6 3 3. + 0 + 1.3336679339408875e-001 + -3.6738030612468719e-002 + 4.2388269305229187e-001 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + -3.4340259153395891e-003 + 2.0463900268077850e-001 + -6.4795367419719696e-002 + <_> + + <_> + + + + <_> + 7 5 4 4 -1. + <_> + 8 5 2 4 2. + 0 + -5.3972420282661915e-003 + 1.0175999999046326e-001 + -1.4838589727878571e-001 + <_> + + <_> + + + + <_> + 7 4 3 2 -1. + <_> + 7 4 3 1 2. + 1 + -3.9831619709730148e-002 + -2.6058611273765564e-001 + 7.4131652712821960e-002 + <_> + + <_> + + + + <_> + 6 2 9 3 -1. + <_> + 9 2 3 3 3. + 0 + -8.1318423151969910e-002 + -4.0708750486373901e-001 + 2.2578919306397438e-002 + <_> + + <_> + + + + <_> + 7 6 2 2 -1. + <_> + 7 7 2 1 2. + 0 + 4.9819168634712696e-003 + -1.1497610062360764e-001 + 1.1413440108299255e-001 + <_> + + <_> + + + + <_> + 11 2 7 4 -1. + <_> + 11 4 7 2 2. + 0 + -9.9393740296363831e-002 + -1.6260729730129242e-001 + 2.3891910910606384e-002 + <_> + + <_> + + + + <_> + 0 1 5 6 -1. + <_> + 0 4 5 3 2. + 0 + -1.0838139802217484e-001 + -3.6615368723869324e-001 + 3.3786319196224213e-002 + <_> + + <_> + + + + <_> + 12 6 6 3 -1. + <_> + 14 6 2 3 3. + 0 + 4.5659400522708893e-002 + -1.9689550623297691e-002 + 3.2644659280776978e-001 + <_> + + <_> + + + + <_> + 0 6 6 3 -1. + <_> + 2 6 2 3 3. + 0 + -1.3475780375301838e-002 + 1.3673679530620575e-001 + -9.8038949072360992e-002 + <_> + + <_> + + + + <_> + 12 9 2 2 -1. + <_> + 13 9 1 1 2. + <_> + 12 10 1 1 2. + 0 + 1.1365469981683418e-004 + -5.1998078823089600e-002 + 6.7236803472042084e-002 + <_> + + <_> + + + + <_> + 4 9 2 2 -1. + <_> + 4 9 1 1 2. + <_> + 5 10 1 1 2. + 0 + 1.3144240074325353e-004 + -1.0585889965295792e-001 + 1.2168779969215393e-001 + <_> + + <_> + + + + <_> + 4 1 12 3 -1. + <_> + 8 1 4 3 3. + 0 + -1.2846590019762516e-002 + 8.2202516496181488e-002 + -7.9589501023292542e-002 + <_> + + <_> + + + + <_> + 4 3 3 4 -1. + <_> + 4 4 3 2 2. + 0 + -4.2092949151992798e-003 + 9.4016201794147491e-002 + -1.3796289265155792e-001 + <_> + + <_> + + + + <_> + 3 1 12 6 -1. + <_> + 3 3 12 2 3. + 0 + 1.6699990257620811e-002 + -9.4395473599433899e-002 + 1.7067569494247437e-001 + <_> + + <_> + + + + <_> + 0 2 18 2 -1. + <_> + 0 3 18 1 2. + 0 + -2.7878250926733017e-002 + 1.4458370208740234e-001 + -1.0783910006284714e-001 + <_> + + <_> + + + + <_> + 12 2 2 1 -1. + <_> + 12 2 1 1 2. + 1 + 2.7518719434738159e-003 + -4.4989299029111862e-002 + 4.7646138817071915e-002 + <_> + + <_> + + + + <_> + 6 2 1 2 -1. + <_> + 6 2 1 1 2. + 1 + 8.1301108002662659e-003 + 4.4808190315961838e-002 + -3.2438778877258301e-001 + <_> + + <_> + + + + <_> + 2 4 15 3 -1. + <_> + 7 4 5 3 3. + 0 + -2.4894459545612335e-001 + -3.0193850398063660e-001 + 2.7400370687246323e-002 + <_> + + <_> + + + + <_> + 8 8 2 4 -1. + <_> + 8 8 1 2 2. + <_> + 9 10 1 2 2. + 0 + -7.5494530610740185e-003 + -5.3039801120758057e-001 + 2.3136850446462631e-002 + <_> + + <_> + + + + <_> + 12 0 6 8 -1. + <_> + 15 0 3 4 2. + <_> + 12 4 3 4 2. + 0 + 5.8778919279575348e-002 + -2.6784939691424370e-002 + 2.1899110078811646e-001 + -1.6442040205001831e+000 + 11 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.1325679719448090e-002 + -4.7803491353988647e-001 + 7.3498201370239258e-001 + <_> + + <_> + + + + <_> + 4 3 10 4 -1. + <_> + 4 4 10 2 2. + 0 + -5.9533089399337769e-002 + 5.5771350860595703e-001 + -2.2670570015907288e-001 + <_> + + <_> + + + + <_> + 7 5 2 2 -1. + <_> + 7 5 1 1 2. + <_> + 8 6 1 1 2. + 0 + -3.1314720399677753e-003 + 4.4743809103965759e-001 + -1.3644909858703613e-001 + <_> + + <_> + + + + <_> + 6 4 7 4 -1. + <_> + 6 6 7 2 2. + 0 + 3.2649870961904526e-002 + -1.5226930379867554e-001 + 7.8735552728176117e-002 + <_> + + <_> + + + + <_> + 5 6 2 6 -1. + <_> + 5 9 2 3 2. + 0 + 1.2642489373683929e-001 + -4.1502929525449872e-004 + -1.0683220214843750e+003 + <_> + + <_> + + + + <_> + 10 3 4 4 -1. + <_> + 10 3 2 4 2. + 1 + -7.6149761676788330e-002 + 8.4858410060405731e-002 + -6.4545206725597382e-002 + <_> + + <_> + + + + <_> + 4 6 3 2 -1. + <_> + 5 6 1 2 3. + 0 + -5.6127519346773624e-003 + 4.4183671474456787e-001 + -1.0350040346384048e-001 + <_> + + <_> + + + + <_> + 16 1 2 1 -1. + <_> + 16 1 1 1 2. + 0 + 1.0242169810226187e-004 + -9.8213642835617065e-002 + 1.2914030253887177e-001 + <_> + + <_> + + + + <_> + 0 1 2 1 -1. + <_> + 1 1 1 1 2. + 0 + -6.8429631937760860e-005 + 1.0027779638767242e-001 + -3.8002538681030273e-001 + <_> + + <_> + + + + <_> + 5 3 8 3 -1. + <_> + 5 4 8 1 3. + 0 + 1.9151799380779266e-002 + -7.5300611555576324e-002 + 4.5866578817367554e-001 + <_> + + <_> + + + + <_> + 5 6 3 1 -1. + <_> + 6 6 1 1 3. + 0 + -4.0838099084794521e-003 + 5.1005601882934570e-001 + -6.4336180686950684e-002 + <_> + + <_> + + + + <_> + 7 0 8 3 -1. + <_> + 9 0 4 3 2. + 0 + -3.2537680119276047e-002 + -4.6181130409240723e-001 + 3.3831451088190079e-002 + <_> + + <_> + + + + <_> + 0 0 16 4 -1. + <_> + 4 0 8 4 2. + 0 + -8.7081208825111389e-002 + 1.6511060297489166e-001 + -2.0930479466915131e-001 + <_> + + <_> + + + + <_> + 10 4 1 4 -1. + <_> + 9 5 1 2 2. + 1 + -1.4256989583373070e-002 + 1.4572089910507202e-001 + -6.4026951789855957e-002 + <_> + + <_> + + + + <_> + 5 2 8 4 -1. + <_> + 5 3 8 2 2. + 0 + -6.5033003687858582e-002 + 5.1746249198913574e-001 + -7.6861917972564697e-002 + <_> + + <_> + + + + <_> + 10 2 2 6 -1. + <_> + 8 4 2 2 3. + 1 + 3.0242659151554108e-002 + -1.7024759203195572e-002 + 2.2390039265155792e-001 + <_> + + <_> + + + + <_> + 8 2 6 2 -1. + <_> + 10 4 2 2 3. + 1 + -5.1224708557128906e-002 + 1.4911690354347229e-001 + -2.7958190441131592e-001 + <_> + + <_> + + + + <_> + 12 10 1 2 -1. + <_> + 12 11 1 1 2. + 0 + 9.4173839897848666e-005 + -2.2882409393787384e-001 + 8.2659862935543060e-002 + <_> + + <_> + + + + <_> + 5 4 6 2 -1. + <_> + 5 4 3 2 2. + 1 + 1.0907740332186222e-002 + 6.5371036529541016e-002 + -4.9981170892715454e-001 + <_> + + <_> + + + + <_> + 1 3 16 4 -1. + <_> + 5 3 8 4 2. + 0 + -2.6308920979499817e-001 + -6.0524332523345947e-001 + 4.5024640858173370e-002 + <_> + + <_> + + + + <_> + 0 2 7 4 -1. + <_> + 0 4 7 2 2. + 0 + -7.3864251375198364e-002 + -4.8135051131248474e-001 + 4.9323990941047668e-002 + <_> + + <_> + + + + <_> + 12 10 1 2 -1. + <_> + 12 11 1 1 2. + 0 + -1.1241710308240727e-004 + 1.3900199532508850e-001 + -4.0958389639854431e-002 + <_> + + <_> + + + + <_> + 5 10 1 2 -1. + <_> + 5 11 1 1 2. + 0 + 9.9417651654221117e-005 + -2.8291520476341248e-001 + 9.7753129899501801e-002 + <_> + + <_> + + + + <_> + 0 6 18 6 -1. + <_> + 9 6 9 3 2. + <_> + 0 9 9 3 2. + 0 + 4.0392991155385971e-002 + 6.6282726824283600e-002 + -3.1161430478096008e-001 + <_> + + <_> + + + + <_> + 0 2 2 2 -1. + <_> + 0 2 1 1 2. + <_> + 1 3 1 1 2. + 0 + -9.7815187473315746e-005 + 1.5816099941730499e-001 + -1.4707480370998383e-001 + <_> + + <_> + + + + <_> + 4 0 14 2 -1. + <_> + 11 0 7 1 2. + <_> + 4 1 7 1 2. + 0 + -3.0936010181903839e-002 + 2.6339599490165710e-001 + -2.3398019373416901e-002 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 7 1 4 1 3. + 0 + 1.3425219804048538e-002 + -8.9827023446559906e-002 + 2.6492318511009216e-001 + <_> + + <_> + + + + <_> + 1 10 16 1 -1. + <_> + 5 10 8 1 2. + 0 + -3.3873628824949265e-002 + 2.8317770361900330e-001 + -7.7808901667594910e-002 + <_> + + <_> + + + + <_> + 7 1 4 4 -1. + <_> + 7 2 4 2 2. + 0 + 1.2463210150599480e-002 + -1.2371910363435745e-001 + 1.8724919855594635e-001 + <_> + + <_> + + + + <_> + 17 0 1 8 -1. + <_> + 17 2 1 4 2. + 0 + 2.9030779376626015e-002 + 9.0519478544592857e-003 + -4.1493371129035950e-001 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.1256829835474491e-002 + 8.7845213711261749e-002 + -2.3316149413585663e-001 + <_> + + <_> + + + + <_> + 7 6 4 3 -1. + <_> + 7 7 4 1 3. + 0 + -1.5189910307526588e-002 + 2.9291531443595886e-001 + -8.0204613506793976e-002 + <_> + + <_> + + + + <_> + 4 6 2 2 -1. + <_> + 4 6 1 1 2. + <_> + 5 7 1 1 2. + 0 + -9.1453723143786192e-005 + 1.5025730431079865e-001 + -1.3389849662780762e-001 + <_> + + <_> + + + + <_> + 9 5 3 3 -1. + <_> + 10 6 1 1 9. + 0 + -1.7369290813803673e-002 + 2.1264329552650452e-001 + -1.1079180240631104e-001 + <_> + + <_> + + + + <_> + 0 0 1 8 -1. + <_> + 0 2 1 4 2. + 0 + 6.0836751945316792e-003 + 6.6616423428058624e-002 + -3.2809430360794067e-001 + <_> + + <_> + + + + <_> + 4 2 12 2 -1. + <_> + 8 2 4 2 3. + 0 + -1.8416589125990868e-002 + 1.0930880159139633e-001 + -1.0196469724178314e-001 + <_> + + <_> + + + + <_> + 7 2 4 10 -1. + <_> + 7 2 2 5 2. + <_> + 9 7 2 5 2. + 0 + 2.4164859205484390e-002 + 6.5767362713813782e-002 + -3.2412400841712952e-001 + <_> + + <_> + + + + <_> + 12 7 2 2 -1. + <_> + 13 7 1 1 2. + <_> + 12 8 1 1 2. + 0 + -8.7694352259859443e-005 + 1.1597049981355667e-001 + -1.1484769731760025e-001 + <_> + + <_> + + + + <_> + 1 0 16 3 -1. + <_> + 1 1 16 1 3. + 0 + -2.7230460196733475e-002 + 2.6190671324729919e-001 + -7.0017747581005096e-002 + <_> + + <_> + + + + <_> + 8 0 4 3 -1. + <_> + 9 0 2 3 2. + 0 + 7.9280352219939232e-003 + 4.4160388410091400e-002 + -3.5706248879432678e-001 + <_> + + <_> + + + + <_> + 9 4 1 3 -1. + <_> + 8 5 1 1 3. + 1 + 2.9761910438537598e-002 + -2.6648679748177528e-002 + 7.6121932268142700e-001 + <_> + + <_> + + + + <_> + 14 7 3 2 -1. + <_> + 14 7 3 1 2. + 1 + 2.3093869909644127e-002 + 1.1457229964435101e-002 + -4.8356440663337708e-001 + <_> + + <_> + + + + <_> + 4 7 2 3 -1. + <_> + 4 7 1 3 2. + 1 + 1.5517040155827999e-002 + 2.8549319133162498e-002 + -5.8977079391479492e-001 + <_> + + <_> + + + + <_> + 16 1 2 2 -1. + <_> + 17 1 1 1 2. + <_> + 16 2 1 1 2. + 0 + -9.1348258138168603e-005 + 6.3839852809906006e-002 + -6.8278312683105469e-002 + <_> + + <_> + + + + <_> + 0 1 2 2 -1. + <_> + 0 1 1 1 2. + <_> + 1 2 1 1 2. + 0 + -9.5886833150871098e-005 + 1.3642780482769012e-001 + -1.2203469872474670e-001 + <_> + + <_> + + + + <_> + 16 0 2 1 -1. + <_> + 16 0 1 1 2. + 0 + -7.8461649536620826e-005 + 9.5480233430862427e-002 + -8.4051437675952911e-002 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + -8.5865067376289517e-005 + 8.1667177379131317e-002 + -2.2435750067234039e-001 + <_> + + <_> + + + + <_> + 9 5 3 3 -1. + <_> + 10 6 1 1 9. + 0 + 1.8028339371085167e-002 + -4.2098421603441238e-002 + 2.6320070028305054e-001 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 7 6 1 1 9. + 0 + -1.1890250258147717e-002 + 1.8222090601921082e-001 + -9.6351742744445801e-002 + <_> + + <_> + + + + <_> + 9 5 2 1 -1. + <_> + 9 5 1 1 2. + 0 + 7.6375443313736469e-005 + -3.6046039313077927e-002 + 6.4947687089443207e-002 + <_> + + <_> + + + + <_> + 7 4 3 3 -1. + <_> + 8 5 1 1 9. + 0 + -9.7775431349873543e-003 + 1.3119940459728241e-001 + -1.3694000244140625e-001 + <_> + + <_> + + + + <_> + 9 0 6 4 -1. + <_> + 11 0 2 4 3. + 0 + 2.0142890512943268e-002 + 4.9725331366062164e-002 + -2.0494620501995087e-001 + <_> + + <_> + + + + <_> + 6 6 1 3 -1. + <_> + 5 7 1 1 3. + 1 + -6.0250670649111271e-003 + 1.8385030329227448e-001 + -8.9287042617797852e-002 + <_> + + <_> + + + + <_> + 10 6 4 2 -1. + <_> + 11 6 2 2 2. + 0 + -5.2001518197357655e-003 + 2.7691179513931274e-001 + -6.5970212221145630e-002 + <_> + + <_> + + + + <_> + 1 2 12 2 -1. + <_> + 5 2 4 2 3. + 0 + -1.6988459974527359e-002 + 1.0599619895219803e-001 + -1.7461700737476349e-001 + <_> + + <_> + + + + <_> + 3 0 12 4 -1. + <_> + 3 1 12 2 2. + 0 + 1.6818750649690628e-002 + -1.3084490597248077e-001 + 1.3686789572238922e-001 + <_> + + <_> + + + + <_> + 5 0 1 3 -1. + <_> + 4 1 1 1 3. + 1 + 9.4254389405250549e-003 + 3.5684291273355484e-002 + -4.7307041287422180e-001 + <_> + + <_> + + + + <_> + 6 1 6 3 -1. + <_> + 6 2 6 1 3. + 0 + -1.7591860145330429e-002 + 2.8785240650177002e-001 + -6.0098338872194290e-002 + <_> + + <_> + + + + <_> + 4 0 3 3 -1. + <_> + 3 1 3 1 3. + 1 + -1.6125669702887535e-002 + -3.0210059881210327e-001 + 5.8409459888935089e-002 + <_> + + <_> + + + + <_> + 15 7 3 4 -1. + <_> + 16 7 1 4 3. + 0 + 2.0552899688482285e-002 + 4.2291129939258099e-003 + -2.4721190333366394e-001 + <_> + + <_> + + + + <_> + 0 5 3 4 -1. + <_> + 1 5 1 4 3. + 0 + -1.0046569630503654e-002 + 2.7138590812683105e-001 + -6.3029937446117401e-002 + <_> + + <_> + + + + <_> + 8 1 4 2 -1. + <_> + 9 1 2 2 2. + 0 + -7.2175520472228527e-003 + -2.5999858975410461e-001 + 2.3320039734244347e-002 + <_> + + <_> + + + + <_> + 6 1 4 2 -1. + <_> + 7 1 2 2 2. + 0 + -9.3304775655269623e-003 + -5.2186262607574463e-001 + 2.9735490679740906e-002 + <_> + + <_> + + + + <_> + 10 7 3 2 -1. + <_> + 10 7 3 1 2. + 1 + -4.0984921157360077e-002 + -2.2182470560073853e-001 + 5.1118140108883381e-003 + <_> + + <_> + + + + <_> + 3 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + 2.7245599776506424e-002 + 3.0876399949193001e-002 + -5.1215821504592896e-001 + <_> + + <_> + + + + <_> + 11 6 2 1 -1. + <_> + 11 6 1 1 2. + 0 + 3.0668000690639019e-003 + -4.3708208948373795e-002 + 2.7001819014549255e-001 + <_> + + <_> + + + + <_> + 4 6 3 1 -1. + <_> + 5 6 1 1 3. + 0 + -9.3389411631505936e-005 + 1.4854280650615692e-001 + -1.1542809754610062e-001 + -1.5643759965896606e+000 + 12 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 8.3494018763303757e-003 + -5.3271728754043579e-001 + 7.3268449306488037e-001 + <_> + + <_> + + + + <_> + 6 1 11 4 -1. + <_> + 6 2 11 2 2. + 0 + 3.4267958253622055e-002 + -2.5425639748573303e-001 + 5.1729089021682739e-001 + <_> + + <_> + + + + <_> + 5 3 8 3 -1. + <_> + 5 4 8 1 3. + 0 + -3.9879079908132553e-002 + 6.3676887750625610e-001 + -1.6440890729427338e-001 + <_> + + <_> + + + + <_> + 9 5 3 3 -1. + <_> + 10 5 1 3 3. + 0 + -1.2493499554693699e-002 + 6.1780160665512085e-001 + -1.5069130063056946e-001 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 7 5 1 3 3. + 0 + 9.4682415947318077e-003 + -1.4532479643821716e-001 + 6.0617917776107788e-001 + <_> + + <_> + + + + <_> + 4 2 10 3 -1. + <_> + 4 3 10 1 3. + 0 + -2.7246329933404922e-002 + 5.3559631109237671e-001 + -8.9151263236999512e-002 + <_> + + <_> + + + + <_> + 5 4 8 3 -1. + <_> + 5 5 8 1 3. + 0 + -5.6648440659046173e-002 + 6.2180757522583008e-001 + -8.5310757160186768e-002 + <_> + + <_> + + + + <_> + 7 7 4 3 -1. + <_> + 7 8 4 1 3. + 0 + 1.4102620072662830e-002 + -9.3592159450054169e-002 + 4.4376650452613831e-001 + <_> + + <_> + + + + <_> + 5 3 8 7 -1. + <_> + 9 3 4 7 2. + 0 + 3.3257868885993958e-001 + -1.2685759924352169e-002 + -8.2546881103515625e+002 + <_> + + <_> + + + + <_> + 11 6 3 2 -1. + <_> + 12 6 1 2 3. + 0 + 9.9063739180564880e-003 + -1.0738559812307358e-001 + 5.0298547744750977e-001 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 8.3582093939185143e-003 + 1.5422430634498596e-001 + -3.5790690779685974e-001 + <_> + + <_> + + + + <_> + 7 2 4 3 -1. + <_> + 7 3 4 1 3. + 0 + -3.2779511064291000e-002 + 6.4060282707214355e-001 + -1.4030179940164089e-002 + <_> + + <_> + + + + <_> + 6 1 6 3 -1. + <_> + 6 2 6 1 3. + 0 + -2.0835140720009804e-002 + 5.4712289571762085e-001 + -7.4879899621009827e-002 + <_> + + <_> + + + + <_> + 8 1 2 1 -1. + <_> + 8 1 1 1 2. + 0 + -5.1647479267558083e-005 + 1.8039730191230774e-001 + -2.2248619794845581e-001 + <_> + + <_> + + + + <_> + 8 3 4 3 -1. + <_> + 7 4 4 1 3. + 1 + -3.1204670667648315e-002 + 2.9656040668487549e-001 + -1.2957809865474701e-001 + <_> + + <_> + + + + <_> + 12 5 3 2 -1. + <_> + 13 6 1 2 3. + 1 + -1.7422020435333252e-002 + 3.9275988936424255e-001 + -6.5897516906261444e-002 + <_> + + <_> + + + + <_> + 1 5 6 3 -1. + <_> + 3 5 2 3 3. + 0 + -1.2536820024251938e-002 + 2.0158059895038605e-001 + -1.9292819499969482e-001 + <_> + + <_> + + + + <_> + 12 9 2 1 -1. + <_> + 12 9 1 1 2. + 0 + -4.8037480155471712e-005 + 1.2082680314779282e-001 + -1.4217889308929443e-001 + <_> + + <_> + + + + <_> + 4 0 9 12 -1. + <_> + 4 6 9 6 2. + 0 + 6.5716922283172607e-002 + -3.0140811204910278e-001 + 1.0884209722280502e-001 + <_> + + <_> + + + + <_> + 13 10 2 2 -1. + <_> + 14 10 1 1 2. + <_> + 13 11 1 1 2. + 0 + 3.8559301174245775e-005 + -1.1485870182514191e-001 + 1.2233419716358185e-001 + <_> + + <_> + + + + <_> + 3 10 2 2 -1. + <_> + 3 10 1 1 2. + <_> + 4 11 1 1 2. + 0 + 4.6443768951576203e-005 + -1.6948090493679047e-001 + 1.8788060545921326e-001 + <_> + + <_> + + + + <_> + 13 10 2 2 -1. + <_> + 14 10 1 1 2. + <_> + 13 11 1 1 2. + 0 + -4.1368581150891259e-005 + 2.4010670185089111e-001 + -1.4868290722370148e-001 + <_> + + <_> + + + + <_> + 5 6 3 1 -1. + <_> + 6 6 1 1 3. + 0 + -5.4830620065331459e-003 + 6.1856138706207275e-001 + -4.8334259539842606e-002 + <_> + + <_> + + + + <_> + 11 6 3 2 -1. + <_> + 12 6 1 2 3. + 0 + 1.7779540270566940e-002 + -2.6616660878062248e-002 + 4.9245241284370422e-001 + <_> + + <_> + + + + <_> + 0 10 4 2 -1. + <_> + 0 11 4 1 2. + 0 + -4.0962300263345242e-003 + -5.4207402467727661e-001 + 5.9048470109701157e-002 + <_> + + <_> + + + + <_> + 11 6 3 2 -1. + <_> + 12 6 1 2 3. + 0 + -1.6451759263873100e-002 + 7.6350831985473633e-001 + -2.5473199784755707e-002 + <_> + + <_> + + + + <_> + 1 11 16 1 -1. + <_> + 9 11 8 1 2. + 0 + -2.2241640836000443e-002 + -3.6452740430831909e-001 + 8.6116299033164978e-002 + <_> + + <_> + + + + <_> + 11 10 2 1 -1. + <_> + 11 10 1 1 2. + 0 + -2.7459589764475822e-003 + -2.4589340388774872e-001 + 3.3040750771760941e-002 + <_> + + <_> + + + + <_> + 5 10 2 1 -1. + <_> + 6 10 1 1 2. + 0 + -4.0295468352269381e-005 + 2.0092859864234924e-001 + -2.0132540166378021e-001 + <_> + + <_> + + + + <_> + 11 6 3 2 -1. + <_> + 12 6 1 2 3. + 0 + -4.5473738573491573e-003 + 2.1073690056800842e-001 + -4.5514870434999466e-002 + <_> + + <_> + + + + <_> + 4 6 3 2 -1. + <_> + 5 6 1 2 3. + 0 + -3.7957709282636642e-003 + 3.0283540487289429e-001 + -9.5874093472957611e-002 + <_> + + <_> + + + + <_> + 11 4 1 4 -1. + <_> + 10 5 1 2 2. + 1 + -6.6188150085508823e-003 + 7.9740211367607117e-002 + -1.6595689952373505e-001 + <_> + + <_> + + + + <_> + 0 0 2 2 -1. + <_> + 0 0 1 1 2. + <_> + 1 1 1 1 2. + 0 + -4.5857861550757661e-005 + 1.7260129749774933e-001 + -1.6178980469703674e-001 + <_> + + <_> + + + + <_> + 16 3 2 2 -1. + <_> + 17 3 1 1 2. + <_> + 16 4 1 1 2. + 0 + -4.8166970373131335e-005 + 1.4548319578170776e-001 + -1.6439950466156006e-001 + <_> + + <_> + + + + <_> + 8 7 2 3 -1. + <_> + 8 7 1 3 2. + 1 + -5.2052710088901222e-005 + 8.3391591906547546e-002 + -3.4013390541076660e-001 + <_> + + <_> + + + + <_> + 8 1 2 1 -1. + <_> + 8 1 1 1 2. + 0 + 4.5986729674041271e-005 + -1.2061770260334015e-001 + 2.4329949915409088e-001 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + -4.6646920964121819e-005 + 1.0119310021400452e-001 + -3.0405890941619873e-001 + <_> + + <_> + + + + <_> + 16 3 2 2 -1. + <_> + 17 3 1 1 2. + <_> + 16 4 1 1 2. + 0 + 4.7388079110532999e-005 + -1.1716579645872116e-001 + 2.1742169559001923e-001 + <_> + + <_> + + + + <_> + 0 3 2 2 -1. + <_> + 0 3 1 1 2. + <_> + 1 4 1 1 2. + 0 + -4.6242319513112307e-005 + 1.8022020161151886e-001 + -1.5529049932956696e-001 + -1.6128469705581665e+000 + 13 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.6110079362988472e-002 + -4.1071599721908569e-001 + 7.7589380741119385e-001 + <_> + + <_> + + + + <_> + 7 3 4 3 -1. + <_> + 7 4 4 1 3. + 0 + -2.5305269286036491e-002 + 6.6618782281875610e-001 + -1.5485580265522003e-001 + <_> + + <_> + + + + <_> + 6 6 6 2 -1. + <_> + 8 6 2 2 3. + 0 + -2.5699760764837265e-002 + 3.3241620659828186e-001 + -2.3156909644603729e-001 + <_> + + <_> + + + + <_> + 9 6 3 1 -1. + <_> + 10 6 1 1 3. + 0 + -5.7776989415287971e-003 + 4.1196781396865845e-001 + -1.3117870688438416e-001 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + 8.1719085574150085e-003 + -6.9755800068378448e-002 + 6.4852428436279297e-001 + <_> + + <_> + + + + <_> + 5 4 8 3 -1. + <_> + 5 5 8 1 3. + 0 + -6.5088421106338501e-002 + 6.1390417814254761e-001 + -5.9815850108861923e-002 + <_> + + <_> + + + + <_> + 1 0 9 10 -1. + <_> + 4 0 3 10 3. + 0 + 1.0464339703321457e-001 + 9.0163193643093109e-002 + -4.5573940873146057e-001 + <_> + + <_> + + + + <_> + 6 2 6 3 -1. + <_> + 6 3 6 1 3. + 0 + -3.1685851514339447e-002 + 5.5533021688461304e-001 + -6.2855109572410583e-002 + <_> + + <_> + + + + <_> + 5 6 2 1 -1. + <_> + 6 6 1 1 2. + 0 + -8.0294553190469742e-003 + 6.7273747920989990e-001 + -4.3747950345277786e-002 + <_> + + <_> + + + + <_> + 12 0 2 1 -1. + <_> + 12 0 1 1 2. + 0 + 2.4209800176322460e-003 + 4.0785990655422211e-002 + -3.1722348928451538e-001 + <_> + + <_> + + + + <_> + 3 5 4 3 -1. + <_> + 4 5 2 3 2. + 0 + -8.1889061257243156e-003 + 2.6846039295196533e-001 + -1.2580759823322296e-001 + <_> + + <_> + + + + <_> + 8 0 4 3 -1. + <_> + 9 0 2 3 2. + 0 + 9.3489009886980057e-003 + 5.0966899842023849e-002 + -3.9423060417175293e-001 + <_> + + <_> + + + + <_> + 6 0 4 3 -1. + <_> + 7 0 2 3 2. + 0 + 6.9262371398508549e-003 + 6.0307100415229797e-002 + -5.6436121463775635e-001 + <_> + + <_> + + + + <_> + 5 7 8 3 -1. + <_> + 5 8 8 1 3. + 0 + 2.3801159113645554e-002 + -9.9566370248794556e-002 + 3.3963540196418762e-001 + <_> + + <_> + + + + <_> + 1 0 2 1 -1. + <_> + 2 0 1 1 2. + 0 + -4.1956758650485426e-005 + 9.3987770378589630e-002 + -3.0422720313072205e-001 + <_> + + <_> + + + + <_> + 8 4 10 6 -1. + <_> + 13 4 5 3 2. + <_> + 8 7 5 3 2. + 0 + 1.3572919368743896e-001 + 2.9968850314617157e-002 + -4.2673060297966003e-001 + <_> + + <_> + + + + <_> + 4 5 6 2 -1. + <_> + 7 5 3 2 2. + 0 + -2.1524201147258282e-003 + 8.3092503249645233e-002 + -3.2027548551559448e-001 + <_> + + <_> + + + + <_> + 12 7 1 4 -1. + <_> + 12 9 1 2 2. + 0 + -2.2321950644254684e-002 + 3.8670408725738525e-001 + -2.8302310965955257e-003 + <_> + + <_> + + + + <_> + 0 10 2 2 -1. + <_> + 0 11 2 1 2. + 0 + -3.3701520878821611e-003 + -5.4070180654525757e-001 + 4.8329830169677734e-002 + <_> + + <_> + + + + <_> + 17 8 1 4 -1. + <_> + 17 9 1 2 2. + 0 + -2.8812189120799303e-003 + -4.1134339570999146e-001 + 5.0348810851573944e-002 + <_> + + <_> + + + + <_> + 4 1 10 3 -1. + <_> + 4 2 10 1 3. + 0 + 3.3026181161403656e-002 + -9.1724671423435211e-002 + 2.7849179506301880e-001 + <_> + + <_> + + + + <_> + 5 0 8 4 -1. + <_> + 5 1 8 2 2. + 0 + -4.8657391220331192e-002 + 5.2620977163314819e-001 + -4.8676058650016785e-002 + <_> + + <_> + + + + <_> + 0 8 1 4 -1. + <_> + 0 9 1 2 2. + 0 + -3.7647879216820002e-003 + -4.5844191312789917e-001 + 6.4317077398300171e-002 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 6 1 6 1 3. + 0 + 2.0504679530858994e-002 + -9.4328112900257111e-002 + 2.9794049263000488e-001 + <_> + + <_> + + + + <_> + 4 0 2 1 -1. + <_> + 5 0 1 1 2. + 0 + -3.6554280086420476e-005 + 1.2746079266071320e-001 + -1.9186210632324219e-001 + <_> + + <_> + + + + <_> + 13 9 1 2 -1. + <_> + 13 9 1 1 2. + 1 + 9.4470614567399025e-003 + 9.2077916488051414e-003 + -5.2767378091812134e-001 + <_> + + <_> + + + + <_> + 5 9 2 1 -1. + <_> + 5 9 1 1 2. + 1 + 1.6520130448043346e-003 + 5.3146030753850937e-002 + -4.0580609440803528e-001 + <_> + + <_> + + + + <_> + 15 6 3 3 -1. + <_> + 16 7 1 3 3. + 1 + -1.9722340628504753e-002 + 2.8976440429687500e-001 + -5.8757949620485306e-002 + <_> + + <_> + + + + <_> + 3 6 3 3 -1. + <_> + 2 7 3 1 3. + 1 + 1.5641599893569946e-002 + -8.5858047008514404e-002 + 2.7374029159545898e-001 + <_> + + <_> + + + + <_> + 15 0 3 2 -1. + <_> + 16 1 1 2 3. + 1 + -1.2213470414280891e-002 + -1.8302009999752045e-001 + 2.5141900405287743e-002 + <_> + + <_> + + + + <_> + 3 0 2 3 -1. + <_> + 2 1 2 1 3. + 1 + 5.5025829933583736e-003 + 7.0544131100177765e-002 + -3.0967020988464355e-001 + <_> + + <_> + + + + <_> + 10 5 2 4 -1. + <_> + 11 5 1 2 2. + <_> + 10 7 1 2 2. + 0 + -7.9423412680625916e-003 + 3.8959950208663940e-001 + -4.3679900467395782e-002 + <_> + + <_> + + + + <_> + 6 5 2 4 -1. + <_> + 6 5 1 2 2. + <_> + 7 7 1 2 2. + 0 + 8.4905028343200684e-003 + -7.2534352540969849e-002 + 3.3101171255111694e-001 + <_> + + <_> + + + + <_> + 10 6 4 2 -1. + <_> + 11 6 2 2 2. + 0 + -1.4299919828772545e-002 + 5.9872722625732422e-001 + -2.7945769950747490e-002 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 8 9 2 3 2. + 0 + 6.7005599848926067e-003 + 4.8855118453502655e-002 + -5.2919381856918335e-001 + <_> + + <_> + + + + <_> + 15 6 3 3 -1. + <_> + 16 6 1 3 3. + 0 + 3.9664511568844318e-003 + -4.3123081326484680e-002 + 1.0984309762716293e-001 + <_> + + <_> + + + + <_> + 0 6 3 3 -1. + <_> + 1 6 1 3 3. + 0 + -7.5540919788181782e-003 + 3.0421760678291321e-001 + -7.2253189980983734e-002 + <_> + + <_> + + + + <_> + 8 11 3 1 -1. + <_> + 9 11 1 1 3. + 0 + -3.7034100387245417e-003 + -5.4518002271652222e-001 + 3.5437230020761490e-002 + <_> + + <_> + + + + <_> + 7 11 3 1 -1. + <_> + 8 11 1 1 3. + 0 + -2.5188990402966738e-003 + -4.5737591385841370e-001 + 5.5983148515224457e-002 + <_> + + <_> + + + + <_> + 8 4 10 6 -1. + <_> + 13 4 5 3 2. + <_> + 8 7 5 3 2. + 0 + 2.0579920709133148e-001 + -2.7724468964152038e-004 + -6.6996318101882935e-001 + <_> + + <_> + + + + <_> + 4 8 10 3 -1. + <_> + 4 9 10 1 3. + 0 + 2.9303770512342453e-002 + -5.6496240198612213e-002 + 3.5997670888900757e-001 + <_> + + <_> + + + + <_> + 8 4 10 6 -1. + <_> + 13 4 5 3 2. + <_> + 8 7 5 3 2. + 0 + 6.9648310542106628e-002 + 3.1737551093101501e-002 + -6.8570420145988464e-002 + <_> + + <_> + + + + <_> + 1 11 16 1 -1. + <_> + 9 11 8 1 2. + 0 + -4.2670730501413345e-002 + -5.1828289031982422e-001 + 3.7313610315322876e-002 + <_> + + <_> + + + + <_> + 14 5 4 4 -1. + <_> + 14 7 4 2 2. + 0 + 5.3184129297733307e-002 + -3.8423359394073486e-002 + 1.3666149973869324e-001 + <_> + + <_> + + + + <_> + 0 2 18 10 -1. + <_> + 0 2 9 5 2. + <_> + 9 7 9 5 2. + 0 + 3.1404110789299011e-001 + 3.7239000201225281e-002 + -6.1689531803131104e-001 + <_> + + <_> + + + + <_> + 3 5 12 3 -1. + <_> + 6 5 6 3 2. + 0 + -1.1121670156717300e-001 + -3.4866338968276978e-001 + 5.0600431859493256e-002 + <_> + + <_> + + + + <_> + 9 3 4 1 -1. + <_> + 10 4 2 1 2. + 1 + -1.2414909899234772e-002 + 1.6056859493255615e-001 + -1.3499259948730469e-001 + <_> + + <_> + + + + <_> + 10 4 3 4 -1. + <_> + 11 4 1 4 3. + 0 + -1.0976280085742474e-002 + 4.0659919381141663e-001 + -7.1035951375961304e-002 + <_> + + <_> + + + + <_> + 5 4 3 4 -1. + <_> + 6 4 1 4 3. + 0 + -1.0068650357425213e-002 + 3.9899739623069763e-001 + -4.7854758799076080e-002 + <_> + + <_> + + + + <_> + 12 10 2 1 -1. + <_> + 12 10 1 1 2. + 0 + -4.4595100916922092e-005 + 1.2453170120716095e-001 + -1.5943150222301483e-001 + <_> + + <_> + + + + <_> + 0 3 2 3 -1. + <_> + 0 4 2 1 3. + 0 + 5.2231438457965851e-003 + 5.1684871315956116e-002 + -3.7264791131019592e-001 + <_> + + <_> + + + + <_> + 9 0 9 6 -1. + <_> + 9 3 9 3 2. + 0 + -3.1584289669990540e-001 + -5.6410568952560425e-001 + 1.6620539128780365e-002 + <_> + + <_> + + + + <_> + 8 8 2 2 -1. + <_> + 8 8 1 2 2. + 1 + -4.9251379095949233e-005 + 6.4569346606731415e-002 + -2.6977449655532837e-001 + <_> + + <_> + + + + <_> + 11 8 2 2 -1. + <_> + 11 8 2 1 2. + 1 + -1.5871439129114151e-002 + -1.0536020249128342e-001 + 2.2641019895672798e-002 + <_> + + <_> + + + + <_> + 4 0 4 3 -1. + <_> + 4 1 4 1 3. + 0 + -1.4802659861743450e-002 + 3.0771070718765259e-001 + -5.6442748755216599e-002 + <_> + + <_> + + + + <_> + 11 8 2 2 -1. + <_> + 11 8 2 1 2. + 1 + 6.2432001868728548e-005 + -1.3522149994969368e-002 + 6.4676657319068909e-002 + <_> + + <_> + + + + <_> + 0 3 1 2 -1. + <_> + 0 4 1 1 2. + 0 + -3.6458349786698818e-003 + -3.7946069240570068e-001 + 4.3726790696382523e-002 + <_> + + <_> + + + + <_> + 12 2 4 6 -1. + <_> + 10 4 4 2 3. + 1 + -1.2038329988718033e-001 + 8.3884507417678833e-002 + -5.7846531271934509e-002 + <_> + + <_> + + + + <_> + 6 2 6 4 -1. + <_> + 8 4 2 4 3. + 1 + -1.5285080671310425e-001 + -4.1195228695869446e-001 + 4.1427899152040482e-002 + <_> + + <_> + + + + <_> + 9 4 3 4 -1. + <_> + 10 4 1 4 3. + 0 + -2.4037640541791916e-002 + 3.6811178922653198e-001 + -2.8063010424375534e-002 + <_> + + <_> + + + + <_> + 0 9 4 2 -1. + <_> + 0 10 4 1 2. + 0 + -5.0715710967779160e-003 + -4.3527451157569885e-001 + 3.7839580327272415e-002 + <_> + + <_> + + + + <_> + 14 11 2 1 -1. + <_> + 14 11 1 1 2. + 0 + 2.2647699806839228e-003 + 3.3513750880956650e-002 + -3.1196358799934387e-001 + <_> + + <_> + + + + <_> + 2 11 2 1 -1. + <_> + 3 11 1 1 2. + 0 + 2.8620659577427432e-005 + -1.2641629576683044e-001 + 1.4573280513286591e-001 + <_> + + <_> + + + + <_> + 14 3 4 6 -1. + <_> + 14 5 4 2 3. + 0 + -1.5032389760017395e-001 + -5.1674288511276245e-001 + 6.3420650549232960e-003 + <_> + + <_> + + + + <_> + 0 3 4 6 -1. + <_> + 0 5 4 2 3. + 0 + -1.0515840258449316e-003 + 7.3436759412288666e-002 + -2.2326730191707611e-001 + <_> + + <_> + + + + <_> + 9 5 3 3 -1. + <_> + 10 5 1 3 3. + 0 + -6.2594460323452950e-003 + 1.0833080112934113e-001 + -4.8997879028320313e-002 + <_> + + <_> + + + + <_> + 0 0 14 2 -1. + <_> + 0 0 7 1 2. + <_> + 7 1 7 1 2. + 0 + -1.9374769181013107e-002 + 2.9532751441001892e-001 + -5.0250150263309479e-002 + <_> + + <_> + + + + <_> + 9 2 2 1 -1. + <_> + 9 2 1 1 2. + 0 + -4.1956758650485426e-005 + 8.0195806920528412e-002 + -1.0686949640512466e-001 + <_> + + <_> + + + + <_> + 7 5 3 1 -1. + <_> + 8 6 1 1 3. + 1 + -3.4468329977244139e-003 + 1.2324280291795731e-001 + -1.1800339818000793e-001 + <_> + + <_> + + + + <_> + 10 6 4 2 -1. + <_> + 11 6 2 2 2. + 0 + 2.0574549213051796e-002 + -2.3928789421916008e-002 + 2.7955460548400879e-001 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.6083529219031334e-002 + 6.2995746731758118e-002 + -3.2501700520515442e-001 + <_> + + <_> + + + + <_> + 3 0 12 9 -1. + <_> + 6 0 6 9 2. + 0 + -1.5888260304927826e-001 + -1.9509589672088623e-001 + 8.4130212664604187e-002 + <_> + + <_> + + + + <_> + 6 5 3 3 -1. + <_> + 7 5 1 3 3. + 0 + -1.0786239989101887e-002 + 3.0075341463088989e-001 + -5.3811751306056976e-002 + <_> + + <_> + + + + <_> + 16 7 2 5 -1. + <_> + 16 7 1 5 2. + 0 + -5.0971349992323667e-005 + 1.0555840283632278e-001 + -1.8500010669231415e-001 + <_> + + <_> + + + + <_> + 5 1 3 4 -1. + <_> + 5 1 3 2 2. + 1 + 2.0255280658602715e-002 + 5.4217409342527390e-002 + -2.6162931323051453e-001 + <_> + + <_> + + + + <_> + 11 2 1 4 -1. + <_> + 11 2 1 2 2. + 1 + 4.5595720410346985e-002 + -2.1169850602746010e-002 + 1.7655989527702332e-001 + <_> + + <_> + + + + <_> + 7 2 4 1 -1. + <_> + 7 2 2 1 2. + 1 + -1.4993960503488779e-003 + -2.4702130258083344e-001 + 6.4111799001693726e-002 + <_> + + <_> + + + + <_> + 4 1 10 4 -1. + <_> + 4 2 10 2 2. + 0 + -5.1197629421949387e-002 + 3.8098621368408203e-001 + -4.3534200638532639e-002 + <_> + + <_> + + + + <_> + 0 7 2 5 -1. + <_> + 1 7 1 5 2. + 0 + -1.2308140285313129e-002 + 2.2999510169029236e-001 + -6.8426601588726044e-002 + <_> + + <_> + + + + <_> + 12 8 2 2 -1. + <_> + 12 8 2 1 2. + 1 + 2.3125670850276947e-002 + 7.3915729299187660e-003 + -8.1511551141738892e-001 + <_> + + <_> + + + + <_> + 6 8 2 2 -1. + <_> + 6 8 1 2 2. + 1 + -1.0254840366542339e-002 + -2.0483459532260895e-001 + 7.4748978018760681e-002 + <_> + + <_> + + + + <_> + 15 6 3 5 -1. + <_> + 16 6 1 5 3. + 0 + 1.6489239409565926e-002 + -1.0638999752700329e-002 + 1.5904539823532104e-001 + <_> + + <_> + + + + <_> + 1 10 2 2 -1. + <_> + 1 10 1 1 2. + <_> + 2 11 1 1 2. + 0 + 4.6443768951576203e-005 + -1.2445150315761566e-001 + 1.2339290231466293e-001 + <_> + + <_> + + + + <_> + 11 5 2 2 -1. + <_> + 12 5 1 1 2. + <_> + 11 6 1 1 2. + 0 + -3.6345820408314466e-003 + 3.3572021126747131e-001 + -5.3786080330610275e-002 + <_> + + <_> + + + + <_> + 5 11 4 1 -1. + <_> + 6 11 2 1 2. + 0 + -4.2814682237803936e-003 + -4.0974819660186768e-001 + 3.8746099919080734e-002 + <_> + + <_> + + + + <_> + 11 5 2 2 -1. + <_> + 12 5 1 1 2. + <_> + 11 6 1 1 2. + 0 + 2.5832538958638906e-003 + -7.4852287769317627e-002 + 3.2739511132240295e-001 + <_> + + <_> + + + + <_> + 0 3 2 1 -1. + <_> + 1 3 1 1 2. + 0 + -1.4718719467055053e-004 + 6.8306617438793182e-002 + -2.0809960365295410e-001 + -1.6440550088882446e+000 + 14 + -1 + <_> + + + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.9498139619827271e-002 + -3.3759370446205139e-001 + 6.7766612768173218e-001 + <_> + + <_> + + + + <_> + 7 3 4 3 -1. + <_> + 7 4 4 1 3. + 0 + -3.4336470067501068e-002 + 6.9824808835983276e-001 + -1.3596299290657043e-001 + <_> + + <_> + + + + <_> + 4 0 3 2 -1. + <_> + 4 0 3 1 2. + 1 + 9.7922142595052719e-003 + 8.3390571177005768e-002 + -4.1553869843482971e-001 + <_> + + <_> + + + + <_> + 10 2 1 6 -1. + <_> + 8 4 1 2 3. + 1 + -6.3095659017562866e-002 + 1.7525289952754974e-001 + -3.5272590816020966e-002 + <_> + + <_> + + + + <_> + 8 2 6 1 -1. + <_> + 10 4 2 1 3. + 1 + -3.7893280386924744e-002 + 1.7454449832439423e-001 + -2.0477719604969025e-001 + <_> + + <_> + + + + <_> + 7 0 6 4 -1. + <_> + 9 0 2 4 3. + 0 + 2.9307829216122627e-002 + 4.0337048470973969e-002 + -4.0458971261978149e-001 + <_> + + <_> + + + + <_> + 4 0 6 4 -1. + <_> + 6 0 2 4 3. + 0 + 3.3006248995661736e-003 + 1.0832270234823227e-001 + -3.8293439149856567e-001 + <_> + + <_> + + + + <_> + 9 6 3 1 -1. + <_> + 10 6 1 1 3. + 0 + -6.9221840240061283e-003 + 3.0836719274520874e-001 + -5.3221769630908966e-002 + <_> + + <_> + + + + <_> + 4 0 3 4 -1. + <_> + 3 1 3 2 2. + 1 + 1.2095970101654530e-002 + 6.8258158862590790e-002 + -4.5494788885116577e-001 + <_> + + <_> + + + + <_> + 9 6 3 1 -1. + <_> + 10 6 1 1 3. + 0 + 7.8306095674633980e-003 + -3.9104040712118149e-002 + 5.2432292699813843e-001 + <_> + + <_> + + + + <_> + 6 6 3 1 -1. + <_> + 7 6 1 1 3. + 0 + 1.1000329628586769e-002 + -4.8125259578227997e-002 + 5.9042930603027344e-001 + <_> + + <_> + + + + <_> + 9 9 4 3 -1. + <_> + 10 9 2 3 2. + 0 + 5.3003318607807159e-003 + 7.7072180807590485e-002 + -4.6984028816223145e-001 + <_> + + <_> + + + + <_> + 6 2 6 3 -1. + <_> + 6 3 6 1 3. + 0 + -4.0341410785913467e-002 + 5.3887742757797241e-001 + -4.8817768692970276e-002 + <_> + + <_> + + + + <_> + 16 1 2 1 -1. + <_> + 16 1 1 1 2. + 0 + 4.5519209379563108e-005 + -4.8769790679216385e-002 + 6.1085790395736694e-002 + <_> + + <_> + + + + <_> + 0 1 2 1 -1. + <_> + 1 1 1 1 2. + 0 + -3.5766988730756566e-005 + 8.8775523006916046e-002 + -3.1009709835052490e-001 + <_> + + <_> + + + + <_> + 9 3 3 4 -1. + <_> + 10 4 1 4 3. + 1 + -1.2121529877185822e-001 + -8.7199020385742188e-001 + 1.9037359743379056e-004 + <_> + + <_> + + + + <_> + 9 3 4 3 -1. + <_> + 8 4 4 1 3. + 1 + -2.0810520276427269e-002 + 1.2869510054588318e-001 + -2.2694960236549377e-001 + <_> + + <_> + + + + <_> + 9 9 4 3 -1. + <_> + 10 9 2 3 2. + 0 + -7.5748898088932037e-003 + -5.6044650077819824e-001 + 6.8818382918834686e-002 + <_> + + <_> + + + + <_> + 2 0 6 5 -1. + <_> + 4 0 2 5 3. + 0 + 2.2772360593080521e-002 + 4.9116428941488266e-002 + -4.5276260375976563e-001 + <_> + + <_> + + + + <_> + 15 3 3 6 -1. + <_> + 16 4 1 6 3. + 1 + -3.1300768256187439e-002 + 2.4237060546875000e-001 + -6.5867289900779724e-002 + <_> + + <_> + + + + <_> + 6 0 3 4 -1. + <_> + 5 1 3 2 2. + 1 + -3.4844119101762772e-002 + -4.4477778673171997e-001 + 5.1829639822244644e-002 + <_> + + <_> + + + + <_> + 17 0 1 2 -1. + <_> + 17 1 1 1 2. + 0 + 3.5052769817411900e-005 + -4.2088508605957031e-002 + 4.7609008848667145e-002 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + 1.5844260342419147e-003 + 5.6480269879102707e-002 + -4.1779080033302307e-001 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 6 1 6 1 3. + 0 + 2.6414310559630394e-002 + -7.2216093540191650e-002 + 3.0886408686637878e-001 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 6 1 6 1 3. + 0 + -2.4469729512929916e-002 + 3.4676471352577209e-001 + -6.7458316683769226e-002 + <_> + + <_> + + + + <_> + 7 0 4 3 -1. + <_> + 8 0 2 3 2. + 0 + 5.6515377946197987e-003 + 6.4198330044746399e-002 + -3.5227119922637939e-001 + <_> + + <_> + + + + <_> + 0 8 8 4 -1. + <_> + 0 9 8 2 2. + 0 + 1.9363719969987869e-002 + 5.6742910295724869e-002 + -3.4612348675727844e-001 + <_> + + <_> + + + + <_> + 11 6 3 1 -1. + <_> + 12 7 1 1 3. + 1 + 2.0357580855488777e-002 + -4.8724349588155746e-002 + 3.8238760828971863e-001 + <_> + + <_> + + + + <_> + 7 6 1 3 -1. + <_> + 6 7 1 1 3. + 1 + -5.1647052168846130e-003 + 2.1022629737854004e-001 + -1.0693299770355225e-001 + <_> + + <_> + + + + <_> + 6 5 7 6 -1. + <_> + 6 8 7 3 2. + 0 + 1.4845539815723896e-002 + -6.1529231071472168e-001 + 3.5300489515066147e-002 + <_> + + <_> + + + + <_> + 6 9 2 1 -1. + <_> + 6 9 1 1 2. + 1 + -8.6702024564146996e-003 + -4.0551638603210449e-001 + 4.2726211249828339e-002 + <_> + + <_> + + + + <_> + 15 2 3 1 -1. + <_> + 16 3 1 1 3. + 1 + -1.4502460137009621e-002 + -4.2973139882087708e-001 + 2.6243820786476135e-002 + <_> + + <_> + + + + <_> + 3 2 1 3 -1. + <_> + 2 3 1 1 3. + 1 + 3.6778231151401997e-003 + 6.6653557121753693e-002 + -2.8710830211639404e-001 + <_> + + <_> + + + + <_> + 16 0 2 10 -1. + <_> + 16 0 2 5 2. + 1 + 1.3134600222110748e-001 + 1.4174330048263073e-002 + -1.5358589589595795e-001 + <_> + + <_> + + + + <_> + 2 0 10 2 -1. + <_> + 2 0 5 2 2. + 1 + -1.3666020333766937e-001 + -4.2397919297218323e-001 + 5.0294190645217896e-002 + <_> + + <_> + + + + <_> + 12 9 1 2 -1. + <_> + 12 9 1 1 2. + 1 + 7.2551309131085873e-003 + 8.2462644204497337e-003 + -3.2001951336860657e-001 + <_> + + <_> + + + + <_> + 5 5 3 2 -1. + <_> + 6 5 1 2 3. + 0 + -1.3511019758880138e-002 + 5.0302737951278687e-001 + -3.4302528947591782e-002 + <_> + + <_> + + + + <_> + 11 6 2 2 -1. + <_> + 11 6 1 2 2. + 0 + -1.3929050415754318e-002 + 4.3465730547904968e-001 + -4.2992260307073593e-002 + <_> + + <_> + + + + <_> + 2 4 12 3 -1. + <_> + 5 4 6 3 2. + 0 + -1.2819659709930420e-001 + -4.8288840055465698e-001 + 4.2751569300889969e-002 + <_> + + <_> + + + + <_> + 12 9 1 2 -1. + <_> + 12 9 1 1 2. + 1 + -1.6732519492506981e-002 + -4.3209370970726013e-001 + 3.1982630025595427e-003 + <_> + + <_> + + + + <_> + 6 9 2 1 -1. + <_> + 6 9 1 1 2. + 1 + 2.0149480551481247e-003 + 4.4975060969591141e-002 + -3.9710980653762817e-001 + <_> + + <_> + + + + <_> + 4 0 14 2 -1. + <_> + 11 0 7 1 2. + <_> + 4 1 7 1 2. + 0 + 8.7468000128865242e-003 + -4.2383570224046707e-002 + 9.5026336610317230e-002 + <_> + + <_> + + + + <_> + 0 0 14 2 -1. + <_> + 0 0 7 1 2. + <_> + 7 1 7 1 2. + 0 + 2.3763459175825119e-002 + -7.2902612388134003e-002 + 2.4120329320430756e-001 + <_> + + <_> + + + + <_> + 12 0 6 4 -1. + <_> + 15 0 3 2 2. + <_> + 12 2 3 2 2. + 0 + -1.5337429940700531e-002 + 1.2962980568408966e-001 + -5.8821711689233780e-002 + <_> + + <_> + + + + <_> + 4 0 4 3 -1. + <_> + 5 0 2 3 2. + 0 + -1.1038820259273052e-002 + -3.9287769794464111e-001 + 4.2961981147527695e-002 + <_> + + <_> + + + + <_> + 0 1 18 6 -1. + <_> + 0 4 18 3 2. + 0 + -4.6639290452003479e-001 + -5.7689660787582397e-001 + 2.6615839451551437e-002 + <_> + + <_> + + + + <_> + 3 4 12 2 -1. + <_> + 3 5 12 1 2. + 0 + -4.5179851353168488e-002 + 2.5730028748512268e-001 + -6.9095030426979065e-002 + <_> + + <_> + + + + <_> + 7 0 4 2 -1. + <_> + 8 0 2 2 2. + 0 + -6.9027519784867764e-003 + -4.2040190100669861e-001 + 4.1919898241758347e-002 + <_> + + <_> + + + + <_> + 1 2 12 3 -1. + <_> + 5 2 4 3 3. + 0 + -4.3509289622306824e-002 + 1.1465229839086533e-001 + -1.5128579735755920e-001 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + 4.9952589906752110e-003 + -2.7340779080986977e-002 + 2.4642029404640198e-001 + <_> + + <_> + + + + <_> + 0 3 1 4 -1. + <_> + 0 4 1 2 2. + 0 + 3.4534540027379990e-003 + 4.9953348934650421e-002 + -3.1069651246070862e-001 + <_> + + <_> + + + + <_> + 11 5 2 3 -1. + <_> + 11 5 1 3 2. + 0 + 1.2536670081317425e-002 + -1.5751969069242477e-002 + 2.3830600082874298e-001 + <_> + + <_> + + + + <_> + 5 5 2 6 -1. + <_> + 5 5 1 3 2. + <_> + 6 8 1 3 2. + 0 + -4.6358969993889332e-003 + 1.9324310123920441e-001 + -8.0604627728462219e-002 + <_> + + <_> + + + + <_> + 14 3 4 4 -1. + <_> + 14 4 4 2 2. + 0 + -4.2210690677165985e-002 + -3.9498311281204224e-001 + 1.5114610083401203e-002 + <_> + + <_> + + + + <_> + 5 4 3 2 -1. + <_> + 6 5 1 2 3. + 1 + 1.7369300127029419e-002 + -4.9444381147623062e-002 + 3.1055888533592224e-001 + <_> + + <_> + + + + <_> + 14 3 4 4 -1. + <_> + 14 4 4 2 2. + 0 + 2.8287919703871012e-003 + -3.8280609995126724e-002 + 8.8243007659912109e-002 + <_> + + <_> + + + + <_> + 0 3 4 4 -1. + <_> + 0 4 4 2 2. + 0 + -2.8313150629401207e-002 + -5.6536638736724854e-001 + 2.8949340805411339e-002 + <_> + + <_> + + + + <_> + 13 4 4 4 -1. + <_> + 13 4 4 2 2. + 1 + -2.2647269070148468e-002 + 5.6739021092653275e-002 + -1.2499769777059555e-001 + <_> + + <_> + + + + <_> + 6 10 4 2 -1. + <_> + 7 10 2 2 2. + 0 + -8.6736697703599930e-003 + -6.2506991624832153e-001 + 2.3742560297250748e-002 + <_> + + <_> + + + + <_> + 12 3 3 6 -1. + <_> + 13 3 1 6 3. + 0 + 2.8303779661655426e-002 + -2.7384009212255478e-002 + 3.2746648788452148e-001 + <_> + + <_> + + + + <_> + 3 3 3 6 -1. + <_> + 4 3 1 6 3. + 0 + -2.3424259852617979e-003 + 1.0716210305690765e-001 + -1.4106050133705139e-001 + <_> + + <_> + + + + <_> + 11 3 6 6 -1. + <_> + 13 5 2 2 9. + 0 + -1.0879710316658020e-001 + 1.4286050200462341e-001 + -1.0067559778690338e-001 + <_> + + <_> + + + + <_> + 1 3 6 6 -1. + <_> + 3 5 2 2 9. + 0 + -2.3998910188674927e-001 + -7.2609817981719971e-001 + 2.1252749487757683e-002 + <_> + + <_> + + + + <_> + 5 9 8 3 -1. + <_> + 5 10 8 1 3. + 0 + -1.0510819964110851e-002 + 2.0192959904670715e-001 + -7.1475587785243988e-002 + <_> + + <_> + + + + <_> + 0 8 2 2 -1. + <_> + 0 9 2 1 2. + 0 + -2.9618060216307640e-003 + -3.3826011419296265e-001 + 4.2012460529804230e-002 + <_> + + <_> + + + + <_> + 16 7 2 3 -1. + <_> + 16 7 1 3 2. + 1 + 6.5366048365831375e-003 + 2.1016959100961685e-002 + -3.3604449033737183e-001 + <_> + + <_> + + + + <_> + 2 7 3 2 -1. + <_> + 2 7 3 1 2. + 1 + 1.5359099954366684e-002 + -3.9575159549713135e-002 + 4.1411620378494263e-001 + <_> + + <_> + + + + <_> + 16 1 2 8 -1. + <_> + 17 1 1 4 2. + <_> + 16 5 1 4 2. + 0 + -5.9200981631875038e-003 + 1.0086079686880112e-001 + -6.0626558959484100e-002 + <_> + + <_> + + + + <_> + 0 1 2 8 -1. + <_> + 0 1 1 4 2. + <_> + 1 5 1 4 2. + 0 + -6.7361057735979557e-003 + 2.1334829926490784e-001 + -6.8882316350936890e-002 + <_> + + <_> + + + + <_> + 13 0 4 5 -1. + <_> + 14 0 2 5 2. + 0 + 6.4818300306797028e-003 + 6.3638597726821899e-002 + -1.9560219347476959e-001 + <_> + + <_> + + + + <_> + 1 0 4 5 -1. + <_> + 2 0 2 5 2. + 0 + 7.0354170165956020e-003 + 5.4166000336408615e-002 + -2.7890819311141968e-001 + <_> + + <_> + + + + <_> + 0 6 18 6 -1. + <_> + 9 6 9 3 2. + <_> + 0 9 9 3 2. + 0 + -1.7828759551048279e-001 + -3.7294510006904602e-001 + 3.6584310233592987e-002 + <_> + + <_> + + + + <_> + 0 5 7 6 -1. + <_> + 0 7 7 2 3. + 0 + -7.8773088753223419e-002 + -3.6562091112136841e-001 + 3.5259820520877838e-002 + <_> + + <_> + + + + <_> + 5 1 8 3 -1. + <_> + 5 2 8 1 3. + 0 + -3.4936249256134033e-002 + 3.4944280982017517e-001 + -4.2130310088396072e-002 + <_> + + <_> + + + + <_> + 3 1 11 3 -1. + <_> + 3 2 11 1 3. + 0 + 5.1275938749313354e-002 + -4.9116469919681549e-002 + 3.2908609509468079e-001 + <_> + + <_> + + + + <_> + 14 9 1 2 -1. + <_> + 14 9 1 1 2. + 1 + 8.3894617855548859e-003 + 1.0704530403017998e-002 + -4.0773379802703857e-001 + <_> + + <_> + + + + <_> + 4 9 2 1 -1. + <_> + 4 9 1 1 2. + 1 + 3.8752930704504251e-003 + 3.0874349176883698e-002 + -4.2981019616127014e-001 + <_> + + <_> + + + + <_> + 6 4 6 6 -1. + <_> + 8 4 2 6 3. + 0 + -2.8959279879927635e-002 + 9.8091676831245422e-002 + -1.3165040314197540e-001 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + 1.9355230033397675e-002 + 4.9088131636381149e-002 + -2.8296470642089844e-001 + <_> + + <_> + + + + <_> + 10 5 2 2 -1. + <_> + 11 5 1 1 2. + <_> + 10 6 1 1 2. + 0 + 2.4605318903923035e-003 + -4.4935218989849091e-002 + 2.1187350153923035e-001 + <_> + + <_> + + + + <_> + 6 5 2 2 -1. + <_> + 6 5 1 1 2. + <_> + 7 6 1 1 2. + 0 + -4.3705930002033710e-003 + 2.9035219550132751e-001 + -4.9733299762010574e-002 + <_> + + <_> + + + + <_> + 16 0 2 3 -1. + <_> + 16 1 2 1 3. + 0 + 8.8900327682495117e-003 + 2.7575170621275902e-002 + -2.5662681460380554e-001 + <_> + + <_> + + + + <_> + 0 0 2 3 -1. + <_> + 0 1 2 1 3. + 0 + -1.1210380122065544e-002 + -4.5494940876960754e-001 + 2.8127580881118774e-002 + <_> + + <_> + + + + <_> + 7 8 4 3 -1. + <_> + 7 9 4 1 3. + 0 + -1.0722589679062366e-002 + 2.5290718674659729e-001 + -5.1751948893070221e-002 + <_> + + <_> + + + + <_> + 9 2 6 2 -1. + <_> + 11 4 2 2 3. + 1 + -5.4759901016950607e-002 + 9.5928423106670380e-002 + -1.3142620027065277e-001 + <_> + + <_> + + + + <_> + 17 7 1 2 -1. + <_> + 17 8 1 1 2. + 0 + -1.4724220382049680e-003 + -3.2331600785255432e-001 + 3.6647390574216843e-002 + <_> + + <_> + + + + <_> + 7 0 2 3 -1. + <_> + 6 1 2 1 3. + 1 + 1.2189580127596855e-002 + 4.0190368890762329e-002 + -2.7344599366188049e-001 + <_> + + <_> + + + + <_> + 10 4 3 3 -1. + <_> + 11 5 1 3 3. + 1 + -9.5241647213697433e-003 + 2.8725100681185722e-002 + -5.1296249032020569e-002 + <_> + + <_> + + + + <_> + 8 4 3 3 -1. + <_> + 7 5 3 1 3. + 1 + -2.9368860647082329e-002 + 2.6298341155052185e-001 + -4.5174758881330490e-002 + <_> + + <_> + + + + <_> + 8 4 4 8 -1. + <_> + 8 6 4 4 2. + 0 + -1.6835989430546761e-002 + -7.7370226383209229e-002 + 8.7621882557868958e-002 + <_> + + <_> + + + + <_> + 9 5 6 1 -1. + <_> + 11 7 2 1 3. + 1 + 4.8315960913896561e-002 + 2.8099019080400467e-002 + -4.4539469480514526e-001 + <_> + + <_> + + + + <_> + 10 5 2 4 -1. + <_> + 11 5 1 2 2. + <_> + 10 7 1 2 2. + 0 + -1.7475409433245659e-002 + 3.2665181159973145e-001 + -7.0993858389556408e-003 + <_> + + <_> + + + + <_> + 6 5 2 4 -1. + <_> + 6 5 1 2 2. + <_> + 7 7 1 2 2. + 0 + 1.1099129915237427e-002 + -4.1876319795846939e-002 + 2.9490828514099121e-001 + <_> + + <_> + + + + <_> + 9 11 2 1 -1. + <_> + 9 11 1 1 2. + 0 + 2.3201128933578730e-003 + 2.8871670365333557e-002 + -3.9258959889411926e-001 + <_> + + <_> + + + + <_> + 6 11 6 1 -1. + <_> + 8 11 2 1 3. + 0 + -1.0768280364573002e-002 + -4.6519058942794800e-001 + 2.4949219077825546e-002 + <_> + + <_> + + + + <_> + 0 0 18 2 -1. + <_> + 6 0 6 2 3. + 0 + -7.2821088135242462e-002 + 1.3412840664386749e-001 + -9.3141697347164154e-002 + <_> + + <_> + + + + <_> + 2 0 10 1 -1. + <_> + 7 0 5 1 2. + 0 + 1.7050189897418022e-002 + -6.0329660773277283e-002 + 2.1904440224170685e-001 + <_> + + <_> + + + + <_> + 2 0 14 3 -1. + <_> + 2 0 7 3 2. + 0 + -1.8992629647254944e-001 + -5.1518648862838745e-001 + 2.1408829838037491e-002 + <_> + + <_> + + + + <_> + 3 5 4 3 -1. + <_> + 2 6 4 1 3. + 1 + -1.7060669139027596e-002 + 1.9582070410251617e-001 + -5.6239139288663864e-002 + <_> + + <_> + + + + <_> + 13 9 5 3 -1. + <_> + 13 10 5 1 3. + 0 + -1.4951139688491821e-002 + -3.6664319038391113e-001 + 2.4565050378441811e-002 + <_> + + <_> + + + + <_> + 0 6 4 3 -1. + <_> + 1 6 2 3 2. + 0 + 9.6735544502735138e-003 + -5.2386801689863205e-002 + 2.1741649508476257e-001 + <_> + + <_> + + + + <_> + 12 2 3 2 -1. + <_> + 13 3 1 2 3. + 1 + -1.7105480656027794e-002 + 7.0179320871829987e-002 + -2.0144950598478317e-002 + <_> + + <_> + + + + <_> + 6 2 2 3 -1. + <_> + 5 3 2 1 3. + 1 + 7.2467918507754803e-003 + 5.2429918199777603e-002 + -2.1052859723567963e-001 + <_> + + <_> + + + + <_> + 13 0 4 3 -1. + <_> + 12 1 4 1 3. + 1 + -3.1322270631790161e-002 + 3.1517499685287476e-001 + -4.4390950351953506e-002 + <_> + + <_> + + + + <_> + 3 5 10 6 -1. + <_> + 3 8 10 3 2. + 0 + -5.6205280125141144e-002 + -8.7249839305877686e-001 + 1.2938500382006168e-002 + <_> + + <_> + + + + <_> + 13 0 4 3 -1. + <_> + 12 1 4 1 3. + 1 + 3.2938860356807709e-002 + -4.3342970311641693e-002 + 2.4175900220870972e-001 + <_> + + <_> + + + + <_> + 4 3 10 4 -1. + <_> + 4 4 10 2 2. + 0 + 2.2955680266022682e-002 + -4.1244581341743469e-002 + 2.6797288656234741e-001 + <_> + + <_> + + + + <_> + 16 7 2 5 -1. + <_> + 16 7 1 5 2. + 0 + -4.0403520688414574e-003 + 1.1751759797334671e-001 + -8.8851161301136017e-002 + <_> + + <_> + + + + <_> + 6 3 2 4 -1. + <_> + 6 4 2 2 2. + 0 + -7.3366537690162659e-003 + 1.1126759648323059e-001 + -1.0500030219554901e-001 + <_> + + <_> + + + + <_> + 14 2 4 2 -1. + <_> + 14 2 2 2 2. + 0 + -3.7868309766054153e-002 + -3.6040359735488892e-001 + 4.1551068425178528e-003 + <_> + + <_> + + + + <_> + 0 2 4 2 -1. + <_> + 2 2 2 2 2. + 0 + -4.6715070493519306e-003 + 7.4014060199260712e-002 + -1.6199620068073273e-001 + <_> + + <_> + + + + <_> + 15 3 3 4 -1. + <_> + 16 4 1 4 3. + 1 + 4.7153029590845108e-002 + -1.6626819968223572e-002 + 3.0439698696136475e-001 + <_> + + <_> + + + + <_> + 3 3 4 3 -1. + <_> + 2 4 4 1 3. + 1 + -5.7896347716450691e-003 + 1.0218390077352524e-001 + -1.0985810309648514e-001 + <_> + + <_> + + + + <_> + 15 6 2 4 -1. + <_> + 15 6 1 4 2. + 1 + -5.8129139244556427e-002 + 2.4536029994487762e-001 + -1.0435160249471664e-002 + <_> + + <_> + + + + <_> + 3 6 4 2 -1. + <_> + 3 6 4 1 2. + 1 + 1.8205940723419189e-002 + -2.8424680233001709e-002 + 4.3812799453735352e-001 + <_> + + <_> + + + + <_> + 13 9 5 3 -1. + <_> + 13 10 5 1 3. + 0 + 1.1710450053215027e-002 + 4.2386539280414581e-002 + -2.1680490672588348e-001 + <_> + + <_> + + + + <_> + 0 9 5 3 -1. + <_> + 0 10 5 1 3. + 0 + -1.9464310258626938e-002 + -5.8676087856292725e-001 + 1.9311159849166870e-002 + <_> + + <_> + + + + <_> + 17 9 1 3 -1. + <_> + 17 10 1 1 3. + 0 + -2.5619969237595797e-003 + -2.4047499895095825e-001 + 2.5458659976720810e-002 + <_> + + <_> + + + + <_> + 3 0 4 3 -1. + <_> + 4 1 2 3 2. + 1 + 6.4271733164787292e-002 + -1.6712099313735962e-002 + 7.0072662830352783e-001 + <_> + + <_> + + + + <_> + 17 2 1 3 -1. + <_> + 17 3 1 1 3. + 0 + 3.4974149893969297e-003 + 4.0429990738630295e-002 + -1.9398880004882813e-001 + <_> + + <_> + + + + <_> + 6 11 4 1 -1. + <_> + 7 11 2 1 2. + 0 + -3.5052769817411900e-005 + 9.8691992461681366e-002 + -1.0426600277423859e-001 + <_> + + <_> + + + + <_> + 2 11 16 1 -1. + <_> + 2 11 8 1 2. + 0 + -6.2979538924992085e-003 + 4.3742060661315918e-002 + -4.0012229233980179e-002 + <_> + + <_> + + + + <_> + 0 11 16 1 -1. + <_> + 8 11 8 1 2. + 0 + 7.6886221766471863e-002 + 1.4384250156581402e-002 + -7.6758372783660889e-001 + <_> + + <_> + + + + <_> + 14 9 4 3 -1. + <_> + 14 9 2 3 2. + 0 + -6.2105238437652588e-002 + -7.5344699621200562e-001 + 2.2511880379170179e-003 + <_> + + <_> + + + + <_> + 0 9 4 3 -1. + <_> + 2 9 2 3 2. + 0 + 7.9736672341823578e-003 + -6.3740402460098267e-002 + 1.6708980500698090e-001 + <_> + + <_> + + + + <_> + 17 7 1 4 -1. + <_> + 17 8 1 2 2. + 0 + 4.7112111933529377e-003 + 2.9338790103793144e-002 + -1.9519449770450592e-001 + <_> + + <_> + + + + <_> + 0 7 1 4 -1. + <_> + 0 8 1 2 2. + 0 + -4.7494978643953800e-003 + -3.1782409548759460e-001 + 3.3812701702117920e-002 + <_> + + <_> + + + + <_> + 16 9 2 1 -1. + <_> + 16 9 1 1 2. + 1 + -2.3578179534524679e-003 + 3.7033520638942719e-002 + -5.1874168217182159e-002 + -1.6447039842605591e+000 + 15 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -4.7099228948354721e-002 + 5.1232028007507324e-001 + -4.0044599771499634e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -8.5581682622432709e-002 + 4.7390219569206238e-001 + -8.0851227045059204e-002 + <_> + + <_> + + + + <_> + 0 2 15 6 -1. + <_> + 0 4 15 2 3. + 0 + -1.5751540660858154e-001 + 3.0307799577713013e-001 + -2.9985809326171875e-001 + <_> + + <_> + + + + <_> + 12 6 2 4 -1. + <_> + 13 6 1 2 2. + <_> + 12 8 1 2 2. + 0 + -7.7447071671485901e-003 + 3.9014250040054321e-001 + -1.2618440389633179e-001 + <_> + + <_> + + + + <_> + 3 6 12 2 -1. + <_> + 7 6 4 2 3. + 0 + -1.3232390582561493e-001 + -6.1038082838058472e-001 + 6.2328979372978210e-002 + <_> + + <_> + + + + <_> + 9 5 8 4 -1. + <_> + 11 5 4 4 2. + 0 + 9.9189996719360352e-002 + 4.0009308606386185e-002 + -2.4128450453281403e-001 + <_> + + <_> + + + + <_> + 5 2 8 8 -1. + <_> + 7 2 4 8 2. + 0 + 2.3752479255199432e-001 + 2.4606010993011296e-004 + -9.8147119140625000e+002 + <_> + + <_> + + + + <_> + 12 0 6 2 -1. + <_> + 12 0 3 2 2. + 0 + 5.3483508527278900e-003 + -5.8558419346809387e-002 + 9.7474083304405212e-002 + <_> + + <_> + + + + <_> + 0 0 6 2 -1. + <_> + 3 0 3 2 2. + 0 + -1.5156139619648457e-002 + 1.7715239524841309e-001 + -2.7982389926910400e-001 + <_> + + <_> + + + + <_> + 12 6 2 4 -1. + <_> + 13 6 1 2 2. + <_> + 12 8 1 2 2. + 0 + 1.0705590248107910e-002 + -3.0257379636168480e-002 + 3.6629560589790344e-001 + <_> + + <_> + + + + <_> + 4 6 2 4 -1. + <_> + 4 6 1 2 2. + <_> + 5 8 1 2 2. + 0 + -3.2671689987182617e-003 + 2.1479220688343048e-001 + -1.5616300702095032e-001 + <_> + + <_> + + + + <_> + 12 0 4 8 -1. + <_> + 13 0 2 8 2. + 0 + -3.9971169084310532e-002 + -4.8491969704627991e-001 + 1.6523819416761398e-002 + <_> + + <_> + + + + <_> + 0 8 18 4 -1. + <_> + 0 10 18 2 2. + 0 + 4.3550558388233185e-002 + -3.3622530102729797e-001 + 8.8661476969718933e-002 + <_> + + <_> + + + + <_> + 10 0 4 6 -1. + <_> + 11 1 2 6 2. + 1 + -7.8984871506690979e-002 + 1.8954129517078400e-001 + -2.6538040488958359e-002 + <_> + + <_> + + + + <_> + 8 0 6 4 -1. + <_> + 7 1 6 2 2. + 1 + -3.7077900022268295e-002 + 1.2257669866085052e-001 + -2.1321929991245270e-001 + <_> + + <_> + + + + <_> + 16 1 2 3 -1. + <_> + 16 1 1 3 2. + 1 + 2.6359550654888153e-002 + 3.6721199750900269e-002 + -4.6964219212532043e-001 + <_> + + <_> + + + + <_> + 2 1 3 2 -1. + <_> + 2 1 3 1 2. + 1 + 5.8852001093327999e-003 + 6.9452546536922455e-002 + -3.5492339730262756e-001 + <_> + + <_> + + + + <_> + 11 0 6 8 -1. + <_> + 13 0 2 8 3. + 0 + -1.8738530576229095e-002 + 1.1359489709138870e-001 + -8.9908212423324585e-002 + <_> + + <_> + + + + <_> + 1 0 6 8 -1. + <_> + 3 0 2 8 3. + 0 + -9.6431776881217957e-002 + -5.3097301721572876e-001 + 4.5616019517183304e-002 + <_> + + <_> + + + + <_> + 11 6 3 1 -1. + <_> + 12 6 1 1 3. + 0 + -3.2832629512995481e-003 + 2.3055520653724670e-001 + -5.9067908674478531e-002 + <_> + + <_> + + + + <_> + 4 6 3 1 -1. + <_> + 5 6 1 1 3. + 0 + -1.9987220875918865e-003 + 2.4238279461860657e-001 + -8.8716529309749603e-002 + <_> + + <_> + + + + <_> + 12 5 4 4 -1. + <_> + 13 5 2 4 2. + 0 + -5.6294091045856476e-003 + 1.6706959903240204e-001 + -1.2665410339832306e-001 + <_> + + <_> + + + + <_> + 9 2 6 1 -1. + <_> + 11 4 2 1 3. + 1 + -4.1918899863958359e-002 + 1.7224679887294769e-001 + -1.2623949348926544e-001 + <_> + + <_> + + + + <_> + 0 0 18 4 -1. + <_> + 6 0 6 4 3. + 0 + -1.0357339680194855e-001 + 1.4425869286060333e-001 + -1.5410119295120239e-001 + <_> + + <_> + + + + <_> + 2 5 4 4 -1. + <_> + 3 5 2 4 2. + 0 + -7.8944843262434006e-003 + 1.5122400224208832e-001 + -1.2487240135669708e-001 + <_> + + <_> + + + + <_> + 11 7 2 3 -1. + <_> + 10 8 2 1 3. + 1 + -1.9367299973964691e-002 + -3.5261449217796326e-001 + 2.1729569882154465e-002 + <_> + + <_> + + + + <_> + 8 4 3 3 -1. + <_> + 7 5 3 1 3. + 1 + -3.6256119608879089e-002 + 3.7000009417533875e-001 + -5.3758278489112854e-002 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -4.7164689749479294e-002 + -2.3610420525074005e-001 + 9.7192026674747467e-002 + <_> + + <_> + + + + <_> + 9 4 4 2 -1. + <_> + 10 5 2 2 2. + 1 + -1.7230700701475143e-002 + 1.4201079308986664e-001 + -1.5985390543937683e-001 + <_> + + <_> + + + + <_> + 4 2 10 4 -1. + <_> + 4 3 10 2 2. + 0 + -5.0030000507831573e-002 + 2.6506531238555908e-001 + -8.6499691009521484e-002 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + -9.2107948148623109e-005 + 9.5687441527843475e-002 + -1.9993349909782410e-001 + <_> + + <_> + + + + <_> + 10 0 4 5 -1. + <_> + 11 0 2 5 2. + 0 + -1.0295229963958263e-002 + -2.9639908671379089e-001 + 4.1017848998308182e-002 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 8 9 2 3 2. + 0 + -7.7980589121580124e-003 + -4.3875318765640259e-001 + 3.9625078439712524e-002 + <_> + + <_> + + + + <_> + 5 2 8 4 -1. + <_> + 5 3 8 2 2. + 0 + 4.7733850777149200e-002 + -5.9582959860563278e-002 + 2.9455170035362244e-001 + <_> + + <_> + + + + <_> + 4 0 4 5 -1. + <_> + 5 0 2 5 2. + 0 + -1.8985090777277946e-002 + -5.1091802120208740e-001 + 3.6479711532592773e-002 + <_> + + <_> + + + + <_> + 10 0 3 2 -1. + <_> + 10 1 3 1 2. + 0 + 6.6718719899654388e-003 + -7.0748023688793182e-002 + 1.6990910470485687e-001 + <_> + + <_> + + + + <_> + 5 9 2 1 -1. + <_> + 5 9 1 1 2. + 1 + -1.0109299910254776e-004 + 7.2951592504978180e-002 + -2.2971729934215546e-001 + <_> + + <_> + + + + <_> + 14 6 2 4 -1. + <_> + 14 6 2 2 2. + 1 + 1.3687750324606895e-002 + -1.7154410481452942e-002 + 1.5828810632228851e-001 + <_> + + <_> + + + + <_> + 5 8 2 2 -1. + <_> + 5 8 1 2 2. + 1 + -1.1907920241355896e-002 + -2.7717119455337524e-001 + 6.1360988765954971e-002 + <_> + + <_> + + + + <_> + 11 6 3 3 -1. + <_> + 10 7 3 1 3. + 1 + 3.2344508916139603e-002 + 6.6562681458890438e-003 + -3.7267601490020752e-001 + <_> + + <_> + + + + <_> + 7 6 3 3 -1. + <_> + 8 7 1 3 3. + 1 + -3.3367820084095001e-002 + -5.3337848186492920e-001 + 2.7859410271048546e-002 + <_> + + <_> + + + + <_> + 3 0 14 2 -1. + <_> + 10 0 7 1 2. + <_> + 3 1 7 1 2. + 0 + 8.3360234275460243e-003 + -5.2400518208742142e-002 + 1.2462449818849564e-001 + <_> + + <_> + + + + <_> + 1 1 9 9 -1. + <_> + 4 4 3 3 9. + 0 + -5.2082502841949463e-001 + -4.6310651302337646e-001 + 3.1300779432058334e-002 + <_> + + <_> + + + + <_> + 16 2 2 3 -1. + <_> + 16 3 2 1 3. + 0 + 1.3498559594154358e-002 + 1.9706040620803833e-002 + -4.2935219407081604e-001 + <_> + + <_> + + + + <_> + 6 0 4 3 -1. + <_> + 6 1 4 1 3. + 0 + -1.1888509616255760e-002 + 2.1265150606632233e-001 + -6.5112717449665070e-002 + <_> + + <_> + + + + <_> + 1 0 16 3 -1. + <_> + 1 1 16 1 3. + 0 + 1.8383689224720001e-002 + -9.9591173231601715e-002 + 1.7049969732761383e-001 + <_> + + <_> + + + + <_> + 5 0 1 3 -1. + <_> + 4 1 1 1 3. + 1 + 1.0062440298497677e-002 + 3.3510580658912659e-002 + -4.7417938709259033e-001 + <_> + + <_> + + + + <_> + 11 1 3 3 -1. + <_> + 12 1 1 3 3. + 0 + 5.7981228455901146e-003 + 3.6437921226024628e-002 + -2.2873109579086304e-001 + <_> + + <_> + + + + <_> + 8 3 4 3 -1. + <_> + 7 4 4 1 3. + 1 + -3.0684519559144974e-002 + 1.4713959395885468e-001 + -8.7145403027534485e-002 + <_> + + <_> + + + + <_> + 11 4 4 5 -1. + <_> + 12 4 2 5 2. + 0 + 2.3879610002040863e-002 + -7.0351168513298035e-002 + 2.7118590474128723e-001 + <_> + + <_> + + + + <_> + 0 5 18 2 -1. + <_> + 6 5 6 2 3. + 0 + -2.5044348835945129e-001 + -4.7885990142822266e-001 + 3.1736131757497787e-002 + <_> + + <_> + + + + <_> + 11 1 3 3 -1. + <_> + 12 1 1 3 3. + 0 + 1.3026770204305649e-002 + 1.0787160135805607e-002 + -2.5330540537834167e-001 + <_> + + <_> + + + + <_> + 4 1 3 3 -1. + <_> + 5 1 1 3 3. + 0 + 9.0072769671678543e-003 + 2.7806090191006660e-002 + -4.7443199157714844e-001 + <_> + + <_> + + + + <_> + 10 6 3 2 -1. + <_> + 11 6 1 2 3. + 0 + -5.7155848480761051e-003 + 1.9597819447517395e-001 + -5.6443430483341217e-002 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + 6.5435571596026421e-003 + 2.4191839620471001e-002 + -5.9032911062240601e-001 + <_> + + <_> + + + + <_> + 10 6 3 2 -1. + <_> + 11 6 1 2 3. + 0 + 5.8930469676852226e-003 + -5.4064448922872543e-002 + 1.3058720529079437e-001 + <_> + + <_> + + + + <_> + 0 2 2 3 -1. + <_> + 0 3 2 1 3. + 0 + 7.1939909830689430e-003 + 3.4566860646009445e-002 + -3.6955019831657410e-001 + <_> + + <_> + + + + <_> + 10 6 3 2 -1. + <_> + 11 6 1 2 3. + 0 + -2.9776040464639664e-002 + -4.4595420360565186e-001 + 4.1442508809268475e-003 + <_> + + <_> + + + + <_> + 5 6 3 2 -1. + <_> + 6 6 1 2 3. + 0 + -3.2136470545083284e-003 + 2.2781200706958771e-001 + -5.8483459055423737e-002 + <_> + + <_> + + + + <_> + 11 5 4 4 -1. + <_> + 12 5 2 4 2. + 0 + -1.1251470074057579e-002 + 1.0093680024147034e-001 + -1.7605800181627274e-002 + <_> + + <_> + + + + <_> + 3 5 4 4 -1. + <_> + 4 5 2 4 2. + 0 + -4.6385750174522400e-003 + 1.3835780322551727e-001 + -1.2052179872989655e-001 + <_> + + <_> + + + + <_> + 14 9 1 2 -1. + <_> + 14 9 1 1 2. + 1 + -1.0255860164761543e-002 + -2.6656809449195862e-001 + 2.2648969665169716e-002 + <_> + + <_> + + + + <_> + 4 9 2 1 -1. + <_> + 4 9 1 1 2. + 1 + -1.1238789738854393e-004 + 7.0958286523818970e-002 + -1.9030919671058655e-001 + <_> + + <_> + + + + <_> + 15 8 2 2 -1. + <_> + 15 8 1 2 2. + 1 + -1.8172770505771041e-003 + 5.7135429233312607e-002 + -1.9398370385169983e-001 + <_> + + <_> + + + + <_> + 3 8 2 2 -1. + <_> + 3 8 2 1 2. + 1 + 5.5736447684466839e-003 + -5.8273639529943466e-002 + 2.7279791235923767e-001 + <_> + + <_> + + + + <_> + 17 6 1 2 -1. + <_> + 17 7 1 1 2. + 0 + -8.3255711942911148e-003 + -7.4055558443069458e-001 + 9.1970404610037804e-003 + <_> + + <_> + + + + <_> + 0 8 2 4 -1. + <_> + 0 9 2 2 2. + 0 + -3.1887560617178679e-003 + -2.4141499400138855e-001 + 5.7376209646463394e-002 + <_> + + <_> + + + + <_> + 14 6 3 4 -1. + <_> + 15 6 1 4 3. + 0 + -2.2584979888051748e-003 + 1.3913479447364807e-001 + -1.1590459942817688e-001 + <_> + + <_> + + + + <_> + 0 6 1 2 -1. + <_> + 0 7 1 1 2. + 0 + 9.4622228061780334e-005 + -1.3526099920272827e-001 + 9.5751672983169556e-002 + <_> + + <_> + + + + <_> + 8 4 3 3 -1. + <_> + 9 5 1 1 9. + 0 + -2.1349849179387093e-002 + 1.4678120613098145e-001 + -6.3536033034324646e-002 + <_> + + <_> + + + + <_> + 5 2 6 4 -1. + <_> + 7 2 2 4 3. + 0 + -4.4286339543759823e-003 + 8.8673412799835205e-002 + -1.5095430612564087e-001 + <_> + + <_> + + + + <_> + 14 5 4 2 -1. + <_> + 15 5 2 2 2. + 0 + -4.3985550291836262e-003 + 1.5795840322971344e-001 + -7.5238667428493500e-002 + <_> + + <_> + + + + <_> + 0 10 3 2 -1. + <_> + 0 11 3 1 2. + 0 + -9.3446951359510422e-003 + -6.5790867805480957e-001 + 2.0568570122122765e-002 + <_> + + <_> + + + + <_> + 14 5 4 2 -1. + <_> + 15 5 2 2 2. + 0 + -2.5447890162467957e-002 + -4.1285929083824158e-001 + 5.0353291444480419e-003 + <_> + + <_> + + + + <_> + 0 5 4 2 -1. + <_> + 1 5 2 2 2. + 0 + -5.0448579713702202e-003 + 1.8336050212383270e-001 + -7.2318047285079956e-002 + <_> + + <_> + + + + <_> + 10 0 3 4 -1. + <_> + 11 0 1 4 3. + 0 + 7.2271078824996948e-003 + 4.0401030331850052e-002 + -2.2265300154685974e-001 + <_> + + <_> + + + + <_> + 3 0 3 3 -1. + <_> + 4 1 1 3 3. + 1 + 1.3982810080051422e-002 + -5.7746250182390213e-002 + 2.2017340362071991e-001 + <_> + + <_> + + + + <_> + 16 2 2 3 -1. + <_> + 16 2 1 3 2. + 0 + -2.8559179045259953e-003 + 5.0909828394651413e-002 + -3.0777629464864731e-002 + <_> + + <_> + + + + <_> + 0 2 2 3 -1. + <_> + 1 2 1 3 2. + 0 + -1.8284700345247984e-003 + 7.4684068560600281e-002 + -1.7498280107975006e-001 + <_> + + <_> + + + + <_> + 3 1 12 4 -1. + <_> + 3 2 12 2 2. + 0 + 6.3661746680736542e-002 + -6.5391771495342255e-002 + 2.2334089875221252e-001 + <_> + + <_> + + + + <_> + 5 1 8 3 -1. + <_> + 5 2 8 1 3. + 0 + -2.7838269248604774e-002 + 2.9847261309623718e-001 + -4.9533151090145111e-002 + <_> + + <_> + + + + <_> + 8 0 2 1 -1. + <_> + 8 0 1 1 2. + 0 + -1.0150820162380114e-004 + 1.1381319910287857e-001 + -1.2988950312137604e-001 + <_> + + <_> + + + + <_> + 6 0 4 3 -1. + <_> + 7 0 2 3 2. + 0 + -8.2104168832302094e-003 + -3.3482441306114197e-001 + 4.3320100754499435e-002 + <_> + + <_> + + + + <_> + 10 4 1 4 -1. + <_> + 9 5 1 2 2. + 1 + -2.3469710722565651e-002 + 1.0485579818487167e-001 + -2.6606179773807526e-002 + <_> + + <_> + + + + <_> + 0 4 5 6 -1. + <_> + 0 6 5 2 3. + 0 + -1.0225430130958557e-001 + -5.8360242843627930e-001 + 1.9875079393386841e-002 + <_> + + <_> + + + + <_> + 16 0 2 1 -1. + <_> + 16 0 1 1 2. + 0 + 1.1051409819629043e-004 + -5.1062610000371933e-002 + 5.9449151158332825e-002 + <_> + + <_> + + + + <_> + 3 1 2 3 -1. + <_> + 2 2 2 1 3. + 1 + -2.8587339445948601e-002 + -6.5006488561630249e-001 + 1.7431130632758141e-002 + <_> + + <_> + + + + <_> + 15 4 3 3 -1. + <_> + 15 5 3 1 3. + 0 + -1.3374029658734798e-002 + -1.4429409801959991e-001 + 1.7930189147591591e-002 + <_> + + <_> + + + + <_> + 4 6 2 2 -1. + <_> + 4 6 1 1 2. + <_> + 5 7 1 1 2. + 0 + -2.3064489942044020e-003 + 2.0024579763412476e-001 + -5.6077890098094940e-002 + <_> + + <_> + + + + <_> + 9 1 4 3 -1. + <_> + 10 1 2 3 2. + 0 + 8.4166266024112701e-003 + 2.1211260929703712e-002 + -1.6266340017318726e-001 + <_> + + <_> + + + + <_> + 3 4 3 4 -1. + <_> + 4 4 1 4 3. + 0 + -3.9152640849351883e-002 + -7.4495017528533936e-001 + 1.5373099595308304e-002 + <_> + + <_> + + + + <_> + 15 4 3 3 -1. + <_> + 15 5 3 1 3. + 0 + 2.2199099883437157e-002 + 3.8378299213945866e-003 + -4.2204570770263672e-001 + <_> + + <_> + + + + <_> + 0 4 3 3 -1. + <_> + 0 5 3 1 3. + 0 + -2.1212680265307426e-002 + -6.2949067354202271e-001 + 1.7416249960660934e-002 + <_> + + <_> + + + + <_> + 10 4 1 4 -1. + <_> + 9 5 1 2 2. + 1 + 2.4373589083552361e-002 + -1.2476569972932339e-002 + 2.4312859773635864e-001 + <_> + + <_> + + + + <_> + 8 4 4 1 -1. + <_> + 9 5 2 1 2. + 1 + -6.5655349753797054e-003 + 8.4354929625988007e-002 + -1.5370599925518036e-001 + <_> + + <_> + + + + <_> + 9 1 4 3 -1. + <_> + 10 1 2 3 2. + 0 + -2.7004949748516083e-002 + -5.8976668119430542e-001 + 2.9545149300247431e-003 + <_> + + <_> + + + + <_> + 5 1 4 3 -1. + <_> + 6 1 2 3 2. + 0 + 7.3342039249837399e-003 + 3.2064430415630341e-002 + -3.6039480566978455e-001 + <_> + + <_> + + + + <_> + 7 2 4 3 -1. + <_> + 7 3 4 1 3. + 0 + -3.6217659711837769e-002 + 4.1957581043243408e-001 + -2.8667179867625237e-002 + <_> + + <_> + + + + <_> + 1 0 12 1 -1. + <_> + 7 0 6 1 2. + 0 + -3.3907890319824219e-002 + 1.9862470030784607e-001 + -5.4882749915122986e-002 + <_> + + <_> + + + + <_> + 15 7 3 2 -1. + <_> + 16 8 1 2 3. + 1 + 3.3384829759597778e-002 + 9.7365463152527809e-003 + -5.0248068571090698e-001 + <_> + + <_> + + + + <_> + 3 7 2 3 -1. + <_> + 2 8 2 1 3. + 1 + 1.6862079501152039e-002 + -4.6240940690040588e-002 + 2.6544511318206787e-001 + <_> + + <_> + + + + <_> + 14 9 4 1 -1. + <_> + 15 9 2 1 2. + 0 + 1.0384619963588193e-004 + -6.5498687326908112e-002 + 7.5105533003807068e-002 + <_> + + <_> + + + + <_> + 0 9 4 1 -1. + <_> + 1 9 2 1 2. + 0 + -1.8147130031138659e-003 + 1.5277540683746338e-001 + -7.0199362933635712e-002 + <_> + + <_> + + + + <_> + 8 1 3 2 -1. + <_> + 9 1 1 2 3. + 0 + -7.1106678806245327e-003 + -3.0020499229431152e-001 + 1.6424750909209251e-002 + <_> + + <_> + + + + <_> + 6 5 3 1 -1. + <_> + 7 5 1 1 3. + 0 + -3.5177739337086678e-003 + 1.7865179479122162e-001 + -5.8777790516614914e-002 + <_> + + <_> + + + + <_> + 12 1 6 6 -1. + <_> + 15 1 3 3 2. + <_> + 12 4 3 3 2. + 0 + -4.1041579097509384e-002 + 1.8218480050563812e-001 + -8.1268668174743652e-002 + <_> + + <_> + + + + <_> + 6 10 4 2 -1. + <_> + 7 10 2 2 2. + 0 + 5.7358681224286556e-003 + 2.5911739096045494e-002 + -4.2743799090385437e-001 + <_> + + <_> + + + + <_> + 7 10 4 1 -1. + <_> + 7 10 2 1 2. + 0 + -1.0798470117151737e-002 + -6.1551171541213989e-001 + 1.5165490098297596e-002 + <_> + + <_> + + + + <_> + 1 10 12 2 -1. + <_> + 4 10 6 2 2. + 0 + -1.6831440851092339e-002 + 1.4407679438591003e-001 + -8.0768980085849762e-002 + <_> + + <_> + + + + <_> + 1 11 16 1 -1. + <_> + 5 11 8 1 2. + 0 + 1.0636080056428909e-002 + -6.2096010893583298e-002 + 1.9595879316329956e-001 + <_> + + <_> + + + + <_> + 1 0 12 2 -1. + <_> + 1 0 6 1 2. + <_> + 7 1 6 1 2. + 0 + -1.2243179604411125e-002 + 2.0768819749355316e-001 + -5.2664700895547867e-002 + <_> + + <_> + + + + <_> + 15 0 3 1 -1. + <_> + 16 1 1 1 3. + 1 + -1.2133699841797352e-002 + -2.9647940397262573e-001 + 2.0730949938297272e-002 + <_> + + <_> + + + + <_> + 3 0 1 3 -1. + <_> + 2 1 1 1 3. + 1 + 1.1067570187151432e-002 + 2.1148590371012688e-002 + -4.9197408556938171e-001 + <_> + + <_> + + + + <_> + 10 8 2 2 -1. + <_> + 11 8 1 1 2. + <_> + 10 9 1 1 2. + 0 + -9.8478456493467093e-005 + 1.1343929916620255e-001 + -8.3189181983470917e-002 + <_> + + <_> + + + + <_> + 2 0 4 3 -1. + <_> + 2 1 4 1 3. + 0 + -5.6805750355124474e-003 + 1.5700399875640869e-001 + -6.6936172544956207e-002 + <_> + + <_> + + + + <_> + 6 5 6 6 -1. + <_> + 6 8 6 3 2. + 0 + -2.8414670377969742e-002 + -7.0801937580108643e-001 + 1.5312350355088711e-002 + <_> + + <_> + + + + <_> + 6 5 2 6 -1. + <_> + 6 5 1 3 2. + <_> + 7 8 1 3 2. + 0 + -8.3131557330489159e-003 + 3.2525569200515747e-001 + -3.9767459034919739e-002 + <_> + + <_> + + + + <_> + 6 0 6 10 -1. + <_> + 8 0 2 10 3. + 0 + -1.6154859215021133e-002 + 7.2170242667198181e-002 + -1.6181150078773499e-001 + <_> + + <_> + + + + <_> + 5 10 8 2 -1. + <_> + 7 10 4 2 2. + 0 + -2.8748309239745140e-002 + -5.0679367780685425e-001 + 2.0193170756101608e-002 + <_> + + <_> + + + + <_> + 8 9 2 3 -1. + <_> + 8 10 2 1 3. + 0 + -4.1366219520568848e-003 + 2.0419590175151825e-001 + -6.5082170069217682e-002 + <_> + + <_> + + + + <_> + 2 0 2 8 -1. + <_> + 2 0 1 4 2. + <_> + 3 4 1 4 2. + 0 + -1.5805249568074942e-003 + 1.0301300138235092e-001 + -9.4873502850532532e-002 + <_> + + <_> + + + + <_> + 17 9 1 2 -1. + <_> + 17 10 1 1 2. + 0 + 1.0768450010800734e-004 + -1.3171160221099854e-001 + 6.4459241926670074e-002 + <_> + + <_> + + + + <_> + 0 9 1 2 -1. + <_> + 0 10 1 1 2. + 0 + 1.0487069812370464e-004 + -1.2248139828443527e-001 + 7.9662062227725983e-002 + <_> + + <_> + + + + <_> + 17 9 1 3 -1. + <_> + 17 10 1 1 3. + 0 + 2.3125091101974249e-003 + 4.4756468385457993e-002 + -1.7060999572277069e-001 + <_> + + <_> + + + + <_> + 0 9 1 3 -1. + <_> + 0 10 1 1 3. + 0 + 2.1291899029165506e-003 + 4.8184551298618317e-002 + -2.3906719684600830e-001 + <_> + + <_> + + + + <_> + 10 0 3 2 -1. + <_> + 10 1 3 1 2. + 0 + 1.5565729700028896e-002 + -2.2367909550666809e-002 + 1.5265730023384094e-001 + <_> + + <_> + + + + <_> + 0 2 2 2 -1. + <_> + 1 2 1 2 2. + 0 + 1.2233420275151730e-002 + -1.4203540049493313e-002 + 6.9559741020202637e-001 + <_> + + <_> + + + + <_> + 13 0 2 3 -1. + <_> + 13 0 1 3 2. + 1 + 1.4537650160491467e-002 + -2.8447359800338745e-002 + 8.0053016543388367e-002 + <_> + + <_> + + + + <_> + 7 6 3 2 -1. + <_> + 7 6 3 1 2. + 1 + -6.6005781292915344e-002 + 8.9588922262191772e-001 + -1.1561259627342224e-002 + <_> + + <_> + + + + <_> + 11 0 1 10 -1. + <_> + 11 0 1 5 2. + 1 + -1.0381550341844559e-001 + -1.8446309864521027e-001 + 1.7674740403890610e-002 + <_> + + <_> + + + + <_> + 7 0 10 1 -1. + <_> + 7 0 5 1 2. + 1 + -1.3172790408134460e-001 + 5.0180637836456299e-001 + -2.0710369572043419e-002 + <_> + + <_> + + + + <_> + 4 2 14 2 -1. + <_> + 11 2 7 1 2. + <_> + 4 3 7 1 2. + 0 + -1.5426370315253735e-002 + 7.8415192663669586e-002 + -2.7261590585112572e-002 + <_> + + <_> + + + + <_> + 1 1 2 1 -1. + <_> + 2 1 1 1 2. + 0 + -1.0778359865071252e-004 + 6.0409270226955414e-002 + -1.5471479296684265e-001 + <_> + + <_> + + + + <_> + 12 0 6 4 -1. + <_> + 15 0 3 2 2. + <_> + 12 2 3 2 2. + 0 + -2.4746390059590340e-002 + 1.2564839422702789e-001 + -3.3081028610467911e-002 + <_> + + <_> + + + + <_> + 0 0 6 4 -1. + <_> + 0 0 3 2 2. + <_> + 3 2 3 2 2. + 0 + -1.5458550304174423e-002 + 1.7179520428180695e-001 + -5.8264948427677155e-002 + <_> + + <_> + + + + <_> + 10 0 2 2 -1. + <_> + 10 0 1 2 2. + 1 + -1.0445830412209034e-002 + 1.4642359316349030e-001 + -3.6354210227727890e-002 + <_> + + <_> + + + + <_> + 8 0 2 2 -1. + <_> + 8 0 2 1 2. + 1 + 2.6862770318984985e-002 + 2.1519670262932777e-002 + -4.7783750295639038e-001 + <_> + + <_> + + + + <_> + 13 0 2 3 -1. + <_> + 13 0 1 3 2. + 1 + 3.5936690866947174e-002 + 4.5006349682807922e-003 + -1.7359879612922668e-001 + <_> + + <_> + + + + <_> + 5 0 3 2 -1. + <_> + 5 0 3 1 2. + 1 + -1.5734670683741570e-002 + -3.0777779221534729e-001 + 3.1397148966789246e-002 + <_> + + <_> + + + + <_> + 5 5 12 6 -1. + <_> + 9 7 4 2 9. + 0 + 2.6576629281044006e-001 + 8.3727054297924042e-003 + -1.7637939751148224e-001 + <_> + + <_> + + + + <_> + 1 5 12 6 -1. + <_> + 5 7 4 2 9. + 0 + -2.7198851108551025e-001 + -2.5540670752525330e-001 + 3.7426579743623734e-002 + <_> + + <_> + + + + <_> + 10 9 3 1 -1. + <_> + 11 9 1 1 3. + 0 + -7.8124678111635149e-005 + 6.1373539268970490e-002 + -5.4453648626804352e-002 + <_> + + <_> + + + + <_> + 5 9 3 1 -1. + <_> + 6 9 1 1 3. + 0 + -7.9498830018565059e-005 + 1.0011609643697739e-001 + -9.8592832684516907e-002 + <_> + + <_> + + + + <_> + 10 8 2 2 -1. + <_> + 11 8 1 1 2. + <_> + 10 9 1 1 2. + 0 + 1.0202309931628406e-004 + -7.4067138135433197e-002 + 7.4745737016201019e-002 + <_> + + <_> + + + + <_> + 6 8 2 2 -1. + <_> + 6 8 1 1 2. + <_> + 7 9 1 1 2. + 0 + -9.2606707767117769e-005 + 1.3342879712581635e-001 + -9.0439222753047943e-002 + <_> + + <_> + + + + <_> + 8 9 2 3 -1. + <_> + 8 10 2 1 3. + 0 + 3.8040629588067532e-003 + -6.1666429042816162e-002 + 1.6896329820156097e-001 + <_> + + <_> + + + + <_> + 5 6 3 3 -1. + <_> + 4 7 3 1 3. + 1 + -8.1060919910669327e-003 + 1.3207329809665680e-001 + -7.3784358799457550e-002 + <_> + + <_> + + + + <_> + 13 8 3 1 -1. + <_> + 14 8 1 1 3. + 0 + -1.0786090046167374e-002 + -5.6200730800628662e-001 + 1.3227690011262894e-002 + <_> + + <_> + + + + <_> + 2 8 3 1 -1. + <_> + 3 8 1 1 3. + 0 + 9.7276162705384195e-005 + -9.7462959587574005e-002 + 1.1971189826726913e-001 + <_> + + <_> + + + + <_> + 10 6 6 6 -1. + <_> + 12 8 2 2 9. + 0 + 2.8057929873466492e-001 + -3.0780870001763105e-003 + 6.8235772848129272e-001 + <_> + + <_> + + + + <_> + 2 6 6 6 -1. + <_> + 4 8 2 2 9. + 0 + -1.3232059776782990e-001 + -3.8513648509979248e-001 + 2.6804640889167786e-002 + <_> + + <_> + + + + <_> + 9 2 2 7 -1. + <_> + 9 2 1 7 2. + 1 + -6.3539249822497368e-003 + -4.4983521103858948e-002 + 2.9777200892567635e-002 + <_> + + <_> + + + + <_> + 8 1 2 3 -1. + <_> + 8 2 2 1 3. + 0 + -6.7433509975671768e-003 + 2.0317420363426208e-001 + -4.5301459729671478e-002 + <_> + + <_> + + + + <_> + 14 0 2 1 -1. + <_> + 14 0 1 1 2. + 0 + 1.0802519682329148e-004 + -5.8308821171522141e-002 + 7.4881277978420258e-002 + <_> + + <_> + + + + <_> + 2 0 2 1 -1. + <_> + 3 0 1 1 2. + 0 + -1.0485889652045444e-004 + 6.7523166537284851e-002 + -1.4478640258312225e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 9 0 9 6 2. + <_> + 0 6 9 6 2. + 0 + -3.5352221131324768e-001 + -4.2312130331993103e-001 + 1.9533690065145493e-002 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 0 4 9 4 2. + <_> + 9 8 9 4 2. + 0 + -1.2163110077381134e-001 + -2.7824950218200684e-001 + 3.1736399978399277e-002 + <_> + + <_> + + + + <_> + 15 1 2 10 -1. + <_> + 16 1 1 5 2. + <_> + 15 6 1 5 2. + 0 + -1.9749959465116262e-003 + 3.7093818187713623e-002 + -3.7182409316301346e-002 + <_> + + <_> + + + + <_> + 1 1 2 10 -1. + <_> + 1 1 1 5 2. + <_> + 2 6 1 5 2. + 0 + -5.9040738269686699e-003 + 1.7077660560607910e-001 + -5.1128141582012177e-002 + <_> + + <_> + + + + <_> + 17 6 1 3 -1. + <_> + 17 7 1 1 3. + 0 + 6.3806660473346710e-003 + 1.8414629623293877e-002 + -3.3528879284858704e-001 + <_> + + <_> + + + + <_> + 0 6 1 3 -1. + <_> + 0 7 1 1 3. + 0 + 3.0919709242880344e-003 + 3.3527199178934097e-002 + -2.5639230012893677e-001 + <_> + + <_> + + + + <_> + 9 11 9 1 -1. + <_> + 12 11 3 1 3. + 0 + -3.3380180597305298e-002 + -5.6673657894134521e-001 + 9.6841529011726379e-003 + <_> + + <_> + + + + <_> + 0 11 9 1 -1. + <_> + 3 11 3 1 3. + 0 + 5.3758830763399601e-003 + -7.3790043592453003e-002 + 1.2300299853086472e-001 + <_> + + <_> + + + + <_> + 10 2 2 1 -1. + <_> + 10 2 1 1 2. + 0 + -9.6056828624568880e-005 + 6.6307842731475830e-002 + -8.0982752144336700e-002 + <_> + + <_> + + + + <_> + 6 2 2 1 -1. + <_> + 7 2 1 1 2. + 0 + 9.6216521342284977e-005 + -9.5515526831150055e-002 + 9.8478242754936218e-002 + <_> + + <_> + + + + <_> + 11 6 4 2 -1. + <_> + 12 6 2 2 2. + 0 + 2.0997669547796249e-002 + -1.9261270761489868e-002 + 1.9147670269012451e-001 + <_> + + <_> + + + + <_> + 8 1 7 2 -1. + <_> + 8 1 7 1 2. + 1 + 4.0974739938974380e-002 + 3.5511299967765808e-002 + -2.3782519996166229e-001 + <_> + + <_> + + + + <_> + 8 3 2 3 -1. + <_> + 8 4 2 1 3. + 0 + 1.5249810181558132e-002 + -3.2638609409332275e-002 + 2.6787319779396057e-001 + <_> + + <_> + + + + <_> + 7 3 2 3 -1. + <_> + 7 4 2 1 3. + 0 + -8.7066702544689178e-003 + 1.6137360036373138e-001 + -6.4327538013458252e-002 + -1.6502959728240967e+000 + 16 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.6222651153802872e-002 + 5.9786707162857056e-001 + -3.5909670591354370e-001 + <_> + + <_> + + + + <_> + 14 6 2 3 -1. + <_> + 13 7 2 1 3. + 1 + 4.1003809310495853e-003 + -2.0380510389804840e-001 + 1.9502650201320648e-001 + <_> + + <_> + + + + <_> + 5 3 8 3 -1. + <_> + 5 4 8 1 3. + 0 + -4.9330119043588638e-002 + 5.0600039958953857e-001 + -1.6639490425586700e-001 + <_> + + <_> + + + + <_> + 12 5 3 3 -1. + <_> + 13 5 1 3 3. + 0 + -6.4293588511645794e-003 + 1.8901120126247406e-001 + -1.4212790131568909e-001 + <_> + + <_> + + + + <_> + 3 0 2 6 -1. + <_> + 4 0 1 6 2. + 0 + -4.7428511606995016e-005 + 1.1049690097570419e-001 + -3.3191910386085510e-001 + <_> + + <_> + + + + <_> + 17 0 1 2 -1. + <_> + 17 0 1 1 2. + 1 + -2.2071679122745991e-003 + 1.3103869557380676e-001 + -7.3238097131252289e-002 + <_> + + <_> + + + + <_> + 1 0 2 1 -1. + <_> + 1 0 1 1 2. + 1 + 1.6127950511872768e-003 + -3.1489709019660950e-001 + 1.1853870004415512e-001 + <_> + + <_> + + + + <_> + 5 4 8 3 -1. + <_> + 5 5 8 1 3. + 0 + -5.1899220794439316e-002 + 3.3643078804016113e-001 + -9.0716972947120667e-002 + <_> + + <_> + + + + <_> + 0 4 18 8 -1. + <_> + 0 8 18 4 2. + 0 + 3.6771941184997559e-001 + -2.8837621212005615e-001 + 9.6811376512050629e-002 + <_> + + <_> + + + + <_> + 12 6 3 3 -1. + <_> + 13 7 1 3 3. + 1 + -6.9863619282841682e-003 + 9.2437140643596649e-002 + -2.5936789810657501e-002 + <_> + + <_> + + + + <_> + 6 5 2 3 -1. + <_> + 5 6 2 1 3. + 1 + -9.8948301747441292e-003 + 2.0623749494552612e-001 + -1.3285739719867706e-001 + <_> + + <_> + + + + <_> + 12 2 3 1 -1. + <_> + 13 3 1 1 3. + 1 + 1.1778100393712521e-002 + 2.3808769881725311e-002 + -1.5618060529232025e-001 + <_> + + <_> + + + + <_> + 6 2 1 3 -1. + <_> + 5 3 1 1 3. + 1 + -9.7711039707064629e-003 + -4.4414070248603821e-001 + 5.2495859563350677e-002 + <_> + + <_> + + + + <_> + 12 6 2 4 -1. + <_> + 12 6 2 2 2. + 1 + 2.2034980356693268e-002 + 1.2899329885840416e-002 + -3.1973049044609070e-001 + <_> + + <_> + + + + <_> + 6 6 4 2 -1. + <_> + 6 6 2 2 2. + 1 + -4.9070861190557480e-002 + -3.8365250825881958e-001 + 6.3556171953678131e-002 + <_> + + <_> + + + + <_> + 9 5 3 2 -1. + <_> + 10 5 1 2 3. + 0 + 6.3082459382712841e-003 + -3.8817681372165680e-002 + 1.8945780396461487e-001 + <_> + + <_> + + + + <_> + 0 10 1 2 -1. + <_> + 0 11 1 1 2. + 0 + -1.7394339665770531e-003 + -4.3998670578002930e-001 + 4.6502090990543365e-002 + <_> + + <_> + + + + <_> + 9 5 3 2 -1. + <_> + 10 5 1 2 3. + 0 + -4.4195288792252541e-003 + 1.1859840154647827e-001 + -7.3243133723735809e-002 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.6303210556507111e-002 + -2.6308500766754150e-001 + 7.2903439402580261e-002 + <_> + + <_> + + + + <_> + 11 5 3 3 -1. + <_> + 12 6 1 1 9. + 0 + 3.4307971596717834e-002 + -6.0798160731792450e-002 + 3.9862269163131714e-001 + <_> + + <_> + + + + <_> + 8 5 3 1 -1. + <_> + 9 6 1 1 3. + 1 + -3.3242679201066494e-003 + 1.0307639837265015e-001 + -2.0086939632892609e-001 + <_> + + <_> + + + + <_> + 15 0 2 1 -1. + <_> + 15 0 1 1 2. + 1 + 1.0037739761173725e-002 + 2.2954529151320457e-002 + -3.3619529008865356e-001 + <_> + + <_> + + + + <_> + 6 2 6 3 -1. + <_> + 6 3 6 1 3. + 0 + -1.8309960141777992e-002 + 2.7249470353126526e-001 + -7.5265437364578247e-002 + <_> + + <_> + + + + <_> + 10 4 3 3 -1. + <_> + 11 5 1 1 9. + 0 + -1.2437590397894382e-002 + 1.6988450288772583e-001 + -1.2346489727497101e-001 + <_> + + <_> + + + + <_> + 1 3 2 1 -1. + <_> + 2 3 1 1 2. + 0 + -9.7200412710662931e-005 + 9.2975288629531860e-002 + -2.1013750135898590e-001 + <_> + + <_> + + + + <_> + 15 0 3 2 -1. + <_> + 16 1 1 2 3. + 1 + 1.5010629780590534e-002 + 2.7979910373687744e-002 + -2.2502240538597107e-001 + <_> + + <_> + + + + <_> + 4 0 5 2 -1. + <_> + 4 1 5 1 2. + 0 + 6.8223020061850548e-003 + -9.1722019016742706e-002 + 2.1493209898471832e-001 + <_> + + <_> + + + + <_> + 7 0 4 2 -1. + <_> + 8 0 2 2 2. + 0 + 7.6006199233233929e-003 + 3.4965578466653824e-002 + -5.5234891176223755e-001 + <_> + + <_> + + + + <_> + 2 0 4 2 -1. + <_> + 2 0 4 1 2. + 1 + -2.6817400008440018e-002 + -4.8797228932380676e-001 + 3.0805250629782677e-002 + <_> + + <_> + + + + <_> + 0 10 18 2 -1. + <_> + 0 11 18 1 2. + 0 + 7.0448551559820771e-004 + -3.5009810328483582e-001 + 4.8253938555717468e-002 + <_> + + <_> + + + + <_> + 8 3 4 3 -1. + <_> + 7 4 4 1 3. + 1 + -3.3609889447689056e-002 + 1.7630560696125031e-001 + -9.8770871758460999e-002 + <_> + + <_> + + + + <_> + 7 6 6 2 -1. + <_> + 9 6 2 2 3. + 0 + -1.8547330051660538e-002 + 1.0437929630279541e-001 + -1.1144720017910004e-001 + <_> + + <_> + + + + <_> + 5 6 8 2 -1. + <_> + 7 6 4 2 2. + 0 + -5.6172698736190796e-002 + -3.0085611343383789e-001 + 7.9608023166656494e-002 + <_> + + <_> + + + + <_> + 11 5 3 2 -1. + <_> + 12 6 1 2 3. + 1 + -2.3099640384316444e-002 + 2.7257511019706726e-001 + -2.9355559498071671e-002 + <_> + + <_> + + + + <_> + 4 5 3 3 -1. + <_> + 5 6 1 1 9. + 0 + 3.9425190538167953e-002 + -5.3158119320869446e-002 + 3.6481729149818420e-001 + <_> + + <_> + + + + <_> + 15 0 2 2 -1. + <_> + 15 0 1 2 2. + 1 + 2.0240049809217453e-002 + 5.3568179719150066e-003 + -1.8116340041160583e-001 + <_> + + <_> + + + + <_> + 3 0 2 2 -1. + <_> + 3 0 2 1 2. + 1 + 9.3122208490967751e-003 + 5.0547938793897629e-002 + -3.4074148535728455e-001 + <_> + + <_> + + + + <_> + 7 2 8 2 -1. + <_> + 9 2 4 2 2. + 0 + -2.3379230871796608e-002 + -2.1109730005264282e-001 + 1.6865389421582222e-002 + <_> + + <_> + + + + <_> + 3 7 2 3 -1. + <_> + 3 7 1 3 2. + 1 + -1.9556559622287750e-002 + -3.4358918666839600e-001 + 4.2624428868293762e-002 + <_> + + <_> + + + + <_> + 8 5 10 4 -1. + <_> + 13 5 5 2 2. + <_> + 8 7 5 2 2. + 0 + 3.1322460621595383e-002 + -3.9133161306381226e-002 + 5.5833168327808380e-002 + <_> + + <_> + + + + <_> + 0 9 2 3 -1. + <_> + 0 10 2 1 3. + 0 + -7.3630441911518574e-003 + -4.7864329814910889e-001 + 2.9872870072722435e-002 + <_> + + <_> + + + + <_> + 14 9 4 2 -1. + <_> + 14 9 2 2 2. + 0 + -2.3409801069647074e-003 + 1.3057319819927216e-001 + -1.4621940255165100e-001 + <_> + + <_> + + + + <_> + 0 9 4 2 -1. + <_> + 2 9 2 2 2. + 0 + 9.2211654409766197e-003 + -6.7346267402172089e-002 + 2.5263699889183044e-001 + <_> + + <_> + + + + <_> + 12 9 1 2 -1. + <_> + 12 9 1 1 2. + 1 + -1.0466010309755802e-002 + -1.9848449528217316e-001 + 1.8861690536141396e-002 + <_> + + <_> + + + + <_> + 6 9 2 1 -1. + <_> + 6 9 1 1 2. + 1 + -9.7899202955886722e-005 + 6.3450932502746582e-002 + -2.1557840704917908e-001 + <_> + + <_> + + + + <_> + 13 4 2 3 -1. + <_> + 12 5 2 1 3. + 1 + -2.3922720924019814e-002 + 2.4631519615650177e-001 + -5.1129460334777832e-002 + <_> + + <_> + + + + <_> + 0 0 2 3 -1. + <_> + 0 1 2 1 3. + 0 + 5.7842950336635113e-003 + 4.2333669960498810e-002 + -3.3898320794105530e-001 + <_> + + <_> + + + + <_> + 13 0 3 3 -1. + <_> + 12 1 3 1 3. + 1 + -2.3269839584827423e-002 + 2.4037189781665802e-001 + -3.4505158662796021e-002 + <_> + + <_> + + + + <_> + 5 4 3 2 -1. + <_> + 6 5 1 2 3. + 1 + -1.6350559890270233e-002 + 1.9407600164413452e-001 + -7.0264637470245361e-002 + <_> + + <_> + + + + <_> + 13 0 3 3 -1. + <_> + 12 1 3 1 3. + 1 + -4.7969698905944824e-002 + 2.3122610151767731e-001 + -5.0500500947237015e-003 + <_> + + <_> + + + + <_> + 5 0 3 3 -1. + <_> + 6 1 1 3 3. + 1 + -1.7734989523887634e-002 + 2.2820329666137695e-001 + -6.5362311899662018e-002 + <_> + + <_> + + + + <_> + 11 0 4 4 -1. + <_> + 12 0 2 4 2. + 0 + -9.5965424552559853e-003 + -3.6203289031982422e-001 + 4.2960420250892639e-002 + <_> + + <_> + + + + <_> + 3 0 4 4 -1. + <_> + 4 0 2 4 2. + 0 + -1.1790839955210686e-002 + -3.3380389213562012e-001 + 3.7407919764518738e-002 + <_> + + <_> + + + + <_> + 9 4 3 5 -1. + <_> + 10 4 1 5 3. + 0 + -6.5361768007278442e-002 + -7.3411208391189575e-001 + 3.7781549617648125e-003 + <_> + + <_> + + + + <_> + 6 4 3 5 -1. + <_> + 7 4 1 5 3. + 0 + -9.2028174549341202e-003 + 1.9058810174465179e-001 + -7.3330029845237732e-002 + <_> + + <_> + + + + <_> + 16 8 2 3 -1. + <_> + 16 8 1 3 2. + 0 + -9.7162883321288973e-005 + 4.1498031467199326e-002 + -7.5053706765174866e-002 + <_> + + <_> + + + + <_> + 8 4 3 3 -1. + <_> + 7 5 3 1 3. + 1 + 3.4400381147861481e-002 + -5.5474020540714264e-002 + 2.4660380184650421e-001 + <_> + + <_> + + + + <_> + 10 6 3 1 -1. + <_> + 11 6 1 1 3. + 0 + 7.3116212151944637e-003 + -4.3518859893083572e-002 + 2.7988308668136597e-001 + <_> + + <_> + + + + <_> + 6 1 4 4 -1. + <_> + 7 1 2 4 2. + 0 + -1.3429949991405010e-002 + -3.6247709393501282e-001 + 3.9708640426397324e-002 + <_> + + <_> + + + + <_> + 7 2 8 2 -1. + <_> + 9 2 4 2 2. + 0 + -9.1758027672767639e-002 + 1. + -3.3344780094921589e-003 + <_> + + <_> + + + + <_> + 3 2 8 2 -1. + <_> + 5 2 4 2 2. + 0 + -6.6716182045638561e-003 + 1.0546670109033585e-001 + -1.4009909331798553e-001 + <_> + + <_> + + + + <_> + 5 1 10 2 -1. + <_> + 10 1 5 1 2. + <_> + 5 2 5 1 2. + 0 + 1.3265940360724926e-002 + -3.3783260732889175e-002 + 1.4028559625148773e-001 + <_> + + <_> + + + + <_> + 4 1 4 4 -1. + <_> + 5 1 2 4 2. + 0 + -1.2150679714977741e-002 + -3.2402610778808594e-001 + 4.1329998522996902e-002 + <_> + + <_> + + + + <_> + 10 6 3 1 -1. + <_> + 11 6 1 1 3. + 0 + -2.4970290251076221e-003 + 1.1668320000171661e-001 + -4.5901168137788773e-002 + <_> + + <_> + + + + <_> + 5 6 3 1 -1. + <_> + 6 6 1 1 3. + 0 + -2.3780330084264278e-003 + 2.3035770654678345e-001 + -5.9925749897956848e-002 + <_> + + <_> + + + + <_> + 8 5 10 4 -1. + <_> + 13 5 5 2 2. + <_> + 8 7 5 2 2. + 0 + 1.1058100312948227e-001 + 1.2656870298087597e-002 + -3.2122999429702759e-001 + <_> + + <_> + + + + <_> + 7 11 4 1 -1. + <_> + 8 11 2 1 2. + 0 + -4.5881681144237518e-003 + -5.6259912252426147e-001 + 2.2143730893731117e-002 + <_> + + <_> + + + + <_> + 15 2 3 1 -1. + <_> + 16 3 1 1 3. + 1 + 3.8563141133636236e-003 + 5.0461299717426300e-002 + -1.8779960274696350e-001 + <_> + + <_> + + + + <_> + 0 2 14 2 -1. + <_> + 0 2 7 1 2. + <_> + 7 3 7 1 2. + 0 + 3.3232510089874268e-002 + -3.6194700747728348e-002 + 3.8118681311607361e-001 + <_> + + <_> + + + + <_> + 11 2 1 4 -1. + <_> + 11 2 1 2 2. + 1 + -3.6123570054769516e-002 + 2.1880419552326202e-001 + -4.5539699494838715e-003 + <_> + + <_> + + + + <_> + 7 2 4 1 -1. + <_> + 7 2 2 1 2. + 1 + 7.2496462962590158e-005 + -2.3785440623760223e-001 + 6.5444566309452057e-002 + <_> + + <_> + + + + <_> + 12 2 3 4 -1. + <_> + 12 2 3 2 2. + 1 + -4.7242470085620880e-002 + 1.2158119678497314e-001 + -1.2862590141594410e-002 + <_> + + <_> + + + + <_> + 6 0 6 3 -1. + <_> + 9 0 3 3 2. + 0 + 8.3945877850055695e-003 + -1.2558129429817200e-001 + 9.8872929811477661e-002 + <_> + + <_> + + + + <_> + 16 8 2 3 -1. + <_> + 16 8 1 3 2. + 0 + -1.0565370321273804e-002 + -1.6977620124816895e-001 + 1.4602130278944969e-002 + <_> + + <_> + + + + <_> + 0 8 2 3 -1. + <_> + 1 8 1 3 2. + 0 + -8.1733884289860725e-003 + 2.1745790541172028e-001 + -6.1847139149904251e-002 + <_> + + <_> + + + + <_> + 5 2 8 3 -1. + <_> + 5 3 8 1 3. + 0 + -6.1808120459318161e-002 + 4.5185729861259460e-001 + -2.6334449648857117e-002 + <_> + + <_> + + + + <_> + 8 11 2 1 -1. + <_> + 9 11 1 1 2. + 0 + 4.0804222226142883e-003 + 1.8054539337754250e-002 + -7.1874141693115234e-001 + <_> + + <_> + + + + <_> + 16 1 2 4 -1. + <_> + 16 2 2 2 2. + 0 + 1.3910960406064987e-002 + 2.3350890725851059e-002 + -2.6776230335235596e-001 + <_> + + <_> + + + + <_> + 0 5 10 4 -1. + <_> + 0 5 5 2 2. + <_> + 5 7 5 2 2. + 0 + -2.5405980646610260e-002 + -2.9497951269149780e-001 + 3.8374088704586029e-002 + <_> + + <_> + + + + <_> + 8 5 10 4 -1. + <_> + 13 5 5 2 2. + <_> + 8 7 5 2 2. + 0 + 1.6777290403842926e-001 + 2.8599929646588862e-004 + -5.5159300565719604e-001 + <_> + + <_> + + + + <_> + 1 1 12 2 -1. + <_> + 1 1 6 1 2. + <_> + 7 2 6 1 2. + 0 + 2.3761730641126633e-002 + -4.5785948634147644e-002 + 2.5161430239677429e-001 + <_> + + <_> + + + + <_> + 2 0 15 2 -1. + <_> + 7 0 5 2 3. + 0 + 6.6237300634384155e-002 + -3.4752521663904190e-002 + 2.6538351178169250e-001 + <_> + + <_> + + + + <_> + 0 5 10 4 -1. + <_> + 0 5 5 2 2. + <_> + 5 7 5 2 2. + 0 + 8.1444196403026581e-002 + 3.5755679011344910e-002 + -3.4804859757423401e-001 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + 2.3394089657813311e-003 + -3.3602658659219742e-002 + 1.0252500325441360e-001 + <_> + + <_> + + + + <_> + 3 2 1 3 -1. + <_> + 2 3 1 1 3. + 1 + 4.5066410675644875e-003 + 4.4362049549818039e-002 + -2.4036149680614471e-001 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + -1.0031039710156620e-004 + 6.1728168278932571e-002 + -5.3097378462553024e-002 + <_> + + <_> + + + + <_> + 6 6 2 2 -1. + <_> + 6 6 1 1 2. + <_> + 7 7 1 1 2. + 0 + 3.0237529426813126e-003 + -6.2164731323719025e-002 + 1.8157570064067841e-001 + <_> + + <_> + + + + <_> + 11 0 3 1 -1. + <_> + 12 1 1 1 3. + 1 + -6.1851800419390202e-003 + 9.2360317707061768e-002 + -1.8650660291314125e-002 + <_> + + <_> + + + + <_> + 5 3 1 2 -1. + <_> + 5 4 1 1 2. + 0 + -9.3809583631809801e-005 + 8.8021188974380493e-002 + -1.2617850303649902e-001 + <_> + + <_> + + + + <_> + 13 3 2 1 -1. + <_> + 13 3 1 1 2. + 1 + 1.4543529599905014e-002 + 2.8216699138283730e-002 + -3.8093110918998718e-001 + <_> + + <_> + + + + <_> + 5 3 1 2 -1. + <_> + 5 3 1 1 2. + 1 + 8.3325942978262901e-003 + 2.8149429708719254e-002 + -3.9534220099449158e-001 + <_> + + <_> + + + + <_> + 13 5 3 3 -1. + <_> + 14 5 1 3 3. + 0 + -9.0263289166614413e-005 + 1.0053239762783051e-001 + -1.6846680641174316e-001 + <_> + + <_> + + + + <_> + 7 4 5 3 -1. + <_> + 6 5 5 1 3. + 1 + -4.0444839745759964e-002 + 4.4246968626976013e-001 + -2.5906469672918320e-002 + <_> + + <_> + + + + <_> + 5 9 8 1 -1. + <_> + 7 9 4 1 2. + 0 + -1.5071580186486244e-002 + -3.9157819747924805e-001 + 3.2732911407947540e-002 + <_> + + <_> + + + + <_> + 0 0 6 9 -1. + <_> + 2 0 2 9 3. + 0 + -2.4117240682244301e-002 + 1.0829959809780121e-001 + -1.0823729634284973e-001 + <_> + + <_> + + + + <_> + 3 5 12 3 -1. + <_> + 6 5 6 3 2. + 0 + 4.8642940819263458e-002 + 2.5470780208706856e-002 + -4.2936301231384277e-001 + <_> + + <_> + + + + <_> + 4 4 3 4 -1. + <_> + 5 4 1 4 3. + 0 + -6.2909321859478951e-003 + 1.6408300399780273e-001 + -6.6978372633457184e-002 + <_> + + <_> + + + + <_> + 11 0 3 1 -1. + <_> + 12 1 1 1 3. + 1 + -2.8071459382772446e-002 + -5.0821262598037720e-001 + 4.2055668309330940e-003 + <_> + + <_> + + + + <_> + 7 0 1 3 -1. + <_> + 6 1 1 1 3. + 1 + 9.8752342164516449e-003 + 3.0895600095391273e-002 + -3.6008161306381226e-001 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 0 11 9 1 2. + 0 + 3.3613730221986771e-002 + 3.5042371600866318e-002 + -3.0913650989532471e-001 + <_> + + <_> + + + + <_> + 2 5 4 3 -1. + <_> + 3 5 2 3 2. + 0 + -9.5183821395039558e-003 + 1.4006739854812622e-001 + -8.0449193716049194e-002 + <_> + + <_> + + + + <_> + 15 6 2 4 -1. + <_> + 14 7 2 2 2. + 1 + 2.9920000582933426e-002 + 9.9910451099276543e-003 + -1.4463490247726440e-001 + <_> + + <_> + + + + <_> + 3 6 4 2 -1. + <_> + 4 7 2 2 2. + 1 + -2.4601869285106659e-002 + -3.5186180472373962e-001 + 3.2366871833801270e-002 + <_> + + <_> + + + + <_> + 1 0 16 9 -1. + <_> + 1 3 16 3 3. + 0 + 2.9126951098442078e-001 + -2.5616630911827087e-002 + 4.3393591046333313e-001 + <_> + + <_> + + + + <_> + 4 8 6 4 -1. + <_> + 6 8 2 4 3. + 0 + -4.0764931589365005e-002 + -5.0976359844207764e-001 + 2.2032100707292557e-002 + <_> + + <_> + + + + <_> + 15 3 3 3 -1. + <_> + 15 4 3 1 3. + 0 + 1.7800629138946533e-002 + 1.9135050475597382e-002 + -4.2754751443862915e-001 + <_> + + <_> + + + + <_> + 7 0 3 3 -1. + <_> + 7 1 3 1 3. + 0 + 8.7978048250079155e-003 + -6.5080061554908752e-002 + 1.5290130674839020e-001 + <_> + + <_> + + + + <_> + 11 0 3 3 -1. + <_> + 11 1 3 1 3. + 0 + -6.4738159999251366e-003 + 1.6798080503940582e-001 + -5.1510188728570938e-002 + <_> + + <_> + + + + <_> + 0 3 3 3 -1. + <_> + 0 4 3 1 3. + 0 + -1.6864249482750893e-002 + -5.1681691408157349e-001 + 2.2280450910329819e-002 + <_> + + <_> + + + + <_> + 11 8 3 4 -1. + <_> + 12 8 1 4 3. + 0 + -1.0029999539256096e-002 + -3.4445670247077942e-001 + 2.4154469370841980e-002 + <_> + + <_> + + + + <_> + 1 0 14 2 -1. + <_> + 1 0 7 1 2. + <_> + 8 1 7 1 2. + 0 + 2.3689860478043556e-002 + -5.5780500173568726e-002 + 1.7974789440631866e-001 + <_> + + <_> + + + + <_> + 11 10 2 1 -1. + <_> + 11 10 1 1 2. + 0 + -3.5954909399151802e-003 + -2.9106938838958740e-001 + 1.8568839877843857e-002 + <_> + + <_> + + + + <_> + 1 10 16 2 -1. + <_> + 5 10 8 2 2. + 0 + -3.5044439136981964e-002 + 1.4640870690345764e-001 + -7.3545977473258972e-002 + <_> + + <_> + + + + <_> + 2 11 16 1 -1. + <_> + 6 11 8 1 2. + 0 + 5.0175017677247524e-003 + -6.3143156468868256e-002 + 1.2632110714912415e-001 + <_> + + <_> + + + + <_> + 4 8 3 4 -1. + <_> + 5 8 1 4 3. + 0 + -1.3052280060946941e-002 + -4.5200330018997192e-001 + 2.3266959935426712e-002 + <_> + + <_> + + + + <_> + 16 5 2 7 -1. + <_> + 16 5 1 7 2. + 0 + -1.9564910326153040e-003 + 7.2890207171440125e-002 + -1.5138550102710724e-001 + <_> + + <_> + + + + <_> + 0 5 2 7 -1. + <_> + 1 5 1 7 2. + 0 + 1.9179390743374825e-002 + -2.7251120656728745e-002 + 4.2502841353416443e-001 + <_> + + <_> + + + + <_> + 16 7 2 2 -1. + <_> + 16 8 2 1 2. + 0 + 9.5272713224403560e-005 + -1.3008250296115875e-001 + 3.9709929376840591e-002 + <_> + + <_> + + + + <_> + 8 8 2 2 -1. + <_> + 8 8 1 2 2. + 1 + -1.4395490288734436e-002 + -2.2929459810256958e-001 + 4.1678968816995621e-002 + <_> + + <_> + + + + <_> + 7 8 4 3 -1. + <_> + 7 9 4 1 3. + 0 + -1.1709270067512989e-002 + 2.5639939308166504e-001 + -4.5481789857149124e-002 + <_> + + <_> + + + + <_> + 8 7 2 3 -1. + <_> + 8 8 2 1 3. + 0 + -7.6440530829131603e-003 + 2.8145501017570496e-001 + -4.3814260512590408e-002 + <_> + + <_> + + + + <_> + 16 7 2 2 -1. + <_> + 16 8 2 1 2. + 0 + 1.7276149243116379e-002 + 1.1722300201654434e-002 + -3.9212688803672791e-001 + <_> + + <_> + + + + <_> + 0 7 2 2 -1. + <_> + 0 8 2 1 2. + 0 + -2.8190009761601686e-003 + -2.8279209136962891e-001 + 3.6502439528703690e-002 + <_> + + <_> + + + + <_> + 6 5 8 6 -1. + <_> + 6 8 8 3 2. + 0 + -1.8481500446796417e-002 + -5.1169121265411377e-001 + 1.1270510032773018e-002 + <_> + + <_> + + + + <_> + 5 3 3 2 -1. + <_> + 6 4 1 2 3. + 1 + 2.3208990693092346e-002 + -2.9588380828499794e-002 + 3.4806481003761292e-001 + <_> + + <_> + + + + <_> + 14 3 1 2 -1. + <_> + 14 4 1 1 2. + 0 + 3.8326040375977755e-003 + -1.6199409961700439e-002 + 2.3312510550022125e-001 + <_> + + <_> + + + + <_> + 3 3 1 2 -1. + <_> + 3 4 1 1 2. + 0 + -1.2569040700327605e-004 + 8.2235969603061676e-002 + -1.2257509678602219e-001 + <_> + + <_> + + + + <_> + 11 0 3 1 -1. + <_> + 12 0 1 1 3. + 0 + -4.9403999000787735e-003 + -3.2972040772438049e-001 + 1.6205759719014168e-002 + <_> + + <_> + + + + <_> + 7 10 2 2 -1. + <_> + 7 10 1 1 2. + <_> + 8 11 1 1 2. + 0 + -9.9995522759854794e-005 + 1.0087980329990387e-001 + -8.4534652531147003e-002 + <_> + + <_> + + + + <_> + 14 0 3 1 -1. + <_> + 15 1 1 1 3. + 1 + -2.0880589261651039e-002 + -5.3558897972106934e-001 + 6.1522522009909153e-003 + <_> + + <_> + + + + <_> + 4 0 1 3 -1. + <_> + 3 1 1 1 3. + 1 + 9.4737410545349121e-003 + 2.2640680894255638e-002 + -3.5979229211807251e-001 + <_> + + <_> + + + + <_> + 15 6 2 4 -1. + <_> + 15 6 1 4 2. + 1 + 1.0163559578359127e-002 + -1.7618730664253235e-002 + 1.7577609419822693e-001 + <_> + + <_> + + + + <_> + 3 0 2 3 -1. + <_> + 2 1 2 1 3. + 1 + -1.6203319653868675e-002 + -3.0511561036109924e-001 + 2.7852470055222511e-002 + <_> + + <_> + + + + <_> + 11 1 5 6 -1. + <_> + 11 1 5 3 2. + 1 + -2.0264959335327148e-001 + 9.8889827728271484e-002 + -1.6635639593005180e-002 + <_> + + <_> + + + + <_> + 7 1 6 5 -1. + <_> + 7 1 3 5 2. + 1 + -1.8808260560035706e-001 + -3.3819800615310669e-001 + 2.7649369090795517e-002 + <_> + + <_> + + + + <_> + 7 9 4 3 -1. + <_> + 7 10 4 1 3. + 0 + -7.3039499111473560e-003 + 1.6829389333724976e-001 + -4.9701988697052002e-002 + <_> + + <_> + + + + <_> + 2 2 3 9 -1. + <_> + 3 5 1 3 9. + 0 + -2.1467709541320801e-001 + -8.2673180103302002e-001 + 9.7144627943634987e-003 + <_> + + <_> + + + + <_> + 14 0 4 3 -1. + <_> + 13 1 4 1 3. + 1 + -4.4587019830942154e-002 + 3.8129490613937378e-001 + -2.8068590909242630e-002 + <_> + + <_> + + + + <_> + 2 2 14 3 -1. + <_> + 2 3 14 1 3. + 0 + 2.2911230102181435e-002 + -7.0285782217979431e-002 + 1.2464100122451782e-001 + <_> + + <_> + + + + <_> + 11 3 1 6 -1. + <_> + 11 6 1 3 2. + 0 + 9.4582252204418182e-003 + -5.0712950527667999e-002 + 6.1203949153423309e-002 + <_> + + <_> + + + + <_> + 3 3 3 6 -1. + <_> + 4 5 1 2 9. + 0 + -1.2501789629459381e-001 + -6.4006787538528442e-001 + 1.1908539570868015e-002 + <_> + + <_> + + + + <_> + 14 0 4 3 -1. + <_> + 13 1 4 1 3. + 1 + 1.5444659627974033e-002 + -5.8896608650684357e-002 + 1.0827670246362686e-001 + <_> + + <_> + + + + <_> + 4 0 4 1 -1. + <_> + 5 0 2 1 2. + 0 + 1.5270099975168705e-003 + 4.3858438730239868e-002 + -1.9123759865760803e-001 + <_> + + <_> + + + + <_> + 12 0 6 4 -1. + <_> + 15 0 3 2 2. + <_> + 12 2 3 2 2. + 0 + -5.3543699905276299e-003 + 3.6371748894453049e-002 + -4.0430441498756409e-002 + <_> + + <_> + + + + <_> + 0 0 6 4 -1. + <_> + 0 0 3 2 2. + <_> + 3 2 3 2 2. + 0 + -1.5797719359397888e-002 + 1.6159279644489288e-001 + -5.5993270128965378e-002 + <_> + + <_> + + + + <_> + 16 0 2 3 -1. + <_> + 15 1 2 1 3. + 1 + -1.2601099908351898e-002 + 1.7859940230846405e-001 + -2.9063930734992027e-002 + <_> + + <_> + + + + <_> + 4 0 3 4 -1. + <_> + 5 1 1 4 3. + 1 + 8.4664657711982727e-002 + -1.0474080219864845e-002 + 8.0984550714492798e-001 + <_> + + <_> + + + + <_> + 16 2 2 1 -1. + <_> + 16 2 1 1 2. + 0 + 1.0696209938032553e-004 + -4.8453640192747116e-002 + 6.7813120782375336e-002 + <_> + + <_> + + + + <_> + 0 2 2 1 -1. + <_> + 1 2 1 1 2. + 0 + -1.1764469672925770e-004 + 5.3902100771665573e-002 + -1.8017460405826569e-001 + <_> + + <_> + + + + <_> + 16 0 2 1 -1. + <_> + 16 0 1 1 2. + 1 + 9.8984912037849426e-003 + 1.9158050417900085e-002 + -2.7733120322227478e-001 + <_> + + <_> + + + + <_> + 2 4 2 2 -1. + <_> + 2 4 1 1 2. + <_> + 3 5 1 1 2. + 0 + -1.1610490037128329e-004 + 9.6694946289062500e-002 + -8.9068733155727386e-002 + <_> + + <_> + + + + <_> + 14 4 2 2 -1. + <_> + 15 4 1 1 2. + <_> + 14 5 1 1 2. + 0 + 3.3369490411132574e-003 + -3.5014580935239792e-002 + 2.6304298639297485e-001 + <_> + + <_> + + + + <_> + 2 4 2 2 -1. + <_> + 2 4 1 1 2. + <_> + 3 5 1 1 2. + 0 + 7.8220298746600747e-005 + -8.2813262939453125e-002 + 1.0475490242242813e-001 + <_> + + <_> + + + + <_> + 16 0 2 1 -1. + <_> + 16 0 1 1 2. + 1 + -9.5098288729786873e-003 + -2.6514530181884766e-001 + 2.4094179272651672e-002 + <_> + + <_> + + + + <_> + 9 3 3 3 -1. + <_> + 8 4 3 1 3. + 1 + -1.2982529588043690e-002 + 6.4530380070209503e-002 + -1.3815590739250183e-001 + <_> + + <_> + + + + <_> + 10 5 2 4 -1. + <_> + 11 5 1 2 2. + <_> + 10 7 1 2 2. + 0 + 3.7175510078668594e-003 + -3.4010428935289383e-002 + 7.3918223381042480e-002 + <_> + + <_> + + + + <_> + 6 5 2 4 -1. + <_> + 6 5 1 2 2. + <_> + 7 7 1 2 2. + 0 + -8.9635830372571945e-003 + 3.1214600801467896e-001 + -3.1653881072998047e-002 + <_> + + <_> + + + + <_> + 12 0 2 9 -1. + <_> + 12 0 1 9 2. + 1 + -3.8576980587095022e-003 + 6.2791481614112854e-002 + -4.3215770274400711e-002 + <_> + + <_> + + + + <_> + 6 0 9 2 -1. + <_> + 6 0 9 1 2. + 1 + 5.7608600705862045e-002 + 1.8788769841194153e-002 + -5.0399798154830933e-001 + <_> + + <_> + + + + <_> + 7 10 4 2 -1. + <_> + 8 10 2 2 2. + 0 + 3.1125131063163280e-003 + 3.5144101828336716e-002 + -2.3461879789829254e-001 + <_> + + <_> + + + + <_> + 0 0 4 1 -1. + <_> + 1 0 2 1 2. + 0 + -7.6296702027320862e-003 + -5.3097987174987793e-001 + 1.4961520209908485e-002 + <_> + + <_> + + + + <_> + 12 1 6 2 -1. + <_> + 12 1 3 2 2. + 0 + -6.5751709043979645e-003 + 5.0126578658819199e-002 + -3.6364991217851639e-002 + <_> + + <_> + + + + <_> + 0 1 6 2 -1. + <_> + 3 1 3 2 2. + 0 + 2.1125350147485733e-002 + -2.4575449526309967e-002 + 3.9593890309333801e-001 + <_> + + <_> + + + + <_> + 11 7 1 3 -1. + <_> + 11 8 1 1 3. + 0 + -3.0265909153968096e-003 + 1.1584889888763428e-001 + -2.8826450929045677e-002 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + 1.2929990189149976e-003 + 2.6206869632005692e-002 + -3.0620381236076355e-001 + <_> + + <_> + + + + <_> + 16 8 2 4 -1. + <_> + 17 8 1 2 2. + <_> + 16 10 1 2 2. + 0 + 9.5255090855062008e-005 + -9.1093979775905609e-002 + 5.6246880441904068e-002 + <_> + + <_> + + + + <_> + 0 8 2 4 -1. + <_> + 0 8 1 2 2. + <_> + 1 10 1 2 2. + 0 + -1.1346739716827869e-002 + 4.4599908590316772e-001 + -1.9490949809551239e-002 + <_> + + <_> + + + + <_> + 16 6 2 2 -1. + <_> + 16 6 2 1 2. + 1 + -3.9465399459004402e-003 + 7.9005546867847443e-002 + -1.0729230195283890e-001 + <_> + + <_> + + + + <_> + 2 6 2 2 -1. + <_> + 2 6 1 2 2. + 1 + -1.3709669932723045e-002 + -2.6804009079933167e-001 + 3.4483738243579865e-002 + <_> + + <_> + + + + <_> + 8 6 4 2 -1. + <_> + 9 6 2 2 2. + 0 + -3.7944439798593521e-002 + -3.8875928521156311e-001 + 4.3536517769098282e-003 + <_> + + <_> + + + + <_> + 6 6 4 2 -1. + <_> + 7 6 2 2 2. + 0 + -5.1233209669589996e-003 + 1.1811450123786926e-001 + -7.6210573315620422e-002 + -1.5979900360107422e+000 + 17 + -1 + <_> + + + <_> + + <_> + + + + <_> + 6 7 2 2 -1. + <_> + 6 7 1 1 2. + <_> + 7 8 1 1 2. + 0 + 5.4262988269329071e-003 + -3.0050519108772278e-001 + 6.7211848497390747e-001 + <_> + + <_> + + + + <_> + 7 3 4 3 -1. + <_> + 7 4 4 1 3. + 0 + -1.9688049331307411e-002 + 4.2098221182823181e-001 + -1.8416300415992737e-001 + <_> + + <_> + + + + <_> + 7 0 3 4 -1. + <_> + 7 1 3 2 2. + 0 + 1.0437469929456711e-001 + 7.9985307529568672e-003 + -1.3431090087890625e+003 + <_> + + <_> + + + + <_> + 6 6 6 2 -1. + <_> + 8 6 2 2 3. + 0 + -1.8829930573701859e-002 + 1.8901979923248291e-001 + -3.1901699304580688e-001 + <_> + + <_> + + + + <_> + 1 0 4 7 -1. + <_> + 3 0 2 7 2. + 0 + -9.0354820713400841e-003 + 9.9983938038349152e-002 + -3.9372038841247559e-001 + <_> + + <_> + + + + <_> + 11 6 3 1 -1. + <_> + 12 6 1 1 3. + 0 + 8.2086473703384399e-003 + -1.3759939372539520e-001 + 4.2291760444641113e-001 + <_> + + <_> + + + + <_> + 7 1 5 4 -1. + <_> + 7 1 5 2 2. + 1 + 1.9290760159492493e-001 + -1.9123300909996033e-002 + -7.1446881103515625e+002 + <_> + + <_> + + + + <_> + 10 7 2 2 -1. + <_> + 11 7 1 1 2. + <_> + 10 8 1 1 2. + 0 + 7.5846072286367416e-003 + -3.0995719134807587e-002 + 2.8077399730682373e-001 + <_> + + <_> + + + + <_> + 6 7 2 2 -1. + <_> + 6 7 1 1 2. + <_> + 7 8 1 1 2. + 0 + 5.4157869890332222e-003 + 9.7298726439476013e-002 + -4.8166570067405701e-001 + <_> + + <_> + + + + <_> + 11 6 3 1 -1. + <_> + 12 6 1 1 3. + 0 + -3.2942730467766523e-003 + 2.7938959002494812e-001 + -4.1473869234323502e-002 + <_> + + <_> + + + + <_> + 0 3 3 1 -1. + <_> + 1 3 1 1 3. + 0 + -1.1245800124015659e-004 + 1.5364760160446167e-001 + -1.6658879816532135e-001 + <_> + + <_> + + + + <_> + 1 6 16 4 -1. + <_> + 9 6 8 2 2. + <_> + 1 8 8 2 2. + 0 + 1.7863340675830841e-002 + 7.2040103375911713e-002 + -3.2273280620574951e-001 + <_> + + <_> + + + + <_> + 4 4 4 3 -1. + <_> + 3 5 4 1 3. + 1 + -9.2770978808403015e-003 + 1.5470069646835327e-001 + -1.5196369588375092e-001 + <_> + + <_> + + + + <_> + 9 3 4 8 -1. + <_> + 9 7 4 4 2. + 0 + 4.9009688198566437e-002 + -2.1719500422477722e-001 + 4.7354388982057571e-002 + <_> + + <_> + + + + <_> + 3 4 12 2 -1. + <_> + 3 5 12 1 2. + 0 + -4.0119819343090057e-002 + 2.7460759878158569e-001 + -8.6348831653594971e-002 + <_> + + <_> + + + + <_> + 11 0 3 12 -1. + <_> + 11 6 3 6 2. + 0 + 1.9793610274791718e-001 + 1.8624650314450264e-002 + -5.3495907783508301e-001 + <_> + + <_> + + + + <_> + 4 0 3 12 -1. + <_> + 4 6 3 6 2. + 0 + 3.8065958768129349e-002 + -2.5904580950737000e-001 + 1.0311370342969894e-001 + <_> + + <_> + + + + <_> + 3 0 12 4 -1. + <_> + 3 1 12 2 2. + 0 + 3.7357859313488007e-002 + -1.1903320252895355e-001 + 1.6979260742664337e-001 + <_> + + <_> + + + + <_> + 0 0 18 3 -1. + <_> + 6 0 6 3 3. + 0 + -8.9973270893096924e-002 + 1.6638070344924927e-001 + -1.2824270129203796e-001 + <_> + + <_> + + + + <_> + 17 1 1 2 -1. + <_> + 17 2 1 1 2. + 0 + -3.6491220816969872e-003 + -2.0123389363288879e-001 + 2.1278910338878632e-002 + <_> + + <_> + + + + <_> + 0 1 1 2 -1. + <_> + 0 2 1 1 2. + 0 + -9.1840978711843491e-005 + 1.0628490149974823e-001 + -1.7940549552440643e-001 + <_> + + <_> + + + + <_> + 15 1 3 1 -1. + <_> + 16 2 1 1 3. + 1 + -1.1649549938738346e-002 + -4.3736520409584045e-001 + 3.0724890530109406e-002 + <_> + + <_> + + + + <_> + 3 1 1 3 -1. + <_> + 2 2 1 1 3. + 1 + -7.1681910194456577e-003 + -3.2502311468124390e-001 + 5.0562191754579544e-002 + <_> + + <_> + + + + <_> + 7 10 7 2 -1. + <_> + 7 11 7 1 2. + 0 + 3.7875070702284575e-003 + -1.9940949976444244e-001 + 7.7970452606678009e-002 + <_> + + <_> + + + + <_> + 3 5 3 3 -1. + <_> + 4 5 1 3 3. + 0 + -5.3427959792315960e-003 + 1.4677309989929199e-001 + -1.1329550296068192e-001 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 5 1 3 3. + 0 + 2.3160399869084358e-002 + -4.2170170694589615e-002 + 3.1582599878311157e-001 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 6 2 2 2. + 0 + -7.6770680025219917e-003 + 3.1857290863990784e-001 + -5.1229890435934067e-002 + <_> + + <_> + + + + <_> + 8 0 3 3 -1. + <_> + 9 0 1 3 3. + 0 + 7.1013960987329483e-003 + 3.1445540487766266e-002 + -3.2645389437675476e-001 + <_> + + <_> + + + + <_> + 4 6 4 2 -1. + <_> + 5 7 2 2 2. + 1 + -2.0252959802746773e-002 + -4.0472069382667542e-001 + 3.4693039953708649e-002 + <_> + + <_> + + + + <_> + 7 0 4 4 -1. + <_> + 8 0 2 4 2. + 0 + -9.6413884311914444e-003 + -3.3648169040679932e-001 + 4.1794441640377045e-002 + <_> + + <_> + + + + <_> + 7 2 4 3 -1. + <_> + 7 3 4 1 3. + 0 + -2.3985069245100021e-002 + 3.1614878773689270e-001 + -4.6249549835920334e-002 + <_> + + <_> + + + + <_> + 15 5 3 1 -1. + <_> + 16 5 1 1 3. + 0 + -1.4840610325336456e-002 + -7.3656052350997925e-001 + 8.9046377688646317e-003 + <_> + + <_> + + + + <_> + 0 5 3 1 -1. + <_> + 1 5 1 1 3. + 0 + -9.4987051852513105e-005 + 1.1953199654817581e-001 + -1.1896529793739319e-001 + <_> + + <_> + + + + <_> + 11 2 3 4 -1. + <_> + 11 2 3 2 2. + 1 + 7.0412069559097290e-002 + -4.0320910513401031e-002 + 1.6706739366054535e-001 + <_> + + <_> + + + + <_> + 4 2 1 3 -1. + <_> + 3 3 1 1 3. + 1 + 4.9093589186668396e-003 + 4.8656750470399857e-002 + -2.8003680706024170e-001 + <_> + + <_> + + + + <_> + 6 10 6 1 -1. + <_> + 8 10 2 1 3. + 0 + -9.6227843314409256e-003 + -4.0062141418457031e-001 + 3.0084159225225449e-002 + <_> + + <_> + + + + <_> + 0 5 14 7 -1. + <_> + 7 5 7 7 2. + 0 + 1.6841889917850494e-001 + 1.9700720906257629e-002 + -5.4525882005691528e-001 + <_> + + <_> + + + + <_> + 17 0 1 2 -1. + <_> + 17 1 1 1 2. + 0 + 9.9319182336330414e-003 + 6.6423388198018074e-003 + -4.9300599098205566e-001 + <_> + + <_> + + + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + 0 + -9.2917856818530709e-005 + 7.3449976742267609e-002 + -1.6144999861717224e-001 + <_> + + <_> + + + + <_> + 11 5 3 2 -1. + <_> + 12 5 1 2 3. + 0 + 4.0923128835856915e-003 + -4.7123961150646210e-002 + 7.2986431419849396e-002 + <_> + + <_> + + + + <_> + 6 1 4 2 -1. + <_> + 7 1 2 2 2. + 0 + 8.6956098675727844e-003 + 2.1329889073967934e-002 + -5.1486510038375854e-001 + <_> + + <_> + + + + <_> + 11 5 3 2 -1. + <_> + 12 5 1 2 3. + 0 + -9.8282760009169579e-003 + 1.9071890413761139e-001 + -2.5422919541597366e-002 + <_> + + <_> + + + + <_> + 0 1 15 6 -1. + <_> + 5 3 5 2 9. + 0 + -7.6692271232604980e-001 + -6.6095298528671265e-001 + 1.8228070810437202e-002 + <_> + + <_> + + + + <_> + 6 1 12 2 -1. + <_> + 12 1 6 1 2. + <_> + 6 2 6 1 2. + 0 + -3.2330170273780823e-002 + 1.4530169963836670e-001 + -1.4983410015702248e-002 + <_> + + <_> + + + + <_> + 5 7 2 3 -1. + <_> + 5 7 1 3 2. + 1 + 1.0294170118868351e-002 + 2.4919189512729645e-002 + -4.5525848865509033e-001 + <_> + + <_> + + + + <_> + 11 5 3 2 -1. + <_> + 12 5 1 2 3. + 0 + -3.0171580612659454e-002 + -4.6189090609550476e-001 + 3.3882521092891693e-003 + <_> + + <_> + + + + <_> + 4 5 3 2 -1. + <_> + 5 5 1 2 3. + 0 + -4.7148168087005615e-003 + 1.9720679521560669e-001 + -6.3187547028064728e-002 + <_> + + <_> + + + + <_> + 9 5 4 3 -1. + <_> + 10 5 2 3 2. + 0 + -9.0056415647268295e-003 + 1.8307769298553467e-001 + -7.2591513395309448e-002 + <_> + + <_> + + + + <_> + 5 5 4 3 -1. + <_> + 6 5 2 3 2. + 0 + -1.0803050361573696e-002 + 2.9357129335403442e-001 + -5.2083630114793777e-002 + <_> + + <_> + + + + <_> + 8 3 6 2 -1. + <_> + 10 3 2 2 3. + 0 + -2.2687910124659538e-002 + -2.2910049557685852e-001 + 2.9485609382390976e-002 + <_> + + <_> + + + + <_> + 7 8 3 1 -1. + <_> + 8 9 1 1 3. + 1 + 8.0813551321625710e-003 + 2.8026320040225983e-002 + -3.9691281318664551e-001 + <_> + + <_> + + + + <_> + 10 5 2 4 -1. + <_> + 11 5 1 2 2. + <_> + 10 7 1 2 2. + 0 + 9.2932283878326416e-003 + -2.3965410888195038e-002 + 1.1968089640140533e-001 + <_> + + <_> + + + + <_> + 4 3 6 2 -1. + <_> + 6 3 2 2 3. + 0 + -2.3424040526151657e-002 + -2.8772619366645813e-001 + 3.8220979273319244e-002 + <_> + + <_> + + + + <_> + 6 1 12 2 -1. + <_> + 12 1 6 1 2. + <_> + 6 2 6 1 2. + 0 + -7.5453490018844604e-002 + -8.9001321792602539e-001 + 9.9092291202396154e-004 + <_> + + <_> + + + + <_> + 0 1 12 2 -1. + <_> + 0 1 6 1 2. + <_> + 6 2 6 1 2. + 0 + -2.0602909848093987e-002 + 2.4050650000572205e-001 + -4.7928169369697571e-002 + <_> + + <_> + + + + <_> + 8 0 2 3 -1. + <_> + 8 1 2 1 3. + 0 + -7.1518528275191784e-003 + 2.2132579982280731e-001 + -6.0036528855562210e-002 + <_> + + <_> + + + + <_> + 7 0 3 2 -1. + <_> + 7 1 3 1 2. + 0 + 4.1199801489710808e-003 + -8.7927162647247314e-002 + 1.6041250526905060e-001 + <_> + + <_> + + + + <_> + 12 0 3 3 -1. + <_> + 13 1 1 3 3. + 1 + 3.9387959986925125e-002 + 1.0958000086247921e-002 + -2.2292630374431610e-001 + <_> + + <_> + + + + <_> + 6 0 3 3 -1. + <_> + 5 1 3 1 3. + 1 + 1.0546170175075531e-002 + 5.3426049649715424e-002 + -2.7179110050201416e-001 + <_> + + <_> + + + + <_> + 10 0 4 2 -1. + <_> + 11 0 2 2 2. + 0 + -1.1257980018854141e-002 + -5.5188918113708496e-001 + 1.2321829795837402e-002 + <_> + + <_> + + + + <_> + 5 7 2 1 -1. + <_> + 6 7 1 1 2. + 0 + 2.8547599868034013e-005 + -1.0614909976720810e-001 + 1.0695829987525940e-001 + <_> + + <_> + + + + <_> + 11 2 3 4 -1. + <_> + 11 2 3 2 2. + 1 + 1.4024679549038410e-003 + -6.3827931880950928e-002 + 3.6412809044122696e-002 + <_> + + <_> + + + + <_> + 6 6 2 4 -1. + <_> + 6 6 1 4 2. + 1 + -2.5279590860009193e-002 + -2.3291009664535522e-001 + 5.1007620990276337e-002 + <_> + + <_> + + + + <_> + 16 5 2 6 -1. + <_> + 16 7 2 2 3. + 0 + 5.5645029991865158e-002 + 1.4120610430836678e-003 + -5.9250742197036743e-001 + <_> + + <_> + + + + <_> + 0 5 2 6 -1. + <_> + 0 7 2 2 3. + 0 + 2.3897020146250725e-002 + 2.4702310562133789e-002 + -4.1002118587493896e-001 + <_> + + <_> + + + + <_> + 15 6 3 2 -1. + <_> + 16 6 1 2 3. + 0 + 1.7050260677933693e-002 + 8.3261402323842049e-003 + -3.5209038853645325e-001 + <_> + + <_> + + + + <_> + 0 6 3 2 -1. + <_> + 1 6 1 2 3. + 0 + -7.8733973205089569e-003 + 2.3625299334526062e-001 + -4.2287878692150116e-002 + <_> + + <_> + + + + <_> + 15 5 3 4 -1. + <_> + 16 5 1 4 3. + 0 + -2.5967480614781380e-002 + -3.5506701469421387e-001 + 1.0870999656617641e-002 + <_> + + <_> + + + + <_> + 0 5 3 4 -1. + <_> + 1 5 1 4 3. + 0 + 5.1288940012454987e-003 + -7.0529833436012268e-002 + 1.7466700077056885e-001 + <_> + + <_> + + + + <_> + 17 4 1 3 -1. + <_> + 17 5 1 1 3. + 0 + 5.2364799194037914e-003 + 2.0953370258212090e-002 + -3.3864089846611023e-001 + <_> + + <_> + + + + <_> + 4 0 4 2 -1. + <_> + 5 0 2 2 2. + 0 + 5.0087850540876389e-003 + 2.9292659834027290e-002 + -3.4224748611450195e-001 + <_> + + <_> + + + + <_> + 11 0 1 2 -1. + <_> + 11 0 1 1 2. + 1 + 1.9541790708899498e-002 + 1.5414350200444460e-003 + -2.3330779373645782e-001 + <_> + + <_> + + + + <_> + 7 0 2 1 -1. + <_> + 7 0 1 1 2. + 1 + 1.2687229551374912e-002 + -3.2202750444412231e-002 + 3.4885931015014648e-001 + <_> + + <_> + + + + <_> + 1 4 17 4 -1. + <_> + 1 5 17 2 2. + 0 + -3.1968150287866592e-002 + 7.6574698090553284e-002 + -1.1693509668111801e-001 + <_> + + <_> + + + + <_> + 0 0 18 12 -1. + <_> + 0 3 18 6 2. + 0 + -8.4089142084121704e-001 + -3.7160590291023254e-001 + 2.8848029673099518e-002 + <_> + + <_> + + + + <_> + 14 9 1 2 -1. + <_> + 14 9 1 1 2. + 1 + -1.2128669914091006e-004 + 3.5618349909782410e-002 + -8.1658117473125458e-002 + <_> + + <_> + + + + <_> + 4 9 2 1 -1. + <_> + 4 9 1 1 2. + 1 + -1.1257309961365536e-004 + 6.1848249286413193e-002 + -1.7893390357494354e-001 + <_> + + <_> + + + + <_> + 8 5 10 4 -1. + <_> + 13 5 5 2 2. + <_> + 8 7 5 2 2. + 0 + 1.5692369639873505e-001 + 2.0418250933289528e-003 + -3.8372790813446045e-001 + <_> + + <_> + + + + <_> + 0 4 1 3 -1. + <_> + 0 5 1 1 3. + 0 + 2.9397590551525354e-003 + 3.6909751594066620e-002 + -2.6979750394821167e-001 + <_> + + <_> + + + + <_> + 14 6 3 3 -1. + <_> + 15 6 1 3 3. + 0 + -2.5340609718114138e-003 + 1.2149509787559509e-001 + -1.0271450132131577e-001 + <_> + + <_> + + + + <_> + 1 6 3 3 -1. + <_> + 2 6 1 3 3. + 0 + 7.0472261868417263e-003 + -5.1498528569936752e-002 + 1.9663390517234802e-001 + <_> + + <_> + + + + <_> + 14 5 3 1 -1. + <_> + 15 6 1 1 3. + 1 + -3.5378870088607073e-003 + 1.1377040296792984e-001 + -1.2270720303058624e-001 + <_> + + <_> + + + + <_> + 9 2 8 2 -1. + <_> + 9 2 4 2 2. + 1 + -1.9171670079231262e-001 + 2.0281049609184265e-001 + -5.9293661266565323e-002 + <_> + + <_> + + + + <_> + 14 5 3 1 -1. + <_> + 15 6 1 1 3. + 1 + -2.8194790706038475e-002 + -4.0183740854263306e-001 + 9.4950878992676735e-003 + <_> + + <_> + + + + <_> + 4 5 1 3 -1. + <_> + 3 6 1 1 3. + 1 + -2.7471040375530720e-003 + 1.3657639920711517e-001 + -8.3562202751636505e-002 + <_> + + <_> + + + + <_> + 12 5 2 2 -1. + <_> + 13 5 1 1 2. + <_> + 12 6 1 1 2. + 0 + -2.3678690195083618e-003 + 2.8895410895347595e-001 + -7.0791177451610565e-002 + <_> + + <_> + + + + <_> + 8 9 2 1 -1. + <_> + 8 9 1 1 2. + 1 + -1.0364330373704433e-002 + -3.6532059311866760e-001 + 3.1027559190988541e-002 + <_> + + <_> + + + + <_> + 16 0 2 1 -1. + <_> + 16 0 1 1 2. + 0 + -3.1868910882622004e-003 + 1.2471160292625427e-001 + -2.1058630198240280e-002 + <_> + + <_> + + + + <_> + 4 0 3 2 -1. + <_> + 4 0 3 1 2. + 1 + -1.5623000450432301e-002 + -2.9756268858909607e-001 + 3.3180721104145050e-002 + <_> + + <_> + + + + <_> + 2 0 16 2 -1. + <_> + 10 0 8 1 2. + <_> + 2 1 8 1 2. + 0 + 1.7447229474782944e-003 + -5.5369090288877487e-002 + 8.0895766615867615e-002 + <_> + + <_> + + + + <_> + 4 0 3 3 -1. + <_> + 4 1 3 1 3. + 0 + -8.7693594396114349e-003 + 2.0353169739246368e-001 + -5.9447389096021652e-002 + <_> + + <_> + + + + <_> + 16 0 2 1 -1. + <_> + 16 0 1 1 2. + 0 + 1.0933070007013157e-004 + -5.3917091339826584e-002 + 6.7618027329444885e-002 + <_> + + <_> + + + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + 0 + -1.2108810187783092e-004 + 5.5683720856904984e-002 + -1.7708249390125275e-001 + <_> + + <_> + + + + <_> + 14 0 4 4 -1. + <_> + 16 0 2 2 2. + <_> + 14 2 2 2 2. + 0 + -9.8970606923103333e-003 + 9.2097222805023193e-002 + -3.7907868623733521e-002 + <_> + + <_> + + + + <_> + 0 0 4 4 -1. + <_> + 0 0 2 2 2. + <_> + 2 2 2 2 2. + 0 + -5.3500072099268436e-003 + 1.4658580720424652e-001 + -7.1295157074928284e-002 + <_> + + <_> + + + + <_> + 14 0 3 1 -1. + <_> + 15 1 1 1 3. + 1 + -7.7157528139650822e-003 + -2.1293020248413086e-001 + 3.0109029263257980e-002 + <_> + + <_> + + + + <_> + 4 0 1 3 -1. + <_> + 3 1 1 1 3. + 1 + -7.2461022064089775e-003 + -2.4743880331516266e-001 + 3.6422520875930786e-002 + <_> + + <_> + + + + <_> + 5 2 8 3 -1. + <_> + 5 3 8 1 3. + 0 + 4.5332200825214386e-002 + -4.3887101113796234e-002 + 2.2771969437599182e-001 + <_> + + <_> + + + + <_> + 0 0 2 2 -1. + <_> + 0 0 1 1 2. + <_> + 1 1 1 1 2. + 0 + -1.0587189899524674e-004 + 1.0036029666662216e-001 + -9.9796630442142487e-002 + <_> + + <_> + + + + <_> + 6 0 12 2 -1. + <_> + 6 0 6 2 2. + 0 + -1.1086790263652802e-001 + -2.6335340738296509e-001 + 1.9541220739483833e-002 + <_> + + <_> + + + + <_> + 0 0 12 2 -1. + <_> + 6 0 6 2 2. + 0 + 1.4828580431640148e-002 + -6.1396230012178421e-002 + 1.5963110327720642e-001 + <_> + + <_> + + + + <_> + 8 5 10 4 -1. + <_> + 13 5 5 2 2. + <_> + 8 7 5 2 2. + 0 + 1.1451540194684640e-004 + -3.4139700233936310e-002 + 1.8776599317789078e-002 + <_> + + <_> + + + + <_> + 0 5 10 4 -1. + <_> + 0 5 5 2 2. + <_> + 5 7 5 2 2. + 0 + 1.0391230136156082e-001 + 1.8342059105634689e-002 + -5.5741232633590698e-001 + <_> + + <_> + + + + <_> + 17 4 1 3 -1. + <_> + 17 5 1 1 3. + 0 + -2.8403440956026316e-003 + -1.6176800429821014e-001 + 4.2230840772390366e-002 + <_> + + <_> + + + + <_> + 0 8 2 3 -1. + <_> + 1 8 1 3 2. + 0 + -3.9837881922721863e-003 + 1.2188349664211273e-001 + -7.5493358075618744e-002 + <_> + + <_> + + + + <_> + 12 9 6 2 -1. + <_> + 14 9 2 2 3. + 0 + -2.6931989938020706e-002 + -2.7949911355972290e-001 + 1.8144300207495689e-002 + <_> + + <_> + + + + <_> + 0 9 6 2 -1. + <_> + 2 9 2 2 3. + 0 + 6.3719637691974640e-003 + -7.2795078158378601e-002 + 1.5270389616489410e-001 + <_> + + <_> + + + + <_> + 10 4 3 5 -1. + <_> + 11 5 1 5 3. + 1 + 4.1068520396947861e-002 + -8.6038000881671906e-003 + 2.9300528764724731e-001 + <_> + + <_> + + + + <_> + 8 4 5 3 -1. + <_> + 7 5 5 1 3. + 1 + -3.8765709847211838e-002 + 2.6667380332946777e-001 + -3.6998551338911057e-002 + <_> + + <_> + + + + <_> + 9 8 2 1 -1. + <_> + 9 8 1 1 2. + 0 + -3.3269529230892658e-003 + -2.3761349916458130e-001 + 3.2018061727285385e-002 + <_> + + <_> + + + + <_> + 7 8 2 1 -1. + <_> + 8 8 1 1 2. + 0 + 8.5056803072802722e-005 + -7.0894226431846619e-002 + 1.2628500163555145e-001 + <_> + + <_> + + + + <_> + 6 8 6 2 -1. + <_> + 8 8 2 2 3. + 0 + 2.1096479147672653e-002 + 2.4189710617065430e-002 + -5.0479072332382202e-001 + <_> + + <_> + + + + <_> + 7 8 4 3 -1. + <_> + 7 9 4 1 3. + 0 + 1.5069710090756416e-002 + -4.9047719687223434e-002 + 2.0302620530128479e-001 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + -1.7079169629141688e-003 + 9.5796592533588409e-002 + -3.4222289919853210e-002 + <_> + + <_> + + + + <_> + 6 0 4 1 -1. + <_> + 7 0 2 1 2. + 0 + 4.1216560639441013e-003 + 2.4934209883213043e-002 + -3.6697131395339966e-001 + <_> + + <_> + + + + <_> + 10 5 2 4 -1. + <_> + 11 5 1 2 2. + <_> + 10 7 1 2 2. + 0 + 6.1798160895705223e-003 + -2.5011969730257988e-002 + 7.8190803527832031e-002 + <_> + + <_> + + + + <_> + 0 4 2 3 -1. + <_> + 0 5 2 1 3. + 0 + -1.0259440168738365e-002 + -3.8385409116744995e-001 + 2.3607190698385239e-002 + <_> + + <_> + + + + <_> + 10 6 2 2 -1. + <_> + 11 6 1 1 2. + <_> + 10 7 1 1 2. + 0 + 4.2493520304560661e-003 + -1.8063470721244812e-002 + 9.7392469644546509e-002 + <_> + + <_> + + + + <_> + 8 7 2 2 -1. + <_> + 8 7 1 2 2. + 1 + -1.8078900873661041e-002 + -2.8260070085525513e-001 + 3.2420400530099869e-002 + <_> + + <_> + + + + <_> + 15 4 1 2 -1. + <_> + 15 5 1 1 2. + 0 + -1.0033250146079808e-004 + 5.8378711342811584e-002 + -9.5965467393398285e-002 + <_> + + <_> + + + + <_> + 6 5 2 4 -1. + <_> + 6 5 1 2 2. + <_> + 7 7 1 2 2. + 0 + 5.5636470206081867e-003 + -6.2373951077461243e-002 + 1.3677039742469788e-001 + <_> + + <_> + + + + <_> + 12 3 1 4 -1. + <_> + 12 3 1 2 2. + 1 + 5.9635799378156662e-002 + 7.6047349721193314e-003 + -3.7049409747123718e-001 + <_> + + <_> + + + + <_> + 1 1 2 1 -1. + <_> + 2 1 1 1 2. + 0 + -1.1734029976651073e-004 + 5.6312419474124908e-002 + -1.6223900020122528e-001 + <_> + + <_> + + + + <_> + 12 0 6 4 -1. + <_> + 14 0 2 4 3. + 0 + 3.2071691006422043e-002 + 1.7075739800930023e-002 + -1.7555209994316101e-001 + <_> + + <_> + + + + <_> + 0 0 1 3 -1. + <_> + 0 1 1 1 3. + 0 + -9.0831192210316658e-005 + 9.6431486308574677e-002 + -9.5327220857143402e-002 + <_> + + <_> + + + + <_> + 5 0 12 2 -1. + <_> + 11 0 6 1 2. + <_> + 5 1 6 1 2. + 0 + 3.1735259108245373e-003 + -3.5405401140451431e-002 + 5.5357661098241806e-002 + <_> + + <_> + + + + <_> + 2 1 12 3 -1. + <_> + 6 1 4 3 3. + 0 + -2.9976980760693550e-002 + 8.3683349192142487e-002 + -1.0876650363206863e-001 + <_> + + <_> + + + + <_> + 5 2 8 3 -1. + <_> + 7 2 4 3 2. + 0 + -3.8275059312582016e-002 + -2.4115200340747833e-001 + 4.2547758668661118e-002 + <_> + + <_> + + + + <_> + 3 0 2 4 -1. + <_> + 3 1 2 2 2. + 0 + 3.6104370374232531e-003 + -7.1690596640110016e-002 + 1.3356970250606537e-001 + <_> + + <_> + + + + <_> + 14 1 4 3 -1. + <_> + 14 2 4 1 3. + 0 + 2.7101410552859306e-002 + 1.6210360452532768e-002 + -3.3410280942916870e-001 + <_> + + <_> + + + + <_> + 0 11 15 1 -1. + <_> + 5 11 5 1 3. + 0 + 7.4129230342805386e-003 + -7.1663141250610352e-002 + 1.4046929776668549e-001 + <_> + + <_> + + + + <_> + 15 1 3 3 -1. + <_> + 15 2 3 1 3. + 0 + 1.6567030921578407e-002 + 8.9016826823353767e-003 + -1.1316739767789841e-001 + <_> + + <_> + + + + <_> + 0 6 4 6 -1. + <_> + 0 8 4 2 3. + 0 + 6.4526550471782684e-002 + 1.4559620060026646e-002 + -6.1538118124008179e-001 + <_> + + <_> + + + + <_> + 14 4 1 2 -1. + <_> + 14 5 1 1 2. + 0 + 6.8156858906149864e-003 + -1.9643720239400864e-002 + 4.3227869272232056e-001 + <_> + + <_> + + + + <_> + 3 4 1 2 -1. + <_> + 3 5 1 1 2. + 0 + -8.8827422587200999e-005 + 9.6494443714618683e-002 + -9.7575537860393524e-002 + <_> + + <_> + + + + <_> + 10 2 6 6 -1. + <_> + 12 4 2 2 9. + 0 + -8.9457683265209198e-002 + 7.5192607939243317e-002 + -4.5244731009006500e-002 + <_> + + <_> + + + + <_> + 2 2 6 6 -1. + <_> + 4 4 2 2 9. + 0 + -2.1514390408992767e-001 + -4.5402219891548157e-001 + 1.9804859533905983e-002 + <_> + + <_> + + + + <_> + 9 0 1 3 -1. + <_> + 8 1 1 1 3. + 1 + -1.2561500072479248e-002 + -2.4084420502185822e-001 + 1.3274069875478745e-002 + <_> + + <_> + + + + <_> + 9 0 3 1 -1. + <_> + 10 1 1 1 3. + 1 + -8.4761697798967361e-003 + 2.7529099583625793e-001 + -4.5817509293556213e-002 + <_> + + <_> + + + + <_> + 6 1 6 3 -1. + <_> + 6 2 6 1 3. + 0 + 5.1104858517646790e-002 + -2.5254199281334877e-002 + 3.1543159484863281e-001 + <_> + + <_> + + + + <_> + 0 8 1 2 -1. + <_> + 0 9 1 1 2. + 0 + 9.7488082246854901e-005 + -1.2215600162744522e-001 + 7.2712212800979614e-002 + <_> + + <_> + + + + <_> + 14 9 4 3 -1. + <_> + 14 10 4 1 3. + 0 + 1.4160290360450745e-002 + 2.8567990288138390e-002 + -3.4588310122489929e-001 + <_> + + <_> + + + + <_> + 8 5 4 3 -1. + <_> + 9 6 2 3 2. + 1 + -4.9706948630046099e-005 + 5.6665088981389999e-002 + -1.4329999685287476e-001 + <_> + + <_> + + + + <_> + 9 7 9 4 -1. + <_> + 9 9 9 2 2. + 0 + 2.2474400699138641e-002 + -2.0662429928779602e-001 + 2.6640780270099640e-002 + <_> + + <_> + + + + <_> + 0 7 9 4 -1. + <_> + 0 9 9 2 2. + 0 + 9.7482956945896149e-002 + 5.0016429275274277e-002 + -2.0301230251789093e-001 + <_> + + <_> + + + + <_> + 12 4 3 5 -1. + <_> + 13 5 1 5 3. + 1 + -4.8470269888639450e-002 + 2.1042500436306000e-001 + -1.9063079729676247e-002 + <_> + + <_> + + + + <_> + 3 8 1 3 -1. + <_> + 2 9 1 1 3. + 1 + 7.1597727946937084e-003 + -4.5765839517116547e-002 + 1.9567190110683441e-001 + <_> + + <_> + + + + <_> + 15 9 3 3 -1. + <_> + 15 10 3 1 3. + 0 + -7.2543402202427387e-003 + -3.2032880187034607e-001 + 2.6651080697774887e-002 + <_> + + <_> + + + + <_> + 6 4 5 3 -1. + <_> + 5 5 5 1 3. + 1 + -1.8530499190092087e-002 + 1.9439229369163513e-001 + -4.8699580132961273e-002 + <_> + + <_> + + + + <_> + 2 6 15 6 -1. + <_> + 7 8 5 2 9. + 0 + 3.8783821463584900e-001 + -1.6777930781245232e-002 + 3.7111368775367737e-001 + <_> + + <_> + + + + <_> + 3 5 12 3 -1. + <_> + 6 5 6 3 2. + 0 + 7.6014406979084015e-002 + 1.7125319689512253e-002 + -5.8361458778381348e-001 + <_> + + <_> + + + + <_> + 17 1 1 4 -1. + <_> + 17 2 1 2 2. + 0 + 4.9989949911832809e-003 + 1.7290040850639343e-002 + -1.2039519846439362e-001 + <_> + + <_> + + + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + 0 + 9.9080810323357582e-003 + 2.3359630256891251e-002 + -3.7375789880752563e-001 + <_> + + <_> + + + + <_> + 17 9 1 2 -1. + <_> + 17 10 1 1 2. + 0 + 1.0389750241301954e-004 + -1.0736549645662308e-001 + 4.5764569193124771e-002 + <_> + + <_> + + + + <_> + 0 9 1 2 -1. + <_> + 0 10 1 1 2. + 0 + -1.0103100212290883e-003 + -2.2198240458965302e-001 + 3.9023850113153458e-002 + <_> + + <_> + + + + <_> + 16 8 2 2 -1. + <_> + 16 8 1 2 2. + 1 + -2.3250900208950043e-002 + 1.2186550348997116e-001 + -1.8887069076299667e-002 + <_> + + <_> + + + + <_> + 2 8 2 2 -1. + <_> + 2 8 2 1 2. + 1 + 8.6560938507318497e-003 + -3.4802809357643127e-002 + 2.6685670018196106e-001 + <_> + + <_> + + + + <_> + 17 8 1 3 -1. + <_> + 16 9 1 1 3. + 1 + 1.0738030076026917e-002 + 1.4226100407540798e-002 + -2.1260090172290802e-001 + <_> + + <_> + + + + <_> + 0 7 3 3 -1. + <_> + 1 7 1 3 3. + 0 + -3.5327710211277008e-003 + 1.3741309940814972e-001 + -6.6508442163467407e-002 + <_> + + <_> + + + + <_> + 17 7 1 2 -1. + <_> + 17 8 1 1 2. + 0 + 3.4663160331547260e-003 + 2.8193399310112000e-002 + -8.0336898565292358e-002 + <_> + + <_> + + + + <_> + 0 7 1 2 -1. + <_> + 0 8 1 1 2. + 0 + -1.0870849946513772e-003 + -2.1752350032329559e-001 + 4.2343270033597946e-002 + <_> + + <_> + + + + <_> + 16 1 2 4 -1. + <_> + 15 2 2 2 2. + 1 + -3.5930581390857697e-002 + 3.5099908709526062e-001 + -3.8252778351306915e-002 + <_> + + <_> + + + + <_> + 7 4 3 3 -1. + <_> + 7 5 3 1 3. + 0 + -2.5020960718393326e-002 + 2.2377529740333557e-001 + -3.8715720176696777e-002 + <_> + + <_> + + + + <_> + 13 5 3 4 -1. + <_> + 14 5 1 4 3. + 0 + -2.4599849712103605e-003 + 7.4148297309875488e-002 + -7.8528337180614471e-002 + <_> + + <_> + + + + <_> + 3 2 12 1 -1. + <_> + 9 2 6 1 2. + 0 + 6.0168118216097355e-003 + -1.0999929904937744e-001 + 7.8647941350936890e-002 + <_> + + <_> + + + + <_> + 4 0 10 4 -1. + <_> + 4 0 5 4 2. + 0 + -1.4243890345096588e-001 + -3.6323529481887817e-001 + 2.4560069665312767e-002 + <_> + + <_> + + + + <_> + 2 5 3 4 -1. + <_> + 3 5 1 4 3. + 0 + -4.7228108160197735e-003 + 1.0705450177192688e-001 + -7.6868243515491486e-002 + <_> + + <_> + + + + <_> + 13 0 3 12 -1. + <_> + 14 0 1 12 3. + 0 + -3.1893420964479446e-002 + -3.7086701393127441e-001 + 2.6756819337606430e-002 + <_> + + <_> + + + + <_> + 2 4 2 2 -1. + <_> + 2 4 1 1 2. + <_> + 3 5 1 1 2. + 0 + 3.5616129171103239e-003 + -3.2798498868942261e-002 + 2.6696491241455078e-001 + <_> + + <_> + + + + <_> + 13 0 2 12 -1. + <_> + 13 0 1 12 2. + 0 + 5.4270081222057343e-002 + 7.0277871564030647e-003 + -8.3340001106262207e-001 + <_> + + <_> + + + + <_> + 3 0 2 12 -1. + <_> + 4 0 1 12 2. + 0 + 4.1021820157766342e-002 + 8.8532911613583565e-003 + -7.8412932157516479e-001 + <_> + + <_> + + + + <_> + 17 1 1 4 -1. + <_> + 17 2 1 2 2. + 0 + -1.7731649801135063e-002 + -4.3762990832328796e-001 + -6.9212907692417502e-004 + <_> + + <_> + + + + <_> + 0 1 3 3 -1. + <_> + 0 2 3 1 3. + 0 + 1.0361500084400177e-002 + 2.4823799729347229e-002 + -3.1671279668807983e-001 + <_> + + <_> + + + + <_> + 8 5 3 2 -1. + <_> + 9 5 1 2 3. + 0 + -7.0502250455319881e-003 + 1.2061820179224014e-001 + -4.4687919318675995e-002 + <_> + + <_> + + + + <_> + 2 5 1 2 -1. + <_> + 2 5 1 1 2. + 1 + -1.6122040105983615e-003 + 6.3392668962478638e-002 + -1.2448409944772720e-001 + <_> + + <_> + + + + <_> + 13 1 4 3 -1. + <_> + 12 2 4 1 3. + 1 + 4.6751599758863449e-002 + -3.2111309468746185e-002 + 3.8545480370521545e-001 + <_> + + <_> + + + + <_> + 5 1 3 4 -1. + <_> + 6 2 1 4 3. + 1 + 1.5507729724049568e-002 + -4.6862591058015823e-002 + 1.9358439743518829e-001 + <_> + + <_> + + + + <_> + 9 1 2 6 -1. + <_> + 9 1 1 6 2. + 1 + 4.2960081249475479e-002 + -1.0605080053210258e-002 + 1.3616879284381866e-001 + <_> + + <_> + + + + <_> + 9 1 6 2 -1. + <_> + 9 1 6 1 2. + 1 + 5.3200960159301758e-002 + 2.9277659952640533e-002 + -3.0889630317687988e-001 + <_> + + <_> + + + + <_> + 12 1 6 4 -1. + <_> + 15 1 3 2 2. + <_> + 12 3 3 2 2. + 0 + -2.5974009186029434e-002 + 8.4145203232765198e-002 + -3.3409930765628815e-002 + <_> + + <_> + + + + <_> + 0 1 6 4 -1. + <_> + 0 1 3 2 2. + <_> + 3 3 3 2 2. + 0 + -1.8476620316505432e-002 + 1.4825859665870667e-001 + -5.3597509860992432e-002 + <_> + + <_> + + + + <_> + 8 5 4 7 -1. + <_> + 9 5 2 7 2. + 0 + -1.3039880432188511e-003 + 4.0190171450376511e-002 + -9.2481881380081177e-002 + <_> + + <_> + + + + <_> + 6 5 4 7 -1. + <_> + 7 5 2 7 2. + 0 + -3.1569059938192368e-003 + 8.6595647037029266e-002 + -1.2246470153331757e-001 + <_> + + <_> + + + + <_> + 8 9 4 2 -1. + <_> + 9 9 2 2 2. + 0 + -6.9843409582972527e-003 + -3.1575238704681396e-001 + 2.5440100580453873e-002 + <_> + + <_> + + + + <_> + 6 9 4 2 -1. + <_> + 7 9 2 2 2. + 0 + -5.6869657710194588e-003 + -2.8521931171417236e-001 + 3.2773211598396301e-002 + <_> + + <_> + + + + <_> + 10 5 3 3 -1. + <_> + 11 6 1 3 3. + 1 + -1.7049470916390419e-002 + 7.7424846589565277e-002 + -3.9009008556604385e-002 + <_> + + <_> + + + + <_> + 8 5 3 3 -1. + <_> + 7 6 3 1 3. + 1 + -3.3813931047916412e-002 + 4.3394011259078979e-001 + -2.1828850731253624e-002 + <_> + + <_> + + + + <_> + 11 2 4 4 -1. + <_> + 11 2 4 2 2. + 1 + -7.7675722539424896e-002 + 1.6437239944934845e-001 + -1.6524160280823708e-002 + <_> + + <_> + + + + <_> + 6 8 1 3 -1. + <_> + 5 9 1 1 3. + 1 + -4.9925399944186211e-003 + 1.7385929822921753e-001 + -4.9703989177942276e-002 + -1.5637309551239014e+000 + 18 + -1 + diff --git a/data/haarcascades/haarcascade_mcs_upperbody.xml b/data/haarcascades/haarcascade_mcs_upperbody.xml index f0f920c3f..76ba9ceef 100644 --- a/data/haarcascades/haarcascade_mcs_upperbody.xml +++ b/data/haarcascades/haarcascade_mcs_upperbody.xml @@ -1,83 +1,120 @@ BOOST diff --git a/data/haarcascades/haarcascade_russian_plate_number.xml b/data/haarcascades/haarcascade_russian_plate_number.xml new file mode 100644 index 000000000..39f5fcdd8 --- /dev/null +++ b/data/haarcascades/haarcascade_russian_plate_number.xml @@ -0,0 +1,2656 @@ + + + + BOOST + HAAR + 20 + 60 + + GAB + 9.9500000476837158e-001 + 5.0000000000000000e-001 + 9.4999999999999996e-001 + 1 + 100 + + 0 + 1 + ALL + 20 + + + <_> + 6 + -1.3110191822052002e+000 + + <_> + + 0 -1 193 1.0079263709485531e-002 + + -8.1339186429977417e-001 5.0277775526046753e-001 + <_> + + 0 -1 94 -2.2060684859752655e-002 + + 7.9418992996215820e-001 -5.0896102190017700e-001 + <_> + + 0 -1 18 -4.8777908086776733e-002 + + 7.1656656265258789e-001 -4.1640335321426392e-001 + <_> + + 0 -1 35 1.0387318208813667e-002 + + 3.7618312239646912e-001 -8.5504144430160522e-001 + <_> + + 0 -1 191 -9.4083719886839390e-004 + + 4.2658549547195435e-001 -5.7729166746139526e-001 + <_> + + 0 -1 48 -8.2391249015927315e-003 + + 8.2346975803375244e-001 -3.7503159046173096e-001 + + <_> + 6 + -1.1759783029556274e+000 + + <_> + + 0 -1 21 1.7386786639690399e-001 + + -6.8139964342117310e-001 6.0767590999603271e-001 + <_> + + 0 -1 28 -1.9797295331954956e-002 + + 7.8072130680084229e-001 -4.4399836659431458e-001 + <_> + + 0 -1 46 -1.0154811898246408e-003 + + 3.3383268117904663e-001 -7.6357340812683105e-001 + <_> + + 0 -1 138 2.4954911321401596e-002 + + -3.9979115128517151e-001 6.8620890378952026e-001 + <_> + + 0 -1 25 2.8837744612246752e-003 + + -2.7928480505943298e-001 7.9980146884918213e-001 + <_> + + 0 -1 26 -3.8839362561702728e-002 + + -7.8442335128784180e-001 3.4929576516151428e-001 + + <_> + 6 + -1.7856997251510620e+000 + + <_> + + 0 -1 34 2.7977079153060913e-002 + + -5.8424139022827148e-001 6.6850829124450684e-001 + <_> + + 0 -1 171 1.9148588180541992e-002 + + -6.5457659959793091e-001 4.0804430842399597e-001 + <_> + + 0 -1 7 1.1955041438341141e-002 + + -4.2002618312835693e-001 5.6217432022094727e-001 + <_> + + 0 -1 45 -2.1218564361333847e-002 + + 7.1812576055526733e-001 -3.0354043841362000e-001 + <_> + + 0 -1 108 2.0117280655540526e-004 + + -6.1749500036239624e-001 3.5549193620681763e-001 + <_> + + 0 -1 122 3.9725980604998767e-004 + + -2.6844096183776855e-001 7.6771658658981323e-001 + + <_> + 9 + -1.1837021112442017e+000 + + <_> + + 0 -1 202 -1.3291766867041588e-002 + + 4.5248869061470032e-001 -5.8849954605102539e-001 + <_> + + 0 -1 79 -4.8353265970945358e-002 + + 7.0951640605926514e-001 -3.2546108961105347e-001 + <_> + + 0 -1 22 2.6532993651926517e-003 + + -2.5343564152717590e-001 7.6588714122772217e-001 + <_> + + 0 -1 66 -3.8548894226551056e-002 + + 5.8126109838485718e-001 -3.0813106894493103e-001 + <_> + + 0 -1 41 -6.8602780811488628e-004 + + 2.6361095905303955e-001 -7.2226840257644653e-001 + <_> + + 0 -1 69 -2.5726919993758202e-002 + + -8.7153857946395874e-001 1.9438524544239044e-001 + <_> + + 0 -1 24 8.4192806389182806e-004 + + -3.6150649189949036e-001 5.2065432071685791e-001 + <_> + + 0 -1 62 -2.6956878136843443e-003 + + 5.9945529699325562e-001 -2.8344830870628357e-001 + <_> + + 0 -1 112 3.0572075396776199e-002 + + -3.0688971281051636e-001 5.7261526584625244e-001 + + <_> + 8 + -1.4687808752059937e+000 + + <_> + + 0 -1 5 3.1486168503761292e-002 + + -5.7836848497390747e-001 3.7931033968925476e-001 + <_> + + 0 -1 150 2.8311354108154774e-003 + + -5.7888329029083252e-001 3.2841828465461731e-001 + <_> + + 0 -1 76 -4.2060948908329010e-002 + + 5.5578106641769409e-001 -3.2662427425384521e-001 + <_> + + 0 -1 115 6.2936875037848949e-003 + + -2.1032968163490295e-001 7.8646916151046753e-001 + <_> + + 0 -1 51 7.0570126175880432e-002 + + -4.3683132529258728e-001 4.0298295021057129e-001 + <_> + + 0 -1 135 2.5173835456371307e-003 + + -2.0461565256118774e-001 8.2858163118362427e-001 + <_> + + 0 -1 102 1.5648975968360901e-003 + + -2.4848082661628723e-001 6.0209411382675171e-001 + <_> + + 0 -1 177 -3.5970686003565788e-003 + + 2.3294737935066223e-001 -6.5612471103668213e-001 + + <_> + 9 + -1.1029583215713501e+000 + + <_> + + 0 -1 27 -1.1257569491863251e-001 + + 3.3181819319725037e-001 -5.3901344537734985e-001 + <_> + + 0 -1 142 3.8014666642993689e-003 + + -3.6430206894874573e-001 4.5984184741973877e-001 + <_> + + 0 -1 57 9.8789634648710489e-004 + + -2.6661416888237000e-001 5.6971323490142822e-001 + <_> + + 0 -1 55 2.1719809621572495e-002 + + 1.8432702124118805e-001 -8.2999354600906372e-001 + <_> + + 0 -1 111 5.1051773130893707e-002 + + 1.4391148090362549e-001 -9.4541704654693604e-001 + <_> + + 0 -1 164 1.8956036074087024e-003 + + -6.0830104351043701e-001 2.6091885566711426e-001 + <_> + + 0 -1 81 -5.8700828813016415e-003 + + 6.9104760885238647e-001 -2.6916843652725220e-001 + <_> + + 0 -1 116 -1.1522199492901564e-003 + + -6.9503885507583618e-001 2.4749211966991425e-001 + <_> + + 0 -1 90 -5.1933946087956429e-003 + + 5.8551025390625000e-001 -3.0389472842216492e-001 + + <_> + 9 + -9.0274518728256226e-001 + + <_> + + 0 -1 205 -1.4383997768163681e-002 + + 4.5400592684745789e-001 -4.9917897582054138e-001 + <_> + + 0 -1 114 -3.3369414508342743e-002 + + -9.3247985839843750e-001 1.4586758613586426e-001 + <_> + + 0 -1 128 5.2380945999175310e-004 + + -2.8349643945693970e-001 6.4983856678009033e-001 + <_> + + 0 -1 143 6.1231426661834121e-004 + + -1.8502233922481537e-001 6.5052211284637451e-001 + <_> + + 0 -1 49 1.7017847858369350e-003 + + 2.2008989751338959e-001 -7.2277534008026123e-001 + <_> + + 0 -1 133 2.6139442343264818e-003 + + 1.8238025903701782e-001 -7.6262325048446655e-001 + <_> + + 0 -1 43 -2.0020073279738426e-003 + + 5.6799399852752686e-001 -2.8219676017761230e-001 + <_> + + 0 -1 119 1.9273828947916627e-003 + + -2.0913636684417725e-001 7.9203850030899048e-001 + <_> + + 0 -1 134 -9.4476283993571997e-004 + + -8.2361942529678345e-001 2.4256958067417145e-001 + + <_> + 10 + -1.4518526792526245e+000 + + <_> + + 0 -1 162 1.6756314784288406e-002 + + -6.9359332323074341e-001 5.1373954862356186e-002 + <_> + + 0 -1 16 2.4082964286208153e-002 + + -3.3989402651786804e-001 4.5332714915275574e-001 + <_> + + 0 -1 186 1.2284796684980392e-003 + + -2.2297365963459015e-001 6.1439812183380127e-001 + <_> + + 0 -1 59 -1.4379122294485569e-003 + + -6.9444245100021362e-001 2.0446482300758362e-001 + <_> + + 0 -1 185 -1.8713285680860281e-003 + + 6.7942184209823608e-001 -2.7580419182777405e-001 + <_> + + 0 -1 190 -4.7389674000442028e-003 + + -7.0437240600585938e-001 2.6915156841278076e-001 + <_> + + 0 -1 156 7.4071279959753156e-004 + + -2.9220902919769287e-001 5.3538239002227783e-001 + <_> + + 0 -1 11 -2.2739455103874207e-001 + + 6.6916191577911377e-001 -2.1987228095531464e-001 + <_> + + 0 -1 155 -1.0255509987473488e-003 + + 6.3346290588378906e-001 -2.2717863321304321e-001 + <_> + + 0 -1 167 2.4775355122983456e-003 + + -5.4297816753387451e-001 3.1877547502517700e-001 + + <_> + 11 + -1.3153649568557739e+000 + + <_> + + 0 -1 6 1.9131936132907867e-002 + + -6.0168600082397461e-001 1.9141913950443268e-001 + <_> + + 0 -1 42 -4.5855185016989708e-003 + + 2.1901632845401764e-001 -5.7136750221252441e-001 + <_> + + 0 -1 53 -1.9026801455765963e-003 + + -8.0075079202651978e-001 1.6502076387405396e-001 + <_> + + 0 -1 19 -3.2767035067081451e-002 + + 5.1496404409408569e-001 -2.5474679470062256e-001 + <_> + + 0 -1 129 6.3941581174731255e-004 + + -1.9851709902286530e-001 6.7218667268753052e-001 + <_> + + 0 -1 201 1.5573646873235703e-002 + + -1.7564551532268524e-001 7.0536541938781738e-001 + <_> + + 0 -1 200 9.5508026424795389e-004 + + -1.9691802561283112e-001 6.1125624179840088e-001 + <_> + + 0 -1 67 9.0427603572607040e-003 + + 1.6518253087997437e-001 -8.7012130022048950e-001 + <_> + + 0 -1 77 8.1576988101005554e-002 + + 1.4075902104377747e-001 -8.4871828556060791e-001 + <_> + + 0 -1 166 -5.1994959358125925e-004 + + 2.1803210675716400e-001 -5.4628211259841919e-001 + <_> + + 0 -1 70 -2.3009868338704109e-002 + + -7.9586231708526611e-001 1.5989699959754944e-001 + + <_> + 13 + -1.4625015258789063e+000 + + <_> + + 0 -1 1 2.6759501546621323e-002 + + -6.0482984781265259e-001 1.4906832575798035e-001 + <_> + + 0 -1 165 3.0343931168317795e-002 + + -4.7357541322708130e-001 2.6279065012931824e-001 + <_> + + 0 -1 161 1.2678599450737238e-003 + + -1.9493983685970306e-001 6.9734728336334229e-001 + <_> + + 0 -1 30 1.8607920501381159e-003 + + 1.5611934661865234e-001 -9.0542370080947876e-001 + <_> + + 0 -1 157 -1.3872641138732433e-003 + + 5.3263407945632935e-001 -3.0192303657531738e-001 + <_> + + 0 -1 180 -6.9969398900866508e-003 + + -9.4549953937530518e-001 1.5575224161148071e-001 + <_> + + 0 -1 158 1.1245720088481903e-003 + + -2.6688691973686218e-001 5.5608308315277100e-001 + <_> + + 0 -1 160 -2.8279949910938740e-003 + + -9.1861122846603394e-001 1.3309663534164429e-001 + <_> + + 0 -1 58 7.1019242750480771e-004 + + -3.0977895855903625e-001 4.3846300244331360e-001 + <_> + + 0 -1 8 -4.1933014988899231e-002 + + -8.9102542400360107e-001 1.5866196155548096e-001 + <_> + + 0 -1 87 1.6568358987569809e-002 + + 1.2731756269931793e-001 -8.5553413629531860e-001 + <_> + + 0 -1 64 2.0309074316173792e-003 + + -2.3260365426540375e-001 6.7330485582351685e-001 + <_> + + 0 -1 159 -1.7069760942831635e-003 + + -7.1925789117813110e-001 1.9108834862709045e-001 + + <_> + 14 + -1.4959813356399536e+000 + + <_> + + 0 -1 4 1.4695923775434494e-002 + + -6.2167906761169434e-001 2.1172638237476349e-001 + <_> + + 0 -1 50 -1.6501215286552906e-003 + + 1.9353884458541870e-001 -5.7780367136001587e-001 + <_> + + 0 -1 123 7.0121872704476118e-004 + + -2.2979106009006500e-001 5.3033334016799927e-001 + <_> + + 0 -1 52 9.4158272258937359e-004 + + 1.6849038004875183e-001 -7.4897718429565430e-001 + <_> + + 0 -1 124 -2.0684124901890755e-003 + + 6.7936712503433228e-001 -1.9317412376403809e-001 + <_> + + 0 -1 23 -1.8305826233699918e-004 + + -7.0275229215621948e-001 1.7971208691596985e-001 + <_> + + 0 -1 198 5.5587477982044220e-004 + + -2.4448128044605255e-001 5.0703984498977661e-001 + <_> + + 0 -1 152 4.3448276119306684e-004 + + 1.3497908413410187e-001 -8.5621362924575806e-001 + <_> + + 0 -1 197 -1.2359691318124533e-003 + + 6.1710417270660400e-001 -2.2301279008388519e-001 + <_> + + 0 -1 153 -6.9627340417355299e-004 + + -6.4706987142562866e-001 2.3951497673988342e-001 + <_> + + 0 -1 175 1.0683680884540081e-003 + + -2.8343605995178223e-001 4.9318629503250122e-001 + <_> + + 0 -1 168 1.7104238213505596e-004 + + -2.7171039581298828e-001 4.2520308494567871e-001 + <_> + + 0 -1 144 8.2368971779942513e-003 + + 1.6359315812587738e-001 -7.3864609003067017e-001 + <_> + + 0 -1 131 -5.9884190559387207e-003 + + 3.8030940294265747e-001 -3.0763563513755798e-001 + + <_> + 9 + -1.1183819770812988e+000 + + <_> + + 0 -1 187 -1.4863962307572365e-002 + + 1.1989101022481918e-001 -6.6138857603073120e-001 + <_> + + 0 -1 117 2.4736612103879452e-003 + + -5.2778661251068115e-001 2.3012125492095947e-001 + <_> + + 0 -1 71 -4.8899287357926369e-003 + + 6.0186779499053955e-001 -2.0681641995906830e-001 + <_> + + 0 -1 174 1.5796069055795670e-002 + + 1.4610521495342255e-001 -8.2099527120590210e-001 + <_> + + 0 -1 104 5.9720675926655531e-004 + + -2.3587301373481750e-001 4.8323699831962585e-001 + <_> + + 0 -1 103 -1.9448818638920784e-003 + + 6.4417767524719238e-001 -2.0953170955181122e-001 + <_> + + 0 -1 154 1.9433414854574949e-004 + + 2.0600238442420959e-001 -7.2418999671936035e-001 + <_> + + 0 -1 163 -1.5097535215318203e-002 + + -8.7151485681533813e-001 1.2594890594482422e-001 + <_> + + 0 -1 82 -3.9843879640102386e-003 + + 4.3801131844520569e-001 -2.9676589369773865e-001 + + <_> + 12 + -1.5434337854385376e+000 + + <_> + + 0 -1 105 1.1273270938545465e-003 + + -4.7976878285408020e-001 3.6627906560897827e-001 + <_> + + 0 -1 95 9.7806821577250957e-004 + + -2.7689707279205322e-001 5.1295894384384155e-001 + <_> + + 0 -1 15 1.6528377309441566e-002 + + -4.5259797573089600e-001 2.4290211498737335e-001 + <_> + + 0 -1 137 1.1040373938158154e-003 + + -3.2714816927909851e-001 3.4566244482994080e-001 + <_> + + 0 -1 109 -1.7780361231416464e-003 + + -6.9511681795120239e-001 1.8829824030399323e-001 + <_> + + 0 -1 92 4.6280334936454892e-004 + + -2.3864887654781342e-001 5.3136289119720459e-001 + <_> + + 0 -1 100 -1.4975425438024104e-004 + + -6.6509884595870972e-001 2.1483559906482697e-001 + <_> + + 0 -1 83 -1.4625370968133211e-003 + + 2.6556470990180969e-001 -4.9002227187156677e-001 + <_> + + 0 -1 14 -2.6019819779321551e-004 + + -7.0160359144210815e-001 1.6359129548072815e-001 + <_> + + 0 -1 14 2.2371641534846276e-004 + + 1.2919521331787109e-001 -6.9767206907272339e-001 + <_> + + 0 -1 194 -1.0447315871715546e-002 + + 2.1837629377841949e-001 -4.6482038497924805e-001 + <_> + + 0 -1 20 -9.2897024005651474e-003 + + 6.4918082952499390e-001 -2.0495061576366425e-001 + + <_> + 12 + -1.4440233707427979e+000 + + <_> + + 0 -1 9 8.5356216877698898e-003 + + -5.3151458501815796e-001 2.2357723116874695e-001 + <_> + + 0 -1 182 1.5294685726985335e-003 + + -6.0895460844039917e-001 1.7429886758327484e-001 + <_> + + 0 -1 40 1.8610086990520358e-003 + + -2.5480428338050842e-001 4.2150071263313293e-001 + <_> + + 0 -1 176 1.5735558699816465e-003 + + -1.6832062602043152e-001 4.8567819595336914e-001 + <_> + + 0 -1 179 -6.7992787808179855e-004 + + 3.9894598722457886e-001 -3.0744269490242004e-001 + <_> + + 0 -1 151 4.9857296049594879e-002 + + -1.5370152890682220e-001 6.7523348331451416e-001 + <_> + + 0 -1 139 -2.8339058160781860e-002 + + 5.0540882349014282e-001 -2.9473617672920227e-001 + <_> + + 0 -1 72 -7.7956825494766235e-002 + + 4.0387043356895447e-001 -3.0287107825279236e-001 + <_> + + 0 -1 89 -3.6115488037467003e-003 + + 6.3856112957000732e-001 -1.6917882859706879e-001 + <_> + + 0 -1 207 3.3940275898203254e-004 + + 1.3713537156581879e-001 -7.8120291233062744e-001 + <_> + + 0 -1 39 4.0043061599135399e-003 + + 1.5233094990253448e-001 -6.3939732313156128e-001 + <_> + + 0 -1 65 -4.4601649278774858e-004 + + 2.1333815157413483e-001 -4.7728902101516724e-001 + + <_> + 13 + -1.2532578706741333e+000 + + <_> + + 0 -1 204 -2.0341124385595322e-002 + + 2.4170616269111633e-001 -4.9161517620086670e-001 + <_> + + 0 -1 169 8.9040049351751804e-004 + + -2.8570893406867981e-001 4.2666998505592346e-001 + <_> + + 0 -1 60 -3.3259526826441288e-003 + + 4.2626520991325378e-001 -2.3811897635459900e-001 + <_> + + 0 -1 38 -3.1714607030153275e-002 + + -8.5494768619537354e-001 1.1712870001792908e-001 + <_> + + 0 -1 31 -1.1553820222616196e-002 + + 2.2675493359565735e-001 -4.9640509486198425e-001 + <_> + + 0 -1 80 -6.7727260291576385e-002 + + -8.6705064773559570e-001 9.8765812814235687e-002 + <_> + + 0 -1 63 -3.1611192971467972e-003 + + 3.9449846744537354e-001 -2.8210711479187012e-001 + <_> + + 0 -1 149 4.3221906526014209e-004 + + 1.1805476248264313e-001 -9.0178310871124268e-001 + <_> + + 0 -1 188 -2.2296360111795366e-004 + + 1.7324598133563995e-001 -5.2877873182296753e-001 + <_> + + 0 -1 120 -2.1440195851027966e-003 + + 5.5513423681259155e-001 -1.9791823625564575e-001 + <_> + + 0 -1 113 -4.5122690498828888e-003 + + 5.5083745718002319e-001 -1.8810540437698364e-001 + <_> + + 0 -1 130 -3.5149464383721352e-003 + + 5.5467557907104492e-001 -2.2856147587299347e-001 + <_> + + 0 -1 121 -4.4786706566810608e-003 + + -7.9106998443603516e-001 1.7836479842662811e-001 + + <_> + 15 + -1.1898330450057983e+000 + + <_> + + 0 -1 0 1.5206767246127129e-002 + + -4.9173194169998169e-001 2.7093595266342163e-001 + <_> + + 0 -1 125 6.9564773002639413e-004 + + -2.3066598176956177e-001 5.4028344154357910e-001 + <_> + + 0 -1 125 -8.3668017759919167e-004 + + 4.4658055901527405e-001 -2.7778497338294983e-001 + <_> + + 0 -1 91 -3.8321319967508316e-002 + + -7.9069298505783081e-001 1.8700349330902100e-001 + <_> + + 0 -1 207 -2.1063965687062591e-004 + + -6.3163763284683228e-001 1.8656146526336670e-001 + <_> + + 0 -1 61 3.6907330155372620e-002 + + 9.9319733679294586e-002 -7.6762360334396362e-001 + <_> + + 0 -1 85 8.1071127206087112e-003 + + -2.8561261296272278e-001 3.4748569130897522e-001 + <_> + + 0 -1 189 6.2815943965688348e-004 + + 1.6656193137168884e-001 -5.4635977745056152e-001 + <_> + + 0 -1 86 2.8582263621501625e-004 + + -2.4100163578987122e-001 4.5410770177841187e-001 + <_> + + 0 -1 173 -1.9862279295921326e-002 + + -9.4317340850830078e-001 1.2513674795627594e-001 + <_> + + 0 -1 96 1.1506280861794949e-003 + + -2.4514634907245636e-001 4.6452957391738892e-001 + <_> + + 0 -1 29 2.3451185552403331e-004 + + 1.2489952147006989e-001 -8.0278074741363525e-001 + <_> + + 0 -1 101 6.7837134702131152e-004 + + -2.5017899274826050e-001 4.3841627240180969e-001 + <_> + + 0 -1 17 3.1583159579895437e-004 + + 1.5951988101005554e-001 -7.4524724483489990e-001 + <_> + + 0 -1 110 7.2623658925294876e-003 + + 1.2511830031871796e-001 -6.5659755468368530e-001 + + <_> + 15 + -1.2416906356811523e+000 + + <_> + + 0 -1 2 7.5144092552363873e-003 + + -5.9518074989318848e-001 5.3793102502822876e-002 + <_> + + 0 -1 98 -6.4494344405829906e-004 + + 2.0429474115371704e-001 -4.3661779165267944e-001 + <_> + + 0 -1 196 3.3831471228040755e-004 + + -2.1566553413867950e-001 4.7118204832077026e-001 + <_> + + 0 -1 73 2.8320802375674248e-003 + + 1.3322307169437408e-001 -8.3729231357574463e-001 + <_> + + 0 -1 199 1.6218879027292132e-003 + + -2.0889574289321899e-001 4.7114694118499756e-001 + <_> + + 0 -1 10 2.7122153551317751e-004 + + 1.1475630849599838e-001 -7.8029519319534302e-001 + <_> + + 0 -1 170 8.8358242064714432e-003 + + 1.2460929155349731e-001 -7.6791721582412720e-001 + <_> + + 0 -1 106 9.7634072881191969e-004 + + -2.0806105434894562e-001 5.1318311691284180e-001 + <_> + + 0 -1 107 -2.1239042282104492e-002 + + -8.7171542644500732e-001 1.2721680104732513e-001 + <_> + + 0 -1 97 7.1797124110162258e-004 + + -3.0763280391693115e-001 3.7504923343658447e-001 + <_> + + 0 -1 32 2.7504155412316322e-002 + + 1.5651945769786835e-001 -7.9516488313674927e-001 + <_> + + 0 -1 178 1.0624636197462678e-003 + + 1.3473348319530487e-001 -6.9174814224243164e-001 + <_> + + 0 -1 33 -8.1248432397842407e-002 + + -8.5117286443710327e-001 1.0601779073476791e-001 + <_> + + 0 -1 140 -2.2936165332794189e-002 + + 3.9202499389648438e-001 -2.9867398738861084e-001 + <_> + + 0 -1 146 -1.3326616026461124e-003 + + 4.7240665555000305e-001 -2.6287403702735901e-001 + + <_> + 13 + -1.3383979797363281e+000 + + <_> + + 0 -1 3 3.2254494726657867e-002 + + -6.5151512622833252e-001 7.9947575926780701e-002 + <_> + + 0 -1 172 -1.1810796568170190e-003 + + 2.5173431634902954e-001 -4.5536977052688599e-001 + <_> + + 0 -1 88 8.0361258005723357e-004 + + -2.1178695559501648e-001 4.9318632483482361e-001 + <_> + + 0 -1 93 6.6201295703649521e-004 + + -1.9441033899784088e-001 4.6225026249885559e-001 + <_> + + 0 -1 84 3.4565184614621103e-004 + + -2.1175089478492737e-001 4.6985754370689392e-001 + <_> + + 0 -1 132 -5.6433549616485834e-004 + + -7.9713624715805054e-001 1.8714086711406708e-001 + <_> + + 0 -1 56 5.8492692187428474e-004 + + -3.9330720901489258e-001 2.4242231249809265e-001 + <_> + + 0 -1 13 2.5043603032827377e-002 + + 1.3490234315395355e-001 -7.5923883914947510e-001 + <_> + + 0 -1 37 -1.8510785885155201e-003 + + 4.1279399394989014e-001 -2.7271771430969238e-001 + <_> + + 0 -1 68 -2.5741360150277615e-004 + + -6.3662034273147583e-001 1.8135882914066315e-001 + <_> + + 0 -1 184 -1.5121832489967346e-002 + + 2.5249326229095459e-001 -3.8438034057617188e-001 + <_> + + 0 -1 203 -1.5006031841039658e-002 + + -8.4878319501876831e-001 1.1718367785215378e-001 + <_> + + 0 -1 74 4.9880752339959145e-004 + + -2.6755046844482422e-001 4.5769825577735901e-001 + + <_> + 12 + -1.2097512483596802e+000 + + <_> + + 0 -1 195 -1.1614991351962090e-002 + + 1.4465409517288208e-001 -5.9521216154098511e-001 + <_> + + 0 -1 75 3.9767110138200223e-004 + + -4.2697989940643311e-001 2.4382311105728149e-001 + <_> + + 0 -1 47 -4.6969857066869736e-002 + + -9.3969690799713135e-001 1.2196484953165054e-001 + <_> + + 0 -1 136 5.5550434626638889e-004 + + -1.8246935307979584e-001 6.5156191587448120e-001 + <_> + + 0 -1 99 2.9468833236023784e-004 + + 1.5099152922630310e-001 -7.8840750455856323e-001 + <_> + + 0 -1 44 1.2439775280654430e-002 + + 1.4981375634670258e-001 -7.5917595624923706e-001 + <_> + + 0 -1 147 6.6337559837847948e-004 + + -2.5185841321945190e-001 5.9387433528900146e-001 + <_> + + 0 -1 148 -6.8454549182206392e-004 + + 5.1199448108673096e-001 -2.5247576832771301e-001 + <_> + + 0 -1 141 1.4808592386543751e-003 + + 2.2439701855182648e-001 -5.8184891939163208e-001 + <_> + + 0 -1 12 6.0307271778583527e-003 + + -4.3553912639617920e-001 2.8183382749557495e-001 + <_> + + 0 -1 78 -1.9170897081494331e-002 + + -8.5707378387451172e-001 1.4850790798664093e-001 + <_> + + 0 -1 122 3.0278289341367781e-004 + + -3.1547480821609497e-001 4.1798374056816101e-001 + + <_> + 10 + -1.2253109216690063e+000 + + <_> + + 0 -1 181 4.6847470104694366e-002 + + -4.9239391088485718e-001 5.2287584543228149e-001 + <_> + + 0 -1 118 2.2181579843163490e-003 + + -4.2569425702095032e-001 3.6892616748809814e-001 + <_> + + 0 -1 145 6.1082182219251990e-004 + + 1.7654621601104736e-001 -8.2656937837600708e-001 + <_> + + 0 -1 127 1.7401995137333870e-002 + + 2.7770876884460449e-001 -5.6393522024154663e-001 + <_> + + 0 -1 54 5.2314018830657005e-004 + + -3.6257097125053406e-001 4.6126455068588257e-001 + <_> + + 0 -1 206 2.1581796463578939e-003 + + 1.9110183417797089e-001 -6.8012320995330811e-001 + <_> + + 0 -1 192 -1.3209994649514556e-003 + + 6.7618584632873535e-001 -2.6087108254432678e-001 + <_> + + 0 -1 126 -1.2237254530191422e-002 + + -5.7184767723083496e-001 3.0778104066848755e-001 + <_> + + 0 -1 36 8.7829465046525002e-003 + + 1.6890920698642731e-001 -7.8835797309875488e-001 + <_> + + 0 -1 183 7.5588272884488106e-003 + + 1.5143942832946777e-001 -8.2572847604751587e-001 + + <_> + + <_> + 0 0 10 10 -1. + <_> + 0 0 5 5 2. + <_> + 5 5 5 5 2. + 0 + <_> + + <_> + 0 0 12 16 -1. + <_> + 6 0 6 16 2. + 0 + <_> + + <_> + 0 3 10 6 -1. + <_> + 5 3 5 6 2. + 0 + <_> + + <_> + 0 3 21 16 -1. + <_> + 7 3 7 16 3. + 0 + <_> + + <_> + 0 4 16 9 -1. + <_> + 4 4 8 9 2. + 0 + <_> + + <_> + 0 4 10 12 -1. + <_> + 5 4 5 12 2. + 0 + <_> + + <_> + 0 7 14 7 -1. + <_> + 7 7 7 7 2. + 0 + <_> + + <_> + 0 9 12 7 -1. + <_> + 6 9 6 7 2. + 0 + <_> + + <_> + 0 9 60 3 -1. + <_> + 30 9 30 3 2. + 0 + <_> + + <_> + 0 10 8 3 -1. + <_> + 4 10 4 3 2. + 0 + <_> + + <_> + 0 11 1 2 -1. + <_> + 0 12 1 1 2. + 0 + <_> + + <_> + 1 0 51 12 -1. + <_> + 1 4 51 4 3. + 0 + <_> + + <_> + 1 3 15 7 -1. + <_> + 6 3 5 7 3. + 0 + <_> + + <_> + 1 7 30 6 -1. + <_> + 1 7 15 3 2. + <_> + 16 10 15 3 2. + 0 + <_> + + <_> + 1 12 1 2 -1. + <_> + 1 13 1 1 2. + 0 + <_> + + <_> + 2 2 18 16 -1. + <_> + 2 6 18 8 2. + 0 + <_> + + <_> + 2 3 29 4 -1. + <_> + 2 5 29 2 2. + 0 + <_> + + <_> + 2 9 1 2 -1. + <_> + 2 10 1 1 2. + 0 + <_> + + <_> + 2 14 40 6 -1. + <_> + 2 17 40 3 2. + 0 + <_> + + <_> + 3 0 22 6 -1. + <_> + 3 2 22 2 3. + 0 + <_> + + <_> + 3 2 38 2 -1. + <_> + 3 2 19 1 2. + <_> + 22 3 19 1 2. + 0 + <_> + + <_> + 3 4 51 16 -1. + <_> + 3 8 51 8 2. + 0 + <_> + + <_> + 3 7 3 8 -1. + <_> + 4 7 1 8 3. + 0 + <_> + + <_> + 3 9 1 3 -1. + <_> + 3 10 1 1 3. + 0 + <_> + + <_> + 4 8 3 5 -1. + <_> + 5 8 1 5 3. + 0 + <_> + + <_> + 4 8 4 9 -1. + <_> + 5 8 2 9 2. + 0 + <_> + + <_> + 4 11 36 9 -1. + <_> + 16 11 12 9 3. + 0 + <_> + + <_> + 4 14 49 6 -1. + <_> + 4 17 49 3 2. + 0 + <_> + + <_> + 5 0 17 6 -1. + <_> + 5 2 17 2 3. + 0 + <_> + + <_> + 5 1 3 1 -1. + <_> + 6 1 1 1 3. + 0 + <_> + + <_> + 5 1 8 2 -1. + <_> + 7 1 4 2 2. + 0 + <_> + + <_> + 5 2 36 9 -1. + <_> + 17 2 12 9 3. + 0 + <_> + + <_> + 5 3 33 17 -1. + <_> + 16 3 11 17 3. + 0 + <_> + + <_> + 6 0 30 19 -1. + <_> + 16 0 10 19 3. + 0 + <_> + + <_> + 6 3 29 4 -1. + <_> + 6 5 29 2 2. + 0 + <_> + + <_> + 6 4 16 16 -1. + <_> + 14 4 8 16 2. + 0 + <_> + + <_> + 6 9 54 1 -1. + <_> + 33 9 27 1 2. + 0 + <_> + + <_> + 7 0 4 18 -1. + <_> + 8 0 2 18 2. + 0 + <_> + + <_> + 7 3 12 15 -1. + <_> + 13 3 6 15 2. + 0 + <_> + + <_> + 7 4 20 5 -1. + <_> + 12 4 10 5 2. + 0 + <_> + + <_> + 7 4 6 3 -1. + <_> + 7 5 6 1 3. + 0 + <_> + + <_> + 7 4 36 6 -1. + <_> + 19 4 12 6 3. + 0 + <_> + + <_> + 7 5 28 4 -1. + <_> + 14 5 14 4 2. + 0 + <_> + + <_> + 7 7 4 11 -1. + <_> + 8 7 2 11 2. + 0 + <_> + + <_> + 7 9 12 7 -1. + <_> + 13 9 6 7 2. + 0 + <_> + + <_> + 8 1 21 4 -1. + <_> + 8 3 21 2 2. + 0 + <_> + + <_> + 8 4 28 6 -1. + <_> + 15 4 14 6 2. + 0 + <_> + + <_> + 8 8 38 6 -1. + <_> + 8 10 38 2 3. + 0 + <_> + + <_> + 8 14 25 4 -1. + <_> + 8 15 25 2 2. + 0 + <_> + + <_> + 9 2 12 4 -1. + <_> + 12 2 6 4 2. + 0 + <_> + + <_> + 9 5 24 3 -1. + <_> + 15 5 12 3 2. + 0 + <_> + + <_> + 9 8 40 12 -1. + <_> + 9 12 40 4 3. + 0 + <_> + + <_> + 10 2 8 2 -1. + <_> + 12 2 4 2 2. + 0 + <_> + + <_> + 10 2 9 2 -1. + <_> + 13 2 3 2 3. + 0 + <_> + + <_> + 10 5 3 3 -1. + <_> + 11 6 1 1 9. + 0 + <_> + + <_> + 11 0 32 20 -1. + <_> + 19 0 16 20 2. + 0 + <_> + + <_> + 11 3 1 4 -1. + <_> + 11 5 1 2 2. + 0 + <_> + + <_> + 11 9 4 3 -1. + <_> + 12 9 2 3 2. + 0 + <_> + + <_> + 11 9 3 7 -1. + <_> + 12 9 1 7 3. + 0 + <_> + + <_> + 12 3 9 2 -1. + <_> + 15 3 3 2 3. + 0 + <_> + + <_> + 12 6 6 6 -1. + <_> + 14 6 2 6 3. + 0 + <_> + + <_> + 12 10 42 10 -1. + <_> + 26 10 14 10 3. + 0 + <_> + + <_> + 12 14 11 3 -1. + <_> + 12 15 11 1 3. + 0 + <_> + + <_> + 13 4 6 14 -1. + <_> + 15 4 2 14 3. + 0 + <_> + + <_> + 13 8 3 6 -1. + <_> + 14 8 1 6 3. + 0 + <_> + + <_> + 13 11 32 2 -1. + <_> + 21 11 16 2 2. + 0 + <_> + + <_> + 13 13 25 6 -1. + <_> + 13 16 25 3 2. + 0 + <_> + + <_> + 13 16 21 3 -1. + <_> + 20 16 7 3 3. + 0 + <_> + + <_> + 14 2 3 2 -1. + <_> + 15 2 1 2 3. + 0 + <_> + + <_> + 14 2 24 8 -1. + <_> + 20 2 12 8 2. + 0 + <_> + + <_> + 14 13 36 6 -1. + <_> + 23 13 18 6 2. + 0 + <_> + + <_> + 14 14 8 3 -1. + <_> + 14 15 8 1 3. + 0 + <_> + + <_> + 14 14 45 6 -1. + <_> + 14 17 45 3 2. + 0 + <_> + + <_> + 14 18 9 2 -1. + <_> + 17 18 3 2 3. + 0 + <_> + + <_> + 15 9 4 1 -1. + <_> + 16 9 2 1 2. + 0 + <_> + + <_> + 15 10 19 4 -1. + <_> + 15 12 19 2 2. + 0 + <_> + + <_> + 16 0 28 8 -1. + <_> + 16 2 28 4 2. + 0 + <_> + + <_> + 16 2 36 18 -1. + <_> + 28 2 12 18 3. + 0 + <_> + + <_> + 16 6 24 6 -1. + <_> + 22 6 12 6 2. + 0 + <_> + + <_> + 17 1 24 6 -1. + <_> + 17 3 24 2 3. + 0 + <_> + + <_> + 17 3 15 12 -1. + <_> + 22 7 5 4 9. + 0 + <_> + + <_> + 17 15 11 3 -1. + <_> + 17 16 11 1 3. + 0 + <_> + + <_> + 18 5 6 10 -1. + <_> + 20 5 2 10 3. + 0 + <_> + + <_> + 18 6 18 3 -1. + <_> + 24 6 6 3 3. + 0 + <_> + + <_> + 18 11 3 1 -1. + <_> + 19 11 1 1 3. + 0 + <_> + + <_> + 19 6 32 2 -1. + <_> + 27 6 16 2 2. + 0 + <_> + + <_> + 19 8 3 1 -1. + <_> + 20 8 1 1 3. + 0 + <_> + + <_> + 19 9 14 11 -1. + <_> + 26 9 7 11 2. + 0 + <_> + + <_> + 19 10 3 3 -1. + <_> + 20 10 1 3 3. + 0 + <_> + + <_> + 19 13 7 3 -1. + <_> + 19 14 7 1 3. + 0 + <_> + + <_> + 19 14 13 3 -1. + <_> + 19 15 13 1 3. + 0 + <_> + + <_> + 20 0 15 20 -1. + <_> + 25 0 5 20 3. + 0 + <_> + + <_> + 20 9 3 1 -1. + <_> + 21 9 1 1 3. + 0 + <_> + + <_> + 20 10 3 2 -1. + <_> + 21 10 1 2 3. + 0 + <_> + + <_> + 21 1 21 6 -1. + <_> + 21 3 21 2 3. + 0 + <_> + + <_> + 21 8 4 3 -1. + <_> + 22 8 2 3 2. + 0 + <_> + + <_> + 21 9 3 4 -1. + <_> + 22 9 1 4 3. + 0 + <_> + + <_> + 21 10 4 2 -1. + <_> + 22 10 2 2 2. + 0 + <_> + + <_> + 21 11 24 2 -1. + <_> + 27 11 12 2 2. + 0 + <_> + + <_> + 21 18 4 1 -1. + <_> + 22 18 2 1 2. + 0 + <_> + + <_> + 22 3 4 1 -1. + <_> + 23 3 2 1 2. + 0 + <_> + + <_> + 22 6 2 6 -1. + <_> + 22 6 1 3 2. + <_> + 23 9 1 3 2. + 0 + <_> + + <_> + 22 7 3 3 -1. + <_> + 23 8 1 1 9. + 0 + <_> + + <_> + 22 8 3 5 -1. + <_> + 23 8 1 5 3. + 0 + <_> + + <_> + 22 9 3 2 -1. + <_> + 23 9 1 2 3. + 0 + <_> + + <_> + 23 8 3 3 -1. + <_> + 24 8 1 3 3. + 0 + <_> + + <_> + 23 10 3 2 -1. + <_> + 24 10 1 2 3. + 0 + <_> + + <_> + 24 3 20 17 -1. + <_> + 29 3 10 17 2. + 0 + <_> + + <_> + 24 4 14 6 -1. + <_> + 31 4 7 6 2. + 0 + <_> + + <_> + 24 18 9 2 -1. + <_> + 27 18 3 2 3. + 0 + <_> + + <_> + 25 5 8 4 -1. + <_> + 25 5 4 4 2. + 1 + <_> + + <_> + 25 6 22 14 -1. + <_> + 36 6 11 14 2. + 0 + <_> + + <_> + 25 12 28 8 -1. + <_> + 25 14 28 4 2. + 0 + <_> + + <_> + 25 14 9 3 -1. + <_> + 25 15 9 1 3. + 0 + <_> + + <_> + 26 2 27 18 -1. + <_> + 35 2 9 18 3. + 0 + <_> + + <_> + 26 3 22 3 -1. + <_> + 26 4 22 1 3. + 0 + <_> + + <_> + 26 4 8 4 -1. + <_> + 30 4 4 4 2. + 0 + <_> + + <_> + 26 4 20 6 -1. + <_> + 31 4 10 6 2. + 0 + <_> + + <_> + 26 7 1 12 -1. + <_> + 22 11 1 4 3. + 1 + <_> + + <_> + 26 9 3 3 -1. + <_> + 27 9 1 3 3. + 0 + <_> + + <_> + 26 13 9 3 -1. + <_> + 26 14 9 1 3. + 0 + <_> + + <_> + 27 3 15 6 -1. + <_> + 32 3 5 6 3. + 0 + <_> + + <_> + 27 9 3 1 -1. + <_> + 28 9 1 1 3. + 0 + <_> + + <_> + 27 9 3 2 -1. + <_> + 28 9 1 2 3. + 0 + <_> + + <_> + 27 10 3 3 -1. + <_> + 28 10 1 3 3. + 0 + <_> + + <_> + 27 11 3 2 -1. + <_> + 28 11 1 2 3. + 0 + <_> + + <_> + 28 2 10 4 -1. + <_> + 28 2 10 2 2. + 1 + <_> + + <_> + 28 8 32 6 -1. + <_> + 28 10 32 2 3. + 0 + <_> + + <_> + 28 10 3 1 -1. + <_> + 29 10 1 1 3. + 0 + <_> + + <_> + 28 11 3 1 -1. + <_> + 29 11 1 1 3. + 0 + <_> + + <_> + 28 15 5 4 -1. + <_> + 28 16 5 2 2. + 0 + <_> + + <_> + 28 16 23 4 -1. + <_> + 28 17 23 2 2. + 0 + <_> + + <_> + 28 19 6 1 -1. + <_> + 30 19 2 1 3. + 0 + <_> + + <_> + 29 3 9 4 -1. + <_> + 32 3 3 4 3. + 0 + <_> + + <_> + 29 5 9 1 -1. + <_> + 32 5 3 1 3. + 0 + <_> + + <_> + 29 8 3 6 -1. + <_> + 30 8 1 6 3. + 0 + <_> + + <_> + 29 9 3 1 -1. + <_> + 30 9 1 1 3. + 0 + <_> + + <_> + 29 11 10 4 -1. + <_> + 29 13 10 2 2. + 0 + <_> + + <_> + 29 11 26 8 -1. + <_> + 29 13 26 4 2. + 0 + <_> + + <_> + 30 0 16 6 -1. + <_> + 30 3 16 3 2. + 0 + <_> + + <_> + 30 2 30 6 -1. + <_> + 30 2 15 3 2. + <_> + 45 5 15 3 2. + 0 + <_> + + <_> + 30 3 9 4 -1. + <_> + 33 3 3 4 3. + 0 + <_> + + <_> + 30 5 9 4 -1. + <_> + 30 6 9 2 2. + 0 + <_> + + <_> + 30 10 3 2 -1. + <_> + 31 10 1 2 3. + 0 + <_> + + <_> + 30 14 18 6 -1. + <_> + 36 14 6 6 3. + 0 + <_> + + <_> + 31 3 4 3 -1. + <_> + 32 3 2 3 2. + 0 + <_> + + <_> + 31 7 4 9 -1. + <_> + 32 7 2 9 2. + 0 + <_> + + <_> + 31 11 3 2 -1. + <_> + 32 11 1 2 3. + 0 + <_> + + <_> + 31 11 3 3 -1. + <_> + 32 11 1 3 3. + 0 + <_> + + <_> + 32 4 3 2 -1. + <_> + 33 4 1 2 3. + 0 + <_> + + <_> + 32 6 18 6 -1. + <_> + 32 6 9 3 2. + <_> + 41 9 9 3 2. + 0 + <_> + + <_> + 33 1 22 6 -1. + <_> + 33 4 22 3 2. + 0 + <_> + + <_> + 33 3 4 2 -1. + <_> + 34 3 2 2 2. + 0 + <_> + + <_> + 33 3 4 4 -1. + <_> + 34 3 2 4 2. + 0 + <_> + + <_> + 33 5 4 1 -1. + <_> + 34 5 2 1 2. + 0 + <_> + + <_> + 33 9 3 6 -1. + <_> + 34 9 1 6 3. + 0 + <_> + + <_> + 33 10 3 3 -1. + <_> + 34 10 1 3 3. + 0 + <_> + + <_> + 34 8 4 7 -1. + <_> + 35 8 2 7 2. + 0 + <_> + + <_> + 34 9 3 5 -1. + <_> + 35 9 1 5 3. + 0 + <_> + + <_> + 34 18 9 2 -1. + <_> + 37 18 3 2 3. + 0 + <_> + + <_> + 35 0 8 6 -1. + <_> + 37 0 4 6 2. + 0 + <_> + + <_> + 35 9 3 2 -1. + <_> + 36 9 1 2 3. + 0 + <_> + + <_> + 36 9 24 9 -1. + <_> + 42 9 12 9 2. + 0 + <_> + + <_> + 37 1 16 18 -1. + <_> + 41 1 8 18 2. + 0 + <_> + + <_> + 37 11 20 8 -1. + <_> + 42 11 10 8 2. + 0 + <_> + + <_> + 38 8 15 12 -1. + <_> + 38 12 15 4 3. + 0 + <_> + + <_> + 39 6 12 8 -1. + <_> + 45 6 6 8 2. + 0 + <_> + + <_> + 40 8 8 4 -1. + <_> + 40 8 8 2 2. + 1 + <_> + + <_> + 40 10 3 1 -1. + <_> + 41 10 1 1 3. + 0 + <_> + + <_> + 40 10 3 5 -1. + <_> + 41 10 1 5 3. + 0 + <_> + + <_> + 40 13 12 6 -1. + <_> + 43 13 6 6 2. + 0 + <_> + + <_> + 41 5 7 15 -1. + <_> + 41 10 7 5 3. + 0 + <_> + + <_> + 41 6 12 6 -1. + <_> + 45 6 4 6 3. + 0 + <_> + + <_> + 41 7 12 7 -1. + <_> + 45 7 4 7 3. + 0 + <_> + + <_> + 41 8 12 12 -1. + <_> + 45 8 4 12 3. + 0 + <_> + + <_> + 41 9 3 6 -1. + <_> + 42 9 1 6 3. + 0 + <_> + + <_> + 42 2 3 13 -1. + <_> + 43 2 1 13 3. + 0 + <_> + + <_> + 42 4 18 10 -1. + <_> + 42 4 9 5 2. + <_> + 51 9 9 5 2. + 0 + <_> + + <_> + 42 5 18 8 -1. + <_> + 42 5 9 4 2. + <_> + 51 9 9 4 2. + 0 + <_> + + <_> + 42 7 2 7 -1. + <_> + 43 7 1 7 2. + 0 + <_> + + <_> + 42 14 12 5 -1. + <_> + 46 14 4 5 3. + 0 + <_> + + <_> + 43 1 10 9 -1. + <_> + 40 4 10 3 3. + 1 + <_> + + <_> + 43 6 6 6 -1. + <_> + 43 9 6 3 2. + 0 + <_> + + <_> + 44 0 8 20 -1. + <_> + 46 0 4 20 2. + 0 + <_> + + <_> + 44 2 16 12 -1. + <_> + 44 2 8 6 2. + <_> + 52 8 8 6 2. + 0 + <_> + + <_> + 44 5 3 8 -1. + <_> + 45 5 1 8 3. + 0 + <_> + + <_> + 44 8 3 4 -1. + <_> + 45 8 1 4 3. + 0 + <_> + + <_> + 44 12 16 4 -1. + <_> + 52 12 8 4 2. + 0 + <_> + + <_> + 44 13 10 3 -1. + <_> + 49 13 5 3 2. + 0 + <_> + + <_> + 45 19 9 1 -1. + <_> + 48 19 3 1 3. + 0 + <_> + + <_> + 46 3 8 8 -1. + <_> + 50 3 4 8 2. + 0 + <_> + + <_> + 47 12 10 6 -1. + <_> + 52 12 5 6 2. + 0 + <_> + + <_> + 48 0 4 13 -1. + <_> + 49 0 2 13 2. + 0 + <_> + + <_> + 48 5 3 12 -1. + <_> + 45 8 3 6 2. + 1 + <_> + + <_> + 48 9 12 8 -1. + <_> + 54 9 6 8 2. + 0 + <_> + + <_> + 48 13 12 4 -1. + <_> + 54 13 6 4 2. + 0 + <_> + + <_> + 49 8 3 1 -1. + <_> + 50 8 1 1 3. + 0 + <_> + + <_> + 49 8 3 2 -1. + <_> + 50 8 1 2 3. + 0 + <_> + + <_> + 49 8 3 3 -1. + <_> + 50 8 1 3 3. + 0 + <_> + + <_> + 50 9 3 3 -1. + <_> + 51 10 1 1 9. + 0 + <_> + + <_> + 51 8 3 3 -1. + <_> + 52 8 1 3 3. + 0 + <_> + + <_> + 52 6 6 10 -1. + <_> + 54 6 2 10 3. + 0 + <_> + + <_> + 52 7 8 7 -1. + <_> + 56 7 4 7 2. + 0 + <_> + + <_> + 52 8 8 4 -1. + <_> + 52 8 8 2 2. + 1 + <_> + + <_> + 54 3 6 15 -1. + <_> + 57 3 3 15 2. + 0 + <_> + + <_> + 54 8 6 7 -1. + <_> + 57 8 3 7 2. + 0 + <_> + + <_> + 57 11 3 6 -1. + <_> + 57 13 3 2 3. + 0 + <_> + + <_> + 59 8 1 3 -1. + <_> + 59 9 1 1 3. + 0 + diff --git a/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.rst b/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.rst index 358a963b4..986facc84 100644 --- a/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.rst +++ b/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.rst @@ -16,7 +16,7 @@ Basics of Brute-Force Matcher Brute-Force matcher is simple. It takes the descriptor of one feature in first set and is matched with all other features in second set using some distance calculation. And the closest one is returned. -For BF matcher, first we have to create the BFMatcher object using **cv2.BFMatcher()**. It takes two optional params. First one is ``normType``. It specifies the distance measurement to be used. By default, it is ``cv2.NORM_L2``. It is good for SIFT, SURF etc (``cv2.NORM_L1`` is also there). For binary string based descriptors like ORB, BRIEF, BRISK etc, ``cv2.NORM_HAMMING`` should be used, which used Hamming distance as measurement. If ORB is using ``VTA_K == 3 or 4``, ``cv2.NORM_HAMMING2`` should be used. +For BF matcher, first we have to create the BFMatcher object using **cv2.BFMatcher()**. It takes two optional params. First one is ``normType``. It specifies the distance measurement to be used. By default, it is ``cv2.NORM_L2``. It is good for SIFT, SURF etc (``cv2.NORM_L1`` is also there). For binary string based descriptors like ORB, BRIEF, BRISK etc, ``cv2.NORM_HAMMING`` should be used, which used Hamming distance as measurement. If ORB is using ``WTA_K == 3 or 4``, ``cv2.NORM_HAMMING2`` should be used. Second param is boolean variable, ``crossCheck`` which is false by default. If it is true, Matcher returns only those matches with value (i,j) such that i-th descriptor in set A has j-th descriptor in set B as the best match and vice-versa. That is, the two features in both sets should match each other. It provides consistant result, and is a good alternative to ratio test proposed by D.Lowe in SIFT paper. diff --git a/doc/tutorials/core/basic_linear_transform/basic_linear_transform.rst b/doc/tutorials/core/basic_linear_transform/basic_linear_transform.rst index 75c262868..5a5597a75 100644 --- a/doc/tutorials/core/basic_linear_transform/basic_linear_transform.rst +++ b/doc/tutorials/core/basic_linear_transform/basic_linear_transform.rst @@ -187,7 +187,7 @@ Explanation image.convertTo(new_image, -1, alpha, beta); - where :convert_to:`convertTo <>` would effectively perform *new_image = a*image + beta*. However, we wanted to show you how to access each pixel. In any case, both methods give the same result. + where :convert_to:`convertTo <>` would effectively perform *new_image = a*image + beta*. However, we wanted to show you how to access each pixel. In any case, both methods give the same result but convertTo is more optimized and works a lot faster. Result ======= diff --git a/doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.rst b/doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.rst index 42f6a6091..7e1674efa 100644 --- a/doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.rst +++ b/doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.rst @@ -31,15 +31,15 @@ Here's a sample code of how to achieve all the stuff enumerated at the goal list Explanation =========== -Here we talk only about XML and YAML file inputs. Your output (and its respective input) file may have only one of these extensions and the structure coming from this. They are two kinds of data structures you may serialize: *mappings* (like the STL map) and *element sequence* (like the STL vector>. The difference between these is that in a map every element has a unique name through what you may access it. For sequences you need to go through them to query a specific item. +Here we talk only about XML and YAML file inputs. Your output (and its respective input) file may have only one of these extensions and the structure coming from this. They are two kinds of data structures you may serialize: *mappings* (like the STL map) and *element sequence* (like the STL vector). The difference between these is that in a map every element has a unique name through what you may access it. For sequences you need to go through them to query a specific item. -1. **XML\\YAML File Open and Close.** Before you write any content to such file you need to open it and at the end to close it. The XML\YAML data structure in OpenCV is :xmlymlpers:`FileStorage `. To specify that this structure to which file binds on your hard drive you can use either its constructor or the *open()* function of this: +1. **XML/YAML File Open and Close.** Before you write any content to such file you need to open it and at the end to close it. The XML/YAML data structure in OpenCV is :xmlymlpers:`FileStorage `. To specify that this structure to which file binds on your hard drive you can use either its constructor or the *open()* function of this: .. code-block:: cpp string filename = "I.xml"; FileStorage fs(filename, FileStorage::WRITE); - \\... + //... fs.open(filename, FileStorage::READ); Either one of this you use the second argument is a constant specifying the type of operations you'll be able to on them: WRITE, READ or APPEND. The extension specified in the file name also determinates the output format that will be used. The output may be even compressed if you specify an extension such as *.xml.gz*. @@ -64,7 +64,7 @@ Here we talk only about XML and YAML file inputs. Your output (and its respectiv fs["iterationNr"] >> itNr; itNr = (int) fs["iterationNr"]; -#. **Input\\Output of OpenCV Data structures.** Well these behave exactly just as the basic C++ types: +#. **Input/Output of OpenCV Data structures.** Well these behave exactly just as the basic C++ types: .. code-block:: cpp @@ -77,7 +77,7 @@ Here we talk only about XML and YAML file inputs. Your output (and its respectiv fs["R"] >> R; // Read cv::Mat fs["T"] >> T; -#. **Input\\Output of vectors (arrays) and associative maps.** As I mentioned beforehand we can output maps and sequences (array, vector) too. Again we first print the name of the variable and then we have to specify if our output is either a sequence or map. +#. **Input/Output of vectors (arrays) and associative maps.** As I mentioned beforehand, we can output maps and sequences (array, vector) too. Again we first print the name of the variable and then we have to specify if our output is either a sequence or map. For sequence before the first element print the "[" character and after the last one the "]" character: diff --git a/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.rst b/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.rst index de38a858d..736aceb02 100644 --- a/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.rst +++ b/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.rst @@ -113,7 +113,7 @@ Although *Mat* works really well as an image container, it is also a general mat For instance, *CV_8UC3* means we use unsigned char types that are 8 bit long and each pixel has three of these to form the three channels. This are predefined for up to four channel numbers. The :basicstructures:`Scalar ` is four element short vector. Specify this and you can initialize all matrix points with a custom value. If you need more you can create the type with the upper macro, setting the channel number in parenthesis as you can see below. - + Use C\\C++ arrays and initialize via constructor + + Use C/C++ arrays and initialize via constructor .. literalinclude:: ../../../../samples/cpp/tutorial_code/core/mat_the_basic_image_container/mat_the_basic_image_container.cpp :language: cpp diff --git a/doc/tutorials/introduction/linux_install/linux_install.rst b/doc/tutorials/introduction/linux_install/linux_install.rst index d31c68a88..7aeb646bd 100644 --- a/doc/tutorials/introduction/linux_install/linux_install.rst +++ b/doc/tutorials/introduction/linux_install/linux_install.rst @@ -7,22 +7,24 @@ These steps have been tested for Ubuntu 10.04 but should work with other distros Required Packages ================= - * GCC 4.4.x or later. This can be installed with: + * GCC 4.4.x or later + * CMake 2.8.7 or higher + * Git + * GTK+2.x or higher, including headers (libgtk2.0-dev) + * pkg-config + * Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy) + * ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev + * [optional] libtbb2 libtbb-dev + * [optional] libdc1394 2.x + * [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev + +The packages can be installed using a terminal and the following commands or by using Synaptic Manager: .. code-block:: bash - sudo apt-get install build-essential - - * CMake 2.8.7 or higher; - * Git; - * GTK+2.x or higher, including headers (libgtk2.0-dev); - * pkg-config; - * Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy); - * ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev; - * [optional] libdc1394 2.x; - * [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev. - -All the libraries above can be installed via Terminal or by using Synaptic Manager. + [compiler] sudo apt-get install build-essential + [required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev + [optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev Getting OpenCV Source Code ========================== diff --git a/doc/tutorials/introduction/windows_install/windows_install.rst b/doc/tutorials/introduction/windows_install/windows_install.rst index f4e9767e7..8d31336df 100644 --- a/doc/tutorials/introduction/windows_install/windows_install.rst +++ b/doc/tutorials/introduction/windows_install/windows_install.rst @@ -55,7 +55,7 @@ Building the OpenCV library from scratch requires a couple of tools installed be .. |TortoiseGit| replace:: TortoiseGit .. _TortoiseGit: http://code.google.com/p/tortoisegit/wiki/Download .. |Python_Libraries| replace:: Python libraries -.. _Python_Libraries: http://www.python.org/getit/ +.. _Python_Libraries: http://www.python.org/downloads/ .. |Numpy| replace:: Numpy .. _Numpy: http://numpy.scipy.org/ .. |IntelTBB| replace:: Intel |copy| Threading Building Blocks (*TBB*) diff --git a/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.rst b/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.rst index 3fd734f35..2ec616fbc 100644 --- a/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.rst +++ b/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.rst @@ -90,17 +90,25 @@ A full list, for the latest version would contain: .. code-block:: bash - opencv_core231d.lib - opencv_imgproc231d.lib - opencv_highgui231d.lib - opencv_ml231d.lib - opencv_video231d.lib - opencv_features2d231d.lib - opencv_calib3d231d.lib - opencv_objdetect231d.lib - opencv_contrib231d.lib - opencv_legacy231d.lib - opencv_flann231d.lib + opencv_calib3d249d.lib + opencv_contrib249d.lib + opencv_core249d.lib + opencv_features2d249d.lib + opencv_flann249d.lib + opencv_gpu249d.lib + opencv_highgui249d.lib + opencv_imgproc249d.lib + opencv_legacy249d.lib + opencv_ml249d.lib + opencv_nonfree249d.lib + opencv_objdetect249d.lib + opencv_ocl249d.lib + opencv_photo249d.lib + opencv_stitching249d.lib + opencv_superres249d.lib + opencv_ts249d.lib + opencv_video249d.lib + opencv_videostab249d.lib The letter *d* at the end just indicates that these are the libraries required for the debug. Now click ok to save and do the same with a new property inside the Release rule section. Make sure to omit the *d* letters from the library names and to save the property sheets with the save icon above them. diff --git a/doc/tutorials/introduction/windows_visual_studio_image_watch/windows_visual_studio_image_watch.rst b/doc/tutorials/introduction/windows_visual_studio_image_watch/windows_visual_studio_image_watch.rst index 91b411682..5a68dad5c 100644 --- a/doc/tutorials/introduction/windows_visual_studio_image_watch/windows_visual_studio_image_watch.rst +++ b/doc/tutorials/introduction/windows_visual_studio_image_watch/windows_visual_studio_image_watch.rst @@ -78,6 +78,8 @@ Make sure your active solution configuration (:menuselection:`Build --> Configur Build your solution (:menuselection:`Build --> Build Solution`, or press *F7*). +Before continuing, do not forget to add the command line argument of your input image to your project (:menuselection:`Right click on project --> Properties --> Configuration Properties --> Debugging` and then set the field ``Command Arguments`` with the location of the image). + Now set a breakpoint on the source line that says .. code-block:: c++ diff --git a/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.rst b/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.rst index 50f734803..574071de7 100644 --- a/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.rst +++ b/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.rst @@ -105,8 +105,8 @@ Explanation .. code-block:: cpp - Mat trainingDataMat(3, 2, CV_32FC1, trainingData); - Mat labelsMat (3, 1, CV_32FC1, labels); + Mat trainingDataMat(4, 2, CV_32FC1, trainingData); + Mat labelsMat (4, 1, CV_32FC1, labels); 2. **Set up SVM's parameters** diff --git a/include/opencv/cv.h b/include/opencv/cv.h index 1ed020a35..0aefc6d27 100644 --- a/include/opencv/cv.h +++ b/include/opencv/cv.h @@ -65,8 +65,6 @@ #include "opencv2/photo/photo_c.h" #include "opencv2/video/tracking_c.h" #include "opencv2/objdetect/objdetect_c.h" -#include "opencv2/legacy.hpp" -#include "opencv2/legacy/compat.hpp" #if !defined(CV_IMPL) #define CV_IMPL extern "C" diff --git a/include/opencv2/opencv.hpp b/include/opencv2/opencv.hpp index 020a45373..b7c290a49 100644 --- a/include/opencv2/opencv.hpp +++ b/include/opencv2/opencv.hpp @@ -51,7 +51,6 @@ #include "opencv2/objdetect.hpp" #include "opencv2/calib3d.hpp" #include "opencv2/highgui.hpp" -#include "opencv2/contrib.hpp" #include "opencv2/ml.hpp" #endif diff --git a/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst b/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst index 36af8362f..b484e8d03 100644 --- a/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst +++ b/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst @@ -224,9 +224,9 @@ Computes useful camera characteristics from the camera matrix. :param imageSize: Input image size in pixels. - :param apertureWidth: Physical width of the sensor. + :param apertureWidth: Physical width in mm of the sensor. - :param apertureHeight: Physical height of the sensor. + :param apertureHeight: Physical height in mm of the sensor. :param fovx: Output field of view in degrees along the horizontal sensor axis. @@ -234,13 +234,15 @@ Computes useful camera characteristics from the camera matrix. :param focalLength: Focal length of the lens in mm. - :param principalPoint: Principal point in pixels. + :param principalPoint: Principal point in mm. :param aspectRatio: :math:`f_y/f_x` The function computes various useful camera characteristics from the previously estimated camera matrix. +.. note:: + Do keep in mind that the unity measure 'mm' stands for whatever unit of measure one chooses for the chessboard pitch (it can thus be any value). composeRT ------------- @@ -582,15 +584,15 @@ Finds an object pose from 3D-2D point correspondences. :param flags: Method for solving a PnP problem: - * **CV_ITERATIVE** Iterative method is based on Levenberg-Marquardt optimization. In this case the function finds such a pose that minimizes reprojection error, that is the sum of squared distances between the observed projections ``imagePoints`` and the projected (using :ocv:func:`projectPoints` ) ``objectPoints`` . - * **CV_P3P** Method is based on the paper of X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang "Complete Solution Classification for the Perspective-Three-Point Problem". In this case the function requires exactly four object and image points. - * **CV_EPNP** Method has been introduced by F.Moreno-Noguer, V.Lepetit and P.Fua in the paper "EPnP: Efficient Perspective-n-Point Camera Pose Estimation". + * **ITERATIVE** Iterative method is based on Levenberg-Marquardt optimization. In this case the function finds such a pose that minimizes reprojection error, that is the sum of squared distances between the observed projections ``imagePoints`` and the projected (using :ocv:func:`projectPoints` ) ``objectPoints`` . + * **P3P** Method is based on the paper of X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang "Complete Solution Classification for the Perspective-Three-Point Problem". In this case the function requires exactly four object and image points. + * **EPNP** Method has been introduced by F.Moreno-Noguer, V.Lepetit and P.Fua in the paper "EPnP: Efficient Perspective-n-Point Camera Pose Estimation". The function estimates the object pose given a set of object points, their corresponding image projections, as well as the camera matrix and the distortion coefficients. .. note:: - * An example of how to use solvePNP for planar augmented reality can be found at opencv_source_code/samples/python2/plane_ar.py + * An example of how to use solvePnP for planar augmented reality can be found at opencv_source_code/samples/python2/plane_ar.py solvePnPRansac ------------------ @@ -707,8 +709,8 @@ Calculates an essential matrix from the corresponding points in two images. :param method: Method for computing a fundamental matrix. - * **CV_RANSAC** for the RANSAC algorithm. - * **CV_LMEDS** for the LMedS algorithm. + * **RANSAC** for the RANSAC algorithm. + * **MEDS** for the LMedS algorithm. :param threshold: Parameter used for RANSAC. It is the maximum distance from a point to an epipolar line in pixels, beyond which the point is considered an outlier and is not used for computing the final fundamental matrix. It can be set to something like 1-3, depending on the accuracy of the point localization, image resolution, and the image noise. @@ -807,7 +809,7 @@ In this scenario, ``points1`` and ``points2`` are the same input for ``findEssen cv::Point2d pp(0.0, 0.0); Mat E, R, t, mask; - E = findEssentialMat(points1, points2, focal, pp, CV_RANSAC, 0.999, 1.0, mask); + E = findEssentialMat(points1, points2, focal, pp, RANSAC, 0.999, 1.0, mask); recoverPose(E, points1, points2, R, t, focal, pp, mask); @@ -830,9 +832,9 @@ Finds a perspective transformation between two planes. * **0** - a regular method using all the points - * **CV_RANSAC** - RANSAC-based robust method + * **RANSAC** - RANSAC-based robust method - * **CV_LMEDS** - Least-Median robust method + * **LMEDS** - Least-Median robust method :param ransacReprojThreshold: Maximum allowed reprojection error to treat a point pair as an inlier (used in the RANSAC method only). That is, if @@ -842,7 +844,7 @@ Finds a perspective transformation between two planes. then the point :math:`i` is considered an outlier. If ``srcPoints`` and ``dstPoints`` are measured in pixels, it usually makes sense to set this parameter somewhere in the range of 1 to 10. - :param mask: Optional output mask set by a robust method ( ``CV_RANSAC`` or ``CV_LMEDS`` ). Note that the input mask values are ignored. + :param mask: Optional output mask set by a robust method ( ``RANSAC`` or ``LMEDS`` ). Note that the input mask values are ignored. The functions find and return the perspective transformation :math:`H` between the source and the destination planes: @@ -1490,6 +1492,10 @@ Reconstructs points by triangulation. The function reconstructs 3-dimensional points (in homogeneous coordinates) by using their observations with a stereo camera. Projections matrices can be obtained from :ocv:func:`stereoRectify`. +.. note:: + + Keep in mind that all input data should be of float type in order for this function to work. + .. seealso:: :ocv:func:`reprojectImageTo3D` diff --git a/modules/calib3d/src/solvepnp.cpp b/modules/calib3d/src/solvepnp.cpp index 698302b94..2b2d1bdf3 100644 --- a/modules/calib3d/src/solvepnp.cpp +++ b/modules/calib3d/src/solvepnp.cpp @@ -94,7 +94,7 @@ bool cv::solvePnP( InputArray _opoints, InputArray _ipoints, return true; } else - CV_Error(CV_StsBadArg, "The flags argument must be one of CV_ITERATIVE or CV_EPNP"); + CV_Error(CV_StsBadArg, "The flags argument must be one of CV_ITERATIVE, CV_P3P or CV_EPNP"); return false; } diff --git a/modules/calib3d/src/stereosgbm.cpp b/modules/calib3d/src/stereosgbm.cpp index 6c5fd1c5e..f96a6ad83 100644 --- a/modules/calib3d/src/stereosgbm.cpp +++ b/modules/calib3d/src/stereosgbm.cpp @@ -1029,18 +1029,6 @@ void filterSpecklesImpl(cv::Mat& img, int newVal, int maxSpeckleSize, int maxDif T dp = *dpp; int* lpp = labels + width*p.y + p.x; - if( p.x < width-1 && !lpp[+1] && dpp[+1] != newVal && std::abs(dp - dpp[+1]) <= maxDiff ) - { - lpp[+1] = curlabel; - *ws++ = Point2s(p.x+1, p.y); - } - - if( p.x > 0 && !lpp[-1] && dpp[-1] != newVal && std::abs(dp - dpp[-1]) <= maxDiff ) - { - lpp[-1] = curlabel; - *ws++ = Point2s(p.x-1, p.y); - } - if( p.y < height-1 && !lpp[+width] && dpp[+dstep] != newVal && std::abs(dp - dpp[+dstep]) <= maxDiff ) { lpp[+width] = curlabel; @@ -1053,6 +1041,18 @@ void filterSpecklesImpl(cv::Mat& img, int newVal, int maxSpeckleSize, int maxDif *ws++ = Point2s(p.x, p.y-1); } + if( p.x < width-1 && !lpp[+1] && dpp[+1] != newVal && std::abs(dp - dpp[+1]) <= maxDiff ) + { + lpp[+1] = curlabel; + *ws++ = Point2s(p.x+1, p.y); + } + + if( p.x > 0 && !lpp[-1] && dpp[-1] != newVal && std::abs(dp - dpp[-1]) <= maxDiff ) + { + lpp[-1] = curlabel; + *ws++ = Point2s(p.x-1, p.y); + } + // pop most recent and propagate // NB: could try least recent, maybe better convergence p = *--ws; @@ -1078,13 +1078,39 @@ void cv::filterSpeckles( InputOutputArray _img, double _newval, int maxSpeckleSi double _maxDiff, InputOutputArray __buf ) { Mat img = _img.getMat(); + int type = img.type(); Mat temp, &_buf = __buf.needed() ? __buf.getMatRef() : temp; - CV_Assert( img.type() == CV_8UC1 || img.type() == CV_16SC1 ); + CV_Assert( type == CV_8UC1 || type == CV_16SC1 ); - int newVal = cvRound(_newval); - int maxDiff = cvRound(_maxDiff); + int newVal = cvRound(_newval), maxDiff = cvRound(_maxDiff); - if (img.type() == CV_8UC1) +#if IPP_VERSION_X100 >= 801 + Ipp32s bufsize = 0; + IppiSize roisize = { img.cols, img.rows }; + IppDataType datatype = type == CV_8UC1 ? ipp8u : ipp16s; + + if (!__buf.needed() && (type == CV_8UC1 || type == CV_16SC1)) + { + IppStatus status = ippiMarkSpecklesGetBufferSize(roisize, datatype, CV_MAT_CN(type), &bufsize); + Ipp8u * buffer = ippsMalloc_8u(bufsize); + + if ((int)status >= 0) + { + if (type == CV_8UC1) + status = ippiMarkSpeckles_8u_C1IR((Ipp8u *)img.data, (int)img.step, roisize, + (Ipp8u)newVal, maxSpeckleSize, (Ipp8u)maxDiff, ippiNormL1, buffer); + else + status = ippiMarkSpeckles_16s_C1IR((Ipp16s *)img.data, (int)img.step, roisize, + (Ipp16s)newVal, maxSpeckleSize, (Ipp16s)maxDiff, ippiNormL1, buffer); + } + + if (status >= 0) + return; + setIppErrorStatus(); + } +#endif + + if (type == CV_8UC1) filterSpecklesImpl(img, newVal, maxSpeckleSize, maxDiff, _buf); else filterSpecklesImpl(img, newVal, maxSpeckleSize, maxDiff, _buf); diff --git a/modules/calib3d/test/test_cameracalibration.cpp b/modules/calib3d/test/test_cameracalibration.cpp index da9b931f5..5b4b72cca 100644 --- a/modules/calib3d/test/test_cameracalibration.cpp +++ b/modules/calib3d/test/test_cameracalibration.cpp @@ -1608,7 +1608,7 @@ void CV_StereoCalibrationTest::run( int ) Mat _M1, _M2, _D1, _D2; vector _R1, _R2, _T1, _T2; calibrateCamera( objpt, imgpt1, imgsize, _M1, _D1, _R1, _T1, 0 ); - calibrateCamera( objpt, imgpt2, imgsize, _M2, _D2, _R2, _T1, 0 ); + calibrateCamera( objpt, imgpt2, imgsize, _M2, _D2, _R2, _T2, 0 ); undistortPoints( _imgpt1, _imgpt1, _M1, _D1, Mat(), _M1 ); undistortPoints( _imgpt2, _imgpt2, _M2, _D2, Mat(), _M2 ); diff --git a/modules/contrib/CMakeLists.txt b/modules/contrib/CMakeLists.txt deleted file mode 100644 index 120301be3..000000000 --- a/modules/contrib/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -ocv_define_module(contrib opencv_imgproc opencv_calib3d opencv_ml opencv_video opencv_objdetect OPTIONAL opencv_highgui opencv_nonfree) diff --git a/modules/contrib/doc/contrib.rst b/modules/contrib/doc/contrib.rst deleted file mode 100644 index de14d33ef..000000000 --- a/modules/contrib/doc/contrib.rst +++ /dev/null @@ -1,12 +0,0 @@ -*************************************** -contrib. Contributed/Experimental Stuff -*************************************** - -The module contains some recently added functionality that has not been stabilized, or functionality that is considered optional. - -.. toctree:: - :maxdepth: 2 - - stereo - FaceRecognizer Documentation - openfabmap diff --git a/modules/contrib/doc/facerec/colormaps.rst b/modules/contrib/doc/facerec/colormaps.rst deleted file mode 100644 index 95750ab5c..000000000 --- a/modules/contrib/doc/facerec/colormaps.rst +++ /dev/null @@ -1,107 +0,0 @@ -ColorMaps in OpenCV -=================== - -applyColorMap ---------------------- - -Applies a GNU Octave/MATLAB equivalent colormap on a given image. - -.. ocv:function:: void applyColorMap(InputArray src, OutputArray dst, int colormap) - - :param src: The source image, grayscale or colored does not matter. - :param dst: The result is the colormapped source image. Note: :ocv:func:`Mat::create` is called on dst. - :param colormap: The colormap to apply, see the list of available colormaps below. - -Currently the following GNU Octave/MATLAB equivalent colormaps are implemented: - -.. code-block:: cpp - - enum - { - COLORMAP_AUTUMN = 0, - COLORMAP_BONE = 1, - COLORMAP_JET = 2, - COLORMAP_WINTER = 3, - COLORMAP_RAINBOW = 4, - COLORMAP_OCEAN = 5, - COLORMAP_SUMMER = 6, - COLORMAP_SPRING = 7, - COLORMAP_COOL = 8, - COLORMAP_HSV = 9, - COLORMAP_PINK = 10, - COLORMAP_HOT = 11 - } - - -Description ------------ - -The human perception isn't built for observing fine changes in grayscale images. Human eyes are more sensitive to observing changes between colors, so you often need to recolor your grayscale images to get a clue about them. OpenCV now comes with various colormaps to enhance the visualization in your computer vision application. - -In OpenCV 2.4 you only need :ocv:func:`applyColorMap` to apply a colormap on a given image. The following sample code reads the path to an image from command line, applies a Jet colormap on it and shows the result: - -.. code-block:: cpp - - #include - #include - #include - - using namespace cv; - - int main(int argc, const char *argv[]) { - // Get the path to the image, if it was given - // if no arguments were given. - String filename; - if (argc > 1) { - filename = String(argv[1]); - } - // The following lines show how to apply a colormap on a given image - // and show it with cv::imshow example with an image. An exception is - // thrown if the path to the image is invalid. - if(!filename.empty()) { - Mat img0 = imread(filename); - // Throw an exception, if the image can't be read: - if(img0.empty()) { - CV_Error(CV_StsBadArg, "Sample image is empty. Please adjust your path, so it points to a valid input image!"); - } - // Holds the colormap version of the image: - Mat cm_img0; - // Apply the colormap: - applyColorMap(img0, cm_img0, COLORMAP_JET); - // Show the result: - imshow("cm_img0", cm_img0); - waitKey(0); - } - - return 0; - } - -And here are the color scales for each of the available colormaps: - -+-----------------------+---------------------------------------------------+ -| Class | Scale | -+=======================+===================================================+ -| COLORMAP_AUTUMN | .. image:: img/colormaps/colorscale_autumn.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_BONE | .. image:: img/colormaps/colorscale_bone.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_COOL | .. image:: img/colormaps/colorscale_cool.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_HOT | .. image:: img/colormaps/colorscale_hot.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_HSV | .. image:: img/colormaps/colorscale_hsv.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_JET | .. image:: img/colormaps/colorscale_jet.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_OCEAN | .. image:: img/colormaps/colorscale_ocean.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_PINK | .. image:: img/colormaps/colorscale_pink.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_RAINBOW | .. image:: img/colormaps/colorscale_rainbow.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_SPRING | .. image:: img/colormaps/colorscale_spring.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_SUMMER | .. image:: img/colormaps/colorscale_summer.jpg | -+-----------------------+---------------------------------------------------+ -| COLORMAP_WINTER | .. image:: img/colormaps/colorscale_winter.jpg | -+-----------------------+---------------------------------------------------+ diff --git a/modules/contrib/doc/facerec/etc/at.txt b/modules/contrib/doc/facerec/etc/at.txt deleted file mode 100644 index 3d763261f..000000000 --- a/modules/contrib/doc/facerec/etc/at.txt +++ /dev/null @@ -1,400 +0,0 @@ -/home/philipp/facerec/data/at/s13/2.pgm;12 -/home/philipp/facerec/data/at/s13/7.pgm;12 -/home/philipp/facerec/data/at/s13/6.pgm;12 -/home/philipp/facerec/data/at/s13/9.pgm;12 -/home/philipp/facerec/data/at/s13/5.pgm;12 -/home/philipp/facerec/data/at/s13/3.pgm;12 -/home/philipp/facerec/data/at/s13/4.pgm;12 -/home/philipp/facerec/data/at/s13/10.pgm;12 -/home/philipp/facerec/data/at/s13/8.pgm;12 -/home/philipp/facerec/data/at/s13/1.pgm;12 -/home/philipp/facerec/data/at/s17/2.pgm;16 -/home/philipp/facerec/data/at/s17/7.pgm;16 -/home/philipp/facerec/data/at/s17/6.pgm;16 -/home/philipp/facerec/data/at/s17/9.pgm;16 -/home/philipp/facerec/data/at/s17/5.pgm;16 -/home/philipp/facerec/data/at/s17/3.pgm;16 -/home/philipp/facerec/data/at/s17/4.pgm;16 -/home/philipp/facerec/data/at/s17/10.pgm;16 -/home/philipp/facerec/data/at/s17/8.pgm;16 -/home/philipp/facerec/data/at/s17/1.pgm;16 -/home/philipp/facerec/data/at/s32/2.pgm;31 -/home/philipp/facerec/data/at/s32/7.pgm;31 -/home/philipp/facerec/data/at/s32/6.pgm;31 -/home/philipp/facerec/data/at/s32/9.pgm;31 -/home/philipp/facerec/data/at/s32/5.pgm;31 -/home/philipp/facerec/data/at/s32/3.pgm;31 -/home/philipp/facerec/data/at/s32/4.pgm;31 -/home/philipp/facerec/data/at/s32/10.pgm;31 -/home/philipp/facerec/data/at/s32/8.pgm;31 -/home/philipp/facerec/data/at/s32/1.pgm;31 -/home/philipp/facerec/data/at/s10/2.pgm;9 -/home/philipp/facerec/data/at/s10/7.pgm;9 -/home/philipp/facerec/data/at/s10/6.pgm;9 -/home/philipp/facerec/data/at/s10/9.pgm;9 -/home/philipp/facerec/data/at/s10/5.pgm;9 -/home/philipp/facerec/data/at/s10/3.pgm;9 -/home/philipp/facerec/data/at/s10/4.pgm;9 -/home/philipp/facerec/data/at/s10/10.pgm;9 -/home/philipp/facerec/data/at/s10/8.pgm;9 -/home/philipp/facerec/data/at/s10/1.pgm;9 -/home/philipp/facerec/data/at/s27/2.pgm;26 -/home/philipp/facerec/data/at/s27/7.pgm;26 -/home/philipp/facerec/data/at/s27/6.pgm;26 -/home/philipp/facerec/data/at/s27/9.pgm;26 -/home/philipp/facerec/data/at/s27/5.pgm;26 -/home/philipp/facerec/data/at/s27/3.pgm;26 -/home/philipp/facerec/data/at/s27/4.pgm;26 -/home/philipp/facerec/data/at/s27/10.pgm;26 -/home/philipp/facerec/data/at/s27/8.pgm;26 -/home/philipp/facerec/data/at/s27/1.pgm;26 -/home/philipp/facerec/data/at/s5/2.pgm;4 -/home/philipp/facerec/data/at/s5/7.pgm;4 -/home/philipp/facerec/data/at/s5/6.pgm;4 -/home/philipp/facerec/data/at/s5/9.pgm;4 -/home/philipp/facerec/data/at/s5/5.pgm;4 -/home/philipp/facerec/data/at/s5/3.pgm;4 -/home/philipp/facerec/data/at/s5/4.pgm;4 -/home/philipp/facerec/data/at/s5/10.pgm;4 -/home/philipp/facerec/data/at/s5/8.pgm;4 -/home/philipp/facerec/data/at/s5/1.pgm;4 -/home/philipp/facerec/data/at/s20/2.pgm;19 -/home/philipp/facerec/data/at/s20/7.pgm;19 -/home/philipp/facerec/data/at/s20/6.pgm;19 -/home/philipp/facerec/data/at/s20/9.pgm;19 -/home/philipp/facerec/data/at/s20/5.pgm;19 -/home/philipp/facerec/data/at/s20/3.pgm;19 -/home/philipp/facerec/data/at/s20/4.pgm;19 -/home/philipp/facerec/data/at/s20/10.pgm;19 -/home/philipp/facerec/data/at/s20/8.pgm;19 -/home/philipp/facerec/data/at/s20/1.pgm;19 -/home/philipp/facerec/data/at/s30/2.pgm;29 -/home/philipp/facerec/data/at/s30/7.pgm;29 -/home/philipp/facerec/data/at/s30/6.pgm;29 -/home/philipp/facerec/data/at/s30/9.pgm;29 -/home/philipp/facerec/data/at/s30/5.pgm;29 -/home/philipp/facerec/data/at/s30/3.pgm;29 -/home/philipp/facerec/data/at/s30/4.pgm;29 -/home/philipp/facerec/data/at/s30/10.pgm;29 -/home/philipp/facerec/data/at/s30/8.pgm;29 -/home/philipp/facerec/data/at/s30/1.pgm;29 -/home/philipp/facerec/data/at/s39/2.pgm;38 -/home/philipp/facerec/data/at/s39/7.pgm;38 -/home/philipp/facerec/data/at/s39/6.pgm;38 -/home/philipp/facerec/data/at/s39/9.pgm;38 -/home/philipp/facerec/data/at/s39/5.pgm;38 -/home/philipp/facerec/data/at/s39/3.pgm;38 -/home/philipp/facerec/data/at/s39/4.pgm;38 -/home/philipp/facerec/data/at/s39/10.pgm;38 -/home/philipp/facerec/data/at/s39/8.pgm;38 -/home/philipp/facerec/data/at/s39/1.pgm;38 -/home/philipp/facerec/data/at/s35/2.pgm;34 -/home/philipp/facerec/data/at/s35/7.pgm;34 -/home/philipp/facerec/data/at/s35/6.pgm;34 -/home/philipp/facerec/data/at/s35/9.pgm;34 -/home/philipp/facerec/data/at/s35/5.pgm;34 -/home/philipp/facerec/data/at/s35/3.pgm;34 -/home/philipp/facerec/data/at/s35/4.pgm;34 -/home/philipp/facerec/data/at/s35/10.pgm;34 -/home/philipp/facerec/data/at/s35/8.pgm;34 -/home/philipp/facerec/data/at/s35/1.pgm;34 -/home/philipp/facerec/data/at/s23/2.pgm;22 -/home/philipp/facerec/data/at/s23/7.pgm;22 -/home/philipp/facerec/data/at/s23/6.pgm;22 -/home/philipp/facerec/data/at/s23/9.pgm;22 -/home/philipp/facerec/data/at/s23/5.pgm;22 -/home/philipp/facerec/data/at/s23/3.pgm;22 -/home/philipp/facerec/data/at/s23/4.pgm;22 -/home/philipp/facerec/data/at/s23/10.pgm;22 -/home/philipp/facerec/data/at/s23/8.pgm;22 -/home/philipp/facerec/data/at/s23/1.pgm;22 -/home/philipp/facerec/data/at/s4/2.pgm;3 -/home/philipp/facerec/data/at/s4/7.pgm;3 -/home/philipp/facerec/data/at/s4/6.pgm;3 -/home/philipp/facerec/data/at/s4/9.pgm;3 -/home/philipp/facerec/data/at/s4/5.pgm;3 -/home/philipp/facerec/data/at/s4/3.pgm;3 -/home/philipp/facerec/data/at/s4/4.pgm;3 -/home/philipp/facerec/data/at/s4/10.pgm;3 -/home/philipp/facerec/data/at/s4/8.pgm;3 -/home/philipp/facerec/data/at/s4/1.pgm;3 -/home/philipp/facerec/data/at/s9/2.pgm;8 -/home/philipp/facerec/data/at/s9/7.pgm;8 -/home/philipp/facerec/data/at/s9/6.pgm;8 -/home/philipp/facerec/data/at/s9/9.pgm;8 -/home/philipp/facerec/data/at/s9/5.pgm;8 -/home/philipp/facerec/data/at/s9/3.pgm;8 -/home/philipp/facerec/data/at/s9/4.pgm;8 -/home/philipp/facerec/data/at/s9/10.pgm;8 -/home/philipp/facerec/data/at/s9/8.pgm;8 -/home/philipp/facerec/data/at/s9/1.pgm;8 -/home/philipp/facerec/data/at/s37/2.pgm;36 -/home/philipp/facerec/data/at/s37/7.pgm;36 -/home/philipp/facerec/data/at/s37/6.pgm;36 -/home/philipp/facerec/data/at/s37/9.pgm;36 -/home/philipp/facerec/data/at/s37/5.pgm;36 -/home/philipp/facerec/data/at/s37/3.pgm;36 -/home/philipp/facerec/data/at/s37/4.pgm;36 -/home/philipp/facerec/data/at/s37/10.pgm;36 -/home/philipp/facerec/data/at/s37/8.pgm;36 -/home/philipp/facerec/data/at/s37/1.pgm;36 -/home/philipp/facerec/data/at/s24/2.pgm;23 -/home/philipp/facerec/data/at/s24/7.pgm;23 -/home/philipp/facerec/data/at/s24/6.pgm;23 -/home/philipp/facerec/data/at/s24/9.pgm;23 -/home/philipp/facerec/data/at/s24/5.pgm;23 -/home/philipp/facerec/data/at/s24/3.pgm;23 -/home/philipp/facerec/data/at/s24/4.pgm;23 -/home/philipp/facerec/data/at/s24/10.pgm;23 -/home/philipp/facerec/data/at/s24/8.pgm;23 -/home/philipp/facerec/data/at/s24/1.pgm;23 -/home/philipp/facerec/data/at/s19/2.pgm;18 -/home/philipp/facerec/data/at/s19/7.pgm;18 -/home/philipp/facerec/data/at/s19/6.pgm;18 -/home/philipp/facerec/data/at/s19/9.pgm;18 -/home/philipp/facerec/data/at/s19/5.pgm;18 -/home/philipp/facerec/data/at/s19/3.pgm;18 -/home/philipp/facerec/data/at/s19/4.pgm;18 -/home/philipp/facerec/data/at/s19/10.pgm;18 -/home/philipp/facerec/data/at/s19/8.pgm;18 -/home/philipp/facerec/data/at/s19/1.pgm;18 -/home/philipp/facerec/data/at/s8/2.pgm;7 -/home/philipp/facerec/data/at/s8/7.pgm;7 -/home/philipp/facerec/data/at/s8/6.pgm;7 -/home/philipp/facerec/data/at/s8/9.pgm;7 -/home/philipp/facerec/data/at/s8/5.pgm;7 -/home/philipp/facerec/data/at/s8/3.pgm;7 -/home/philipp/facerec/data/at/s8/4.pgm;7 -/home/philipp/facerec/data/at/s8/10.pgm;7 -/home/philipp/facerec/data/at/s8/8.pgm;7 -/home/philipp/facerec/data/at/s8/1.pgm;7 -/home/philipp/facerec/data/at/s21/2.pgm;20 -/home/philipp/facerec/data/at/s21/7.pgm;20 -/home/philipp/facerec/data/at/s21/6.pgm;20 -/home/philipp/facerec/data/at/s21/9.pgm;20 -/home/philipp/facerec/data/at/s21/5.pgm;20 -/home/philipp/facerec/data/at/s21/3.pgm;20 -/home/philipp/facerec/data/at/s21/4.pgm;20 -/home/philipp/facerec/data/at/s21/10.pgm;20 -/home/philipp/facerec/data/at/s21/8.pgm;20 -/home/philipp/facerec/data/at/s21/1.pgm;20 -/home/philipp/facerec/data/at/s1/2.pgm;0 -/home/philipp/facerec/data/at/s1/7.pgm;0 -/home/philipp/facerec/data/at/s1/6.pgm;0 -/home/philipp/facerec/data/at/s1/9.pgm;0 -/home/philipp/facerec/data/at/s1/5.pgm;0 -/home/philipp/facerec/data/at/s1/3.pgm;0 -/home/philipp/facerec/data/at/s1/4.pgm;0 -/home/philipp/facerec/data/at/s1/10.pgm;0 -/home/philipp/facerec/data/at/s1/8.pgm;0 -/home/philipp/facerec/data/at/s1/1.pgm;0 -/home/philipp/facerec/data/at/s7/2.pgm;6 -/home/philipp/facerec/data/at/s7/7.pgm;6 -/home/philipp/facerec/data/at/s7/6.pgm;6 -/home/philipp/facerec/data/at/s7/9.pgm;6 -/home/philipp/facerec/data/at/s7/5.pgm;6 -/home/philipp/facerec/data/at/s7/3.pgm;6 -/home/philipp/facerec/data/at/s7/4.pgm;6 -/home/philipp/facerec/data/at/s7/10.pgm;6 -/home/philipp/facerec/data/at/s7/8.pgm;6 -/home/philipp/facerec/data/at/s7/1.pgm;6 -/home/philipp/facerec/data/at/s16/2.pgm;15 -/home/philipp/facerec/data/at/s16/7.pgm;15 -/home/philipp/facerec/data/at/s16/6.pgm;15 -/home/philipp/facerec/data/at/s16/9.pgm;15 -/home/philipp/facerec/data/at/s16/5.pgm;15 -/home/philipp/facerec/data/at/s16/3.pgm;15 -/home/philipp/facerec/data/at/s16/4.pgm;15 -/home/philipp/facerec/data/at/s16/10.pgm;15 -/home/philipp/facerec/data/at/s16/8.pgm;15 -/home/philipp/facerec/data/at/s16/1.pgm;15 -/home/philipp/facerec/data/at/s36/2.pgm;35 -/home/philipp/facerec/data/at/s36/7.pgm;35 -/home/philipp/facerec/data/at/s36/6.pgm;35 -/home/philipp/facerec/data/at/s36/9.pgm;35 -/home/philipp/facerec/data/at/s36/5.pgm;35 -/home/philipp/facerec/data/at/s36/3.pgm;35 -/home/philipp/facerec/data/at/s36/4.pgm;35 -/home/philipp/facerec/data/at/s36/10.pgm;35 -/home/philipp/facerec/data/at/s36/8.pgm;35 -/home/philipp/facerec/data/at/s36/1.pgm;35 -/home/philipp/facerec/data/at/s25/2.pgm;24 -/home/philipp/facerec/data/at/s25/7.pgm;24 -/home/philipp/facerec/data/at/s25/6.pgm;24 -/home/philipp/facerec/data/at/s25/9.pgm;24 -/home/philipp/facerec/data/at/s25/5.pgm;24 -/home/philipp/facerec/data/at/s25/3.pgm;24 -/home/philipp/facerec/data/at/s25/4.pgm;24 -/home/philipp/facerec/data/at/s25/10.pgm;24 -/home/philipp/facerec/data/at/s25/8.pgm;24 -/home/philipp/facerec/data/at/s25/1.pgm;24 -/home/philipp/facerec/data/at/s14/2.pgm;13 -/home/philipp/facerec/data/at/s14/7.pgm;13 -/home/philipp/facerec/data/at/s14/6.pgm;13 -/home/philipp/facerec/data/at/s14/9.pgm;13 -/home/philipp/facerec/data/at/s14/5.pgm;13 -/home/philipp/facerec/data/at/s14/3.pgm;13 -/home/philipp/facerec/data/at/s14/4.pgm;13 -/home/philipp/facerec/data/at/s14/10.pgm;13 -/home/philipp/facerec/data/at/s14/8.pgm;13 -/home/philipp/facerec/data/at/s14/1.pgm;13 -/home/philipp/facerec/data/at/s34/2.pgm;33 -/home/philipp/facerec/data/at/s34/7.pgm;33 -/home/philipp/facerec/data/at/s34/6.pgm;33 -/home/philipp/facerec/data/at/s34/9.pgm;33 -/home/philipp/facerec/data/at/s34/5.pgm;33 -/home/philipp/facerec/data/at/s34/3.pgm;33 -/home/philipp/facerec/data/at/s34/4.pgm;33 -/home/philipp/facerec/data/at/s34/10.pgm;33 -/home/philipp/facerec/data/at/s34/8.pgm;33 -/home/philipp/facerec/data/at/s34/1.pgm;33 -/home/philipp/facerec/data/at/s11/2.pgm;10 -/home/philipp/facerec/data/at/s11/7.pgm;10 -/home/philipp/facerec/data/at/s11/6.pgm;10 -/home/philipp/facerec/data/at/s11/9.pgm;10 -/home/philipp/facerec/data/at/s11/5.pgm;10 -/home/philipp/facerec/data/at/s11/3.pgm;10 -/home/philipp/facerec/data/at/s11/4.pgm;10 -/home/philipp/facerec/data/at/s11/10.pgm;10 -/home/philipp/facerec/data/at/s11/8.pgm;10 -/home/philipp/facerec/data/at/s11/1.pgm;10 -/home/philipp/facerec/data/at/s26/2.pgm;25 -/home/philipp/facerec/data/at/s26/7.pgm;25 -/home/philipp/facerec/data/at/s26/6.pgm;25 -/home/philipp/facerec/data/at/s26/9.pgm;25 -/home/philipp/facerec/data/at/s26/5.pgm;25 -/home/philipp/facerec/data/at/s26/3.pgm;25 -/home/philipp/facerec/data/at/s26/4.pgm;25 -/home/philipp/facerec/data/at/s26/10.pgm;25 -/home/philipp/facerec/data/at/s26/8.pgm;25 -/home/philipp/facerec/data/at/s26/1.pgm;25 -/home/philipp/facerec/data/at/s18/2.pgm;17 -/home/philipp/facerec/data/at/s18/7.pgm;17 -/home/philipp/facerec/data/at/s18/6.pgm;17 -/home/philipp/facerec/data/at/s18/9.pgm;17 -/home/philipp/facerec/data/at/s18/5.pgm;17 -/home/philipp/facerec/data/at/s18/3.pgm;17 -/home/philipp/facerec/data/at/s18/4.pgm;17 -/home/philipp/facerec/data/at/s18/10.pgm;17 -/home/philipp/facerec/data/at/s18/8.pgm;17 -/home/philipp/facerec/data/at/s18/1.pgm;17 -/home/philipp/facerec/data/at/s29/2.pgm;28 -/home/philipp/facerec/data/at/s29/7.pgm;28 -/home/philipp/facerec/data/at/s29/6.pgm;28 -/home/philipp/facerec/data/at/s29/9.pgm;28 -/home/philipp/facerec/data/at/s29/5.pgm;28 -/home/philipp/facerec/data/at/s29/3.pgm;28 -/home/philipp/facerec/data/at/s29/4.pgm;28 -/home/philipp/facerec/data/at/s29/10.pgm;28 -/home/philipp/facerec/data/at/s29/8.pgm;28 -/home/philipp/facerec/data/at/s29/1.pgm;28 -/home/philipp/facerec/data/at/s33/2.pgm;32 -/home/philipp/facerec/data/at/s33/7.pgm;32 -/home/philipp/facerec/data/at/s33/6.pgm;32 -/home/philipp/facerec/data/at/s33/9.pgm;32 -/home/philipp/facerec/data/at/s33/5.pgm;32 -/home/philipp/facerec/data/at/s33/3.pgm;32 -/home/philipp/facerec/data/at/s33/4.pgm;32 -/home/philipp/facerec/data/at/s33/10.pgm;32 -/home/philipp/facerec/data/at/s33/8.pgm;32 -/home/philipp/facerec/data/at/s33/1.pgm;32 -/home/philipp/facerec/data/at/s12/2.pgm;11 -/home/philipp/facerec/data/at/s12/7.pgm;11 -/home/philipp/facerec/data/at/s12/6.pgm;11 -/home/philipp/facerec/data/at/s12/9.pgm;11 -/home/philipp/facerec/data/at/s12/5.pgm;11 -/home/philipp/facerec/data/at/s12/3.pgm;11 -/home/philipp/facerec/data/at/s12/4.pgm;11 -/home/philipp/facerec/data/at/s12/10.pgm;11 -/home/philipp/facerec/data/at/s12/8.pgm;11 -/home/philipp/facerec/data/at/s12/1.pgm;11 -/home/philipp/facerec/data/at/s6/2.pgm;5 -/home/philipp/facerec/data/at/s6/7.pgm;5 -/home/philipp/facerec/data/at/s6/6.pgm;5 -/home/philipp/facerec/data/at/s6/9.pgm;5 -/home/philipp/facerec/data/at/s6/5.pgm;5 -/home/philipp/facerec/data/at/s6/3.pgm;5 -/home/philipp/facerec/data/at/s6/4.pgm;5 -/home/philipp/facerec/data/at/s6/10.pgm;5 -/home/philipp/facerec/data/at/s6/8.pgm;5 -/home/philipp/facerec/data/at/s6/1.pgm;5 -/home/philipp/facerec/data/at/s22/2.pgm;21 -/home/philipp/facerec/data/at/s22/7.pgm;21 -/home/philipp/facerec/data/at/s22/6.pgm;21 -/home/philipp/facerec/data/at/s22/9.pgm;21 -/home/philipp/facerec/data/at/s22/5.pgm;21 -/home/philipp/facerec/data/at/s22/3.pgm;21 -/home/philipp/facerec/data/at/s22/4.pgm;21 -/home/philipp/facerec/data/at/s22/10.pgm;21 -/home/philipp/facerec/data/at/s22/8.pgm;21 -/home/philipp/facerec/data/at/s22/1.pgm;21 -/home/philipp/facerec/data/at/s15/2.pgm;14 -/home/philipp/facerec/data/at/s15/7.pgm;14 -/home/philipp/facerec/data/at/s15/6.pgm;14 -/home/philipp/facerec/data/at/s15/9.pgm;14 -/home/philipp/facerec/data/at/s15/5.pgm;14 -/home/philipp/facerec/data/at/s15/3.pgm;14 -/home/philipp/facerec/data/at/s15/4.pgm;14 -/home/philipp/facerec/data/at/s15/10.pgm;14 -/home/philipp/facerec/data/at/s15/8.pgm;14 -/home/philipp/facerec/data/at/s15/1.pgm;14 -/home/philipp/facerec/data/at/s2/2.pgm;1 -/home/philipp/facerec/data/at/s2/7.pgm;1 -/home/philipp/facerec/data/at/s2/6.pgm;1 -/home/philipp/facerec/data/at/s2/9.pgm;1 -/home/philipp/facerec/data/at/s2/5.pgm;1 -/home/philipp/facerec/data/at/s2/3.pgm;1 -/home/philipp/facerec/data/at/s2/4.pgm;1 -/home/philipp/facerec/data/at/s2/10.pgm;1 -/home/philipp/facerec/data/at/s2/8.pgm;1 -/home/philipp/facerec/data/at/s2/1.pgm;1 -/home/philipp/facerec/data/at/s31/2.pgm;30 -/home/philipp/facerec/data/at/s31/7.pgm;30 -/home/philipp/facerec/data/at/s31/6.pgm;30 -/home/philipp/facerec/data/at/s31/9.pgm;30 -/home/philipp/facerec/data/at/s31/5.pgm;30 -/home/philipp/facerec/data/at/s31/3.pgm;30 -/home/philipp/facerec/data/at/s31/4.pgm;30 -/home/philipp/facerec/data/at/s31/10.pgm;30 -/home/philipp/facerec/data/at/s31/8.pgm;30 -/home/philipp/facerec/data/at/s31/1.pgm;30 -/home/philipp/facerec/data/at/s28/2.pgm;27 -/home/philipp/facerec/data/at/s28/7.pgm;27 -/home/philipp/facerec/data/at/s28/6.pgm;27 -/home/philipp/facerec/data/at/s28/9.pgm;27 -/home/philipp/facerec/data/at/s28/5.pgm;27 -/home/philipp/facerec/data/at/s28/3.pgm;27 -/home/philipp/facerec/data/at/s28/4.pgm;27 -/home/philipp/facerec/data/at/s28/10.pgm;27 -/home/philipp/facerec/data/at/s28/8.pgm;27 -/home/philipp/facerec/data/at/s28/1.pgm;27 -/home/philipp/facerec/data/at/s40/2.pgm;39 -/home/philipp/facerec/data/at/s40/7.pgm;39 -/home/philipp/facerec/data/at/s40/6.pgm;39 -/home/philipp/facerec/data/at/s40/9.pgm;39 -/home/philipp/facerec/data/at/s40/5.pgm;39 -/home/philipp/facerec/data/at/s40/3.pgm;39 -/home/philipp/facerec/data/at/s40/4.pgm;39 -/home/philipp/facerec/data/at/s40/10.pgm;39 -/home/philipp/facerec/data/at/s40/8.pgm;39 -/home/philipp/facerec/data/at/s40/1.pgm;39 -/home/philipp/facerec/data/at/s3/2.pgm;2 -/home/philipp/facerec/data/at/s3/7.pgm;2 -/home/philipp/facerec/data/at/s3/6.pgm;2 -/home/philipp/facerec/data/at/s3/9.pgm;2 -/home/philipp/facerec/data/at/s3/5.pgm;2 -/home/philipp/facerec/data/at/s3/3.pgm;2 -/home/philipp/facerec/data/at/s3/4.pgm;2 -/home/philipp/facerec/data/at/s3/10.pgm;2 -/home/philipp/facerec/data/at/s3/8.pgm;2 -/home/philipp/facerec/data/at/s3/1.pgm;2 -/home/philipp/facerec/data/at/s38/2.pgm;37 -/home/philipp/facerec/data/at/s38/7.pgm;37 -/home/philipp/facerec/data/at/s38/6.pgm;37 -/home/philipp/facerec/data/at/s38/9.pgm;37 -/home/philipp/facerec/data/at/s38/5.pgm;37 -/home/philipp/facerec/data/at/s38/3.pgm;37 -/home/philipp/facerec/data/at/s38/4.pgm;37 -/home/philipp/facerec/data/at/s38/10.pgm;37 -/home/philipp/facerec/data/at/s38/8.pgm;37 -/home/philipp/facerec/data/at/s38/1.pgm;37 diff --git a/modules/contrib/doc/facerec/facerec_api.rst b/modules/contrib/doc/facerec/facerec_api.rst deleted file mode 100644 index d8fdde63e..000000000 --- a/modules/contrib/doc/facerec/facerec_api.rst +++ /dev/null @@ -1,377 +0,0 @@ -FaceRecognizer -============== - -.. highlight:: cpp - -.. Sample code:: - - * An example using the FaceRecognizer class can be found at opencv_source_code/samples/cpp/facerec_demo.cpp - - * (Python) An example using the FaceRecognizer class can be found at opencv_source_code/samples/python2/facerec_demo.py - -FaceRecognizer --------------- - -.. ocv:class:: FaceRecognizer : public Algorithm - -All face recognition models in OpenCV are derived from the abstract base class :ocv:class:`FaceRecognizer`, which provides -a unified access to all face recongition algorithms in OpenCV. :: - - class FaceRecognizer : public Algorithm - { - public: - //! virtual destructor - virtual ~FaceRecognizer() {} - - // Trains a FaceRecognizer. - virtual void train(InputArray src, InputArray labels) = 0; - - // Updates a FaceRecognizer. - virtual void update(InputArrayOfArrays src, InputArray labels); - - // Gets a prediction from a FaceRecognizer. - virtual int predict(InputArray src) const = 0; - - // Predicts the label and confidence for a given sample. - virtual void predict(InputArray src, int &label, double &confidence) const = 0; - - // Serializes this object to a given filename. - virtual void save(const String& filename) const; - - // Deserializes this object from a given filename. - virtual void load(const String& filename); - - // Serializes this object to a given cv::FileStorage. - virtual void save(FileStorage& fs) const = 0; - - // Deserializes this object from a given cv::FileStorage. - virtual void load(const FileStorage& fs) = 0; - }; - - -Description -+++++++++++ - -I'll go a bit more into detail explaining :ocv:class:`FaceRecognizer`, because it doesn't look like a powerful interface at first sight. But: Every :ocv:class:`FaceRecognizer` is an :ocv:class:`Algorithm`, so you can easily get/set all model internals (if allowed by the implementation). :ocv:class:`Algorithm` is a relatively new OpenCV concept, which is available since the 2.4 release. I suggest you take a look at its description. - -:ocv:class:`Algorithm` provides the following features for all derived classes: - -* So called “virtual constructorâ€. That is, each Algorithm derivative is registered at program start and you can get the list of registered algorithms and create instance of a particular algorithm by its name (see :ocv:func:`Algorithm::create`). If you plan to add your own algorithms, it is good practice to add a unique prefix to your algorithms to distinguish them from other algorithms. - -* Setting/Retrieving algorithm parameters by name. If you used video capturing functionality from OpenCV highgui module, you are probably familar with :ocv:cfunc:`cvSetCaptureProperty`, :ocv:cfunc:`cvGetCaptureProperty`, :ocv:func:`VideoCapture::set` and :ocv:func:`VideoCapture::get`. :ocv:class:`Algorithm` provides similar method where instead of integer id's you specify the parameter names as text Strings. See :ocv:func:`Algorithm::set` and :ocv:func:`Algorithm::get` for details. - -* Reading and writing parameters from/to XML or YAML files. Every Algorithm derivative can store all its parameters and then read them back. There is no need to re-implement it each time. - -Moreover every :ocv:class:`FaceRecognizer` supports the: - -* **Training** of a :ocv:class:`FaceRecognizer` with :ocv:func:`FaceRecognizer::train` on a given set of images (your face database!). - -* **Prediction** of a given sample image, that means a face. The image is given as a :ocv:class:`Mat`. - -* **Loading/Saving** the model state from/to a given XML or YAML. - -.. note:: When using the FaceRecognizer interface in combination with Python, please stick to Python 2. Some underlying scripts like create_csv will not work in other versions, like Python 3. - -Setting the Thresholds -+++++++++++++++++++++++ - -Sometimes you run into the situation, when you want to apply a threshold on the prediction. A common scenario in face recognition is to tell, whether a face belongs to the training dataset or if it is unknown. You might wonder, why there's no public API in :ocv:class:`FaceRecognizer` to set the threshold for the prediction, but rest assured: It's supported. It just means there's no generic way in an abstract class to provide an interface for setting/getting the thresholds of *every possible* :ocv:class:`FaceRecognizer` algorithm. The appropriate place to set the thresholds is in the constructor of the specific :ocv:class:`FaceRecognizer` and since every :ocv:class:`FaceRecognizer` is a :ocv:class:`Algorithm` (see above), you can get/set the thresholds at runtime! - -Here is an example of setting a threshold for the Eigenfaces method, when creating the model: - -.. code-block:: cpp - - // Let's say we want to keep 10 Eigenfaces and have a threshold value of 10.0 - int num_components = 10; - double threshold = 10.0; - // Then if you want to have a cv::FaceRecognizer with a confidence threshold, - // create the concrete implementation with the appropiate parameters: - Ptr model = createEigenFaceRecognizer(num_components, threshold); - -Sometimes it's impossible to train the model, just to experiment with threshold values. Thanks to :ocv:class:`Algorithm` it's possible to set internal model thresholds during runtime. Let's see how we would set/get the prediction for the Eigenface model, we've created above: - -.. code-block:: cpp - - // The following line reads the threshold from the Eigenfaces model: - double current_threshold = model->getDouble("threshold"); - // And this line sets the threshold to 0.0: - model->set("threshold", 0.0); - -If you've set the threshold to ``0.0`` as we did above, then: - -.. code-block:: cpp - - // - Mat img = imread("person1/3.jpg", CV_LOAD_IMAGE_GRAYSCALE); - // Get a prediction from the model. Note: We've set a threshold of 0.0 above, - // since the distance is almost always larger than 0.0, you'll get -1 as - // label, which indicates, this face is unknown - int predicted_label = model->predict(img); - // ... - -is going to yield ``-1`` as predicted label, which states this face is unknown. - -Getting the name of a FaceRecognizer -+++++++++++++++++++++++++++++++++++++ - -Since every :ocv:class:`FaceRecognizer` is a :ocv:class:`Algorithm`, you can use :ocv:func:`Algorithm::name` to get the name of a :ocv:class:`FaceRecognizer`: - -.. code-block:: cpp - - // Create a FaceRecognizer: - Ptr model = createEigenFaceRecognizer(); - // And here's how to get its name: - String name = model->name(); - - -FaceRecognizer::train ---------------------- - -Trains a FaceRecognizer with given data and associated labels. - -.. ocv:function:: void FaceRecognizer::train( InputArrayOfArrays src, InputArray labels ) = 0 - - :param src: The training images, that means the faces you want to learn. The data has to be given as a ``vector``. - - :param labels: The labels corresponding to the images have to be given either as a ``vector`` or a - -The following source code snippet shows you how to learn a Fisherfaces model on a given set of images. The images are read with :ocv:func:`imread` and pushed into a ``std::vector``. The labels of each image are stored within a ``std::vector`` (you could also use a :ocv:class:`Mat` of type `CV_32SC1`). Think of the label as the subject (the person) this image belongs to, so same subjects (persons) should have the same label. For the available :ocv:class:`FaceRecognizer` you don't have to pay any attention to the order of the labels, just make sure same persons have the same label: - -.. code-block:: cpp - - // holds images and labels - vector images; - vector labels; - // images for first person - images.push_back(imread("person0/0.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(0); - images.push_back(imread("person0/1.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(0); - images.push_back(imread("person0/2.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(0); - // images for second person - images.push_back(imread("person1/0.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(1); - images.push_back(imread("person1/1.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(1); - images.push_back(imread("person1/2.jpg", CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(1); - -Now that you have read some images, we can create a new :ocv:class:`FaceRecognizer`. In this example I'll create a Fisherfaces model and decide to keep all of the possible Fisherfaces: - -.. code-block:: cpp - - // Create a new Fisherfaces model and retain all available Fisherfaces, - // this is the most common usage of this specific FaceRecognizer: - // - Ptr model = createFisherFaceRecognizer(); - -And finally train it on the given dataset (the face images and labels): - -.. code-block:: cpp - - // This is the common interface to train all of the available cv::FaceRecognizer - // implementations: - // - model->train(images, labels); - -FaceRecognizer::update ----------------------- - -Updates a FaceRecognizer with given data and associated labels. - -.. ocv:function:: void FaceRecognizer::update( InputArrayOfArrays src, InputArray labels ) - - :param src: The training images, that means the faces you want to learn. The data has to be given as a ``vector``. - - :param labels: The labels corresponding to the images have to be given either as a ``vector`` or a - -This method updates a (probably trained) :ocv:class:`FaceRecognizer`, but only if the algorithm supports it. The Local Binary Patterns Histograms (LBPH) recognizer (see :ocv:func:`createLBPHFaceRecognizer`) can be updated. For the Eigenfaces and Fisherfaces method, this is algorithmically not possible and you have to re-estimate the model with :ocv:func:`FaceRecognizer::train`. In any case, a call to train empties the existing model and learns a new model, while update does not delete any model data. - -.. code-block:: cpp - - // Create a new LBPH model (it can be updated) and use the default parameters, - // this is the most common usage of this specific FaceRecognizer: - // - Ptr model = createLBPHFaceRecognizer(); - // This is the common interface to train all of the available cv::FaceRecognizer - // implementations: - // - model->train(images, labels); - // Some containers to hold new image: - vector newImages; - vector newLabels; - // You should add some images to the containers: - // - // ... - // - // Now updating the model is as easy as calling: - model->update(newImages,newLabels); - // This will preserve the old model data and extend the existing model - // with the new features extracted from newImages! - -Calling update on an Eigenfaces model (see :ocv:func:`createEigenFaceRecognizer`), which doesn't support updating, will throw an error similar to: - -.. code-block:: none - - OpenCV Error: The function/feature is not implemented (This FaceRecognizer (FaceRecognizer.Eigenfaces) does not support updating, you have to use FaceRecognizer::train to update it.) in update, file /home/philipp/git/opencv/modules/contrib/src/facerec.cpp, line 305 - terminate called after throwing an instance of 'cv::Exception' - -Please note: The :ocv:class:`FaceRecognizer` does not store your training images, because this would be very memory intense and it's not the responsibility of te :ocv:class:`FaceRecognizer` to do so. The caller is responsible for maintaining the dataset, he want to work with. - -FaceRecognizer::predict ------------------------ - -.. ocv:function:: int FaceRecognizer::predict( InputArray src ) const = 0 -.. ocv:function:: void FaceRecognizer::predict( InputArray src, int & label, double & confidence ) const = 0 - - Predicts a label and associated confidence (e.g. distance) for a given input image. - - :param src: Sample image to get a prediction from. - :param label: The predicted label for the given image. - :param confidence: Associated confidence (e.g. distance) for the predicted label. - -The suffix ``const`` means that prediction does not affect the internal model -state, so the method can be safely called from within different threads. - -The following example shows how to get a prediction from a trained model: - -.. code-block:: cpp - - using namespace cv; - // Do your initialization here (create the cv::FaceRecognizer model) ... - // ... - // Read in a sample image: - Mat img = imread("person1/3.jpg", CV_LOAD_IMAGE_GRAYSCALE); - // And get a prediction from the cv::FaceRecognizer: - int predicted = model->predict(img); - -Or to get a prediction and the associated confidence (e.g. distance): - -.. code-block:: cpp - - using namespace cv; - // Do your initialization here (create the cv::FaceRecognizer model) ... - // ... - Mat img = imread("person1/3.jpg", CV_LOAD_IMAGE_GRAYSCALE); - // Some variables for the predicted label and associated confidence (e.g. distance): - int predicted_label = -1; - double predicted_confidence = 0.0; - // Get the prediction and associated confidence from the model - model->predict(img, predicted_label, predicted_confidence); - -FaceRecognizer::save --------------------- - -Saves a :ocv:class:`FaceRecognizer` and its model state. - -.. ocv:function:: void FaceRecognizer::save(const String& filename) const - - Saves this model to a given filename, either as XML or YAML. - - :param filename: The filename to store this :ocv:class:`FaceRecognizer` to (either XML/YAML). - -.. ocv:function:: void FaceRecognizer::save(FileStorage& fs) const - - Saves this model to a given :ocv:class:`FileStorage`. - - :param fs: The :ocv:class:`FileStorage` to store this :ocv:class:`FaceRecognizer` to. - - -Every :ocv:class:`FaceRecognizer` overwrites ``FaceRecognizer::save(FileStorage& fs)`` -to save the internal model state. ``FaceRecognizer::save(const String& filename)`` saves -the state of a model to the given filename. - -The suffix ``const`` means that prediction does not affect the internal model -state, so the method can be safely called from within different threads. - -FaceRecognizer::load --------------------- - -Loads a :ocv:class:`FaceRecognizer` and its model state. - -.. ocv:function:: void FaceRecognizer::load( const String& filename ) -.. ocv:function:: void FaceRecognizer::load( const FileStorage& fs ) = 0 - -Loads a persisted model and state from a given XML or YAML file . Every -:ocv:class:`FaceRecognizer` has to overwrite ``FaceRecognizer::load(FileStorage& fs)`` -to enable loading the model state. ``FaceRecognizer::load(FileStorage& fs)`` in -turn gets called by ``FaceRecognizer::load(const String& filename)``, to ease -saving a model. - -createEigenFaceRecognizer -------------------------- - -.. ocv:function:: Ptr createEigenFaceRecognizer(int num_components = 0, double threshold = DBL_MAX) - - :param num_components: The number of components (read: Eigenfaces) kept for this Prinicpal Component Analysis. As a hint: There's no rule how many components (read: Eigenfaces) should be kept for good reconstruction capabilities. It is based on your input data, so experiment with the number. Keeping 80 components should almost always be sufficient. - - :param threshold: The threshold applied in the prediciton. - -Notes: -++++++ - -* Training and prediction must be done on grayscale images, use :ocv:func:`cvtColor` to convert between the color spaces. -* **THE EIGENFACES METHOD MAKES THE ASSUMPTION, THAT THE TRAINING AND TEST IMAGES ARE OF EQUAL SIZE.** (caps-lock, because I got so many mails asking for this). You have to make sure your input data has the correct shape, else a meaningful exception is thrown. Use :ocv:func:`resize` to resize the images. -* This model does not support updating. - -Model internal data: -++++++++++++++++++++ - -* ``num_components`` see :ocv:func:`createEigenFaceRecognizer`. -* ``threshold`` see :ocv:func:`createEigenFaceRecognizer`. -* ``eigenvalues`` The eigenvalues for this Principal Component Analysis (ordered descending). -* ``eigenvectors`` The eigenvectors for this Principal Component Analysis (ordered by their eigenvalue). -* ``mean`` The sample mean calculated from the training data. -* ``projections`` The projections of the training data. -* ``labels`` The threshold applied in the prediction. If the distance to the nearest neighbor is larger than the threshold, this method returns -1. - -createFisherFaceRecognizer --------------------------- - -.. ocv:function:: Ptr createFisherFaceRecognizer(int num_components = 0, double threshold = DBL_MAX) - - :param num_components: The number of components (read: Fisherfaces) kept for this Linear Discriminant Analysis with the Fisherfaces criterion. It's useful to keep all components, that means the number of your classes ``c`` (read: subjects, persons you want to recognize). If you leave this at the default (``0``) or set it to a value less-equal ``0`` or greater ``(c-1)``, it will be set to the correct number ``(c-1)`` automatically. - - :param threshold: The threshold applied in the prediction. If the distance to the nearest neighbor is larger than the threshold, this method returns -1. - -Notes: -++++++ - -* Training and prediction must be done on grayscale images, use :ocv:func:`cvtColor` to convert between the color spaces. -* **THE FISHERFACES METHOD MAKES THE ASSUMPTION, THAT THE TRAINING AND TEST IMAGES ARE OF EQUAL SIZE.** (caps-lock, because I got so many mails asking for this). You have to make sure your input data has the correct shape, else a meaningful exception is thrown. Use :ocv:func:`resize` to resize the images. -* This model does not support updating. - -Model internal data: -++++++++++++++++++++ - -* ``num_components`` see :ocv:func:`createFisherFaceRecognizer`. -* ``threshold`` see :ocv:func:`createFisherFaceRecognizer`. -* ``eigenvalues`` The eigenvalues for this Linear Discriminant Analysis (ordered descending). -* ``eigenvectors`` The eigenvectors for this Linear Discriminant Analysis (ordered by their eigenvalue). -* ``mean`` The sample mean calculated from the training data. -* ``projections`` The projections of the training data. -* ``labels`` The labels corresponding to the projections. - - -createLBPHFaceRecognizer -------------------------- - -.. ocv:function:: Ptr createLBPHFaceRecognizer(int radius=1, int neighbors=8, int grid_x=8, int grid_y=8, double threshold = DBL_MAX) - - :param radius: The radius used for building the Circular Local Binary Pattern. The greater the radius, the - :param neighbors: The number of sample points to build a Circular Local Binary Pattern from. An appropriate value is to use `` 8`` sample points. Keep in mind: the more sample points you include, the higher the computational cost. - :param grid_x: The number of cells in the horizontal direction, ``8`` is a common value used in publications. The more cells, the finer the grid, the higher the dimensionality of the resulting feature vector. - :param grid_y: The number of cells in the vertical direction, ``8`` is a common value used in publications. The more cells, the finer the grid, the higher the dimensionality of the resulting feature vector. - :param threshold: The threshold applied in the prediction. If the distance to the nearest neighbor is larger than the threshold, this method returns -1. - -Notes: -++++++ - -* The Circular Local Binary Patterns (used in training and prediction) expect the data given as grayscale images, use :ocv:func:`cvtColor` to convert between the color spaces. -* This model supports updating. - -Model internal data: -++++++++++++++++++++ - -* ``radius`` see :ocv:func:`createLBPHFaceRecognizer`. -* ``neighbors`` see :ocv:func:`createLBPHFaceRecognizer`. -* ``grid_x`` see :ocv:func:`createLBPHFaceRecognizer`. -* ``grid_y`` see :ocv:func:`createLBPHFaceRecognizer`. -* ``threshold`` see :ocv:func:`createLBPHFaceRecognizer`. -* ``histograms`` Local Binary Patterns Histograms calculated from the given training data (empty if none was given). -* ``labels`` Labels corresponding to the calculated Local Binary Patterns Histograms. diff --git a/modules/contrib/doc/facerec/facerec_changelog.rst b/modules/contrib/doc/facerec/facerec_changelog.rst deleted file mode 100644 index 107135818..000000000 --- a/modules/contrib/doc/facerec/facerec_changelog.rst +++ /dev/null @@ -1,86 +0,0 @@ -Changelog -========= - -Release 0.05 ------------- - -This library is now included in the official OpenCV distribution (from 2.4 on). -The :ocv:class`FaceRecognizer` is now an :ocv:class:`Algorithm`, which better fits into the overall -OpenCV API. - -To reduce the confusion on user side and minimize my work, libfacerec and OpenCV -have been synchronized and are now based on the same interfaces and implementation. - -The library now has an extensive documentation: - -* The API is explained in detail and with a lot of code examples. -* The face recognition guide I had written for Python and GNU Octave/MATLAB has been adapted to the new OpenCV C++ ``cv::FaceRecognizer``. -* A tutorial for gender classification with Fisherfaces. -* A tutorial for face recognition in videos (e.g. webcam). - - -Release highlights -++++++++++++++++++ - -* There are no single highlights to pick from, this release is a highlight itself. - -Release 0.04 ------------- - -This version is fully Windows-compatible and works with OpenCV 2.3.1. Several -bugfixes, but none influenced the recognition rate. - -Release highlights -++++++++++++++++++ - -* A whole lot of exceptions with meaningful error messages. -* A tutorial for Windows users: `http://bytefish.de/blog/opencv_visual_studio_and_libfacerec `_ - - -Release 0.03 ------------- - -Reworked the library to provide separate implementations in cpp files, because -it's the preferred way of contributing OpenCV libraries. This means the library -is not header-only anymore. Slight API changes were done, please see the -documentation for details. - -Release highlights -++++++++++++++++++ - -* New Unit Tests (for LBP Histograms) make the library more robust. -* Added more documentation. - - -Release 0.02 ------------- - -Reworked the library to provide separate implementations in cpp files, because -it's the preferred way of contributing OpenCV libraries. This means the library -is not header-only anymore. Slight API changes were done, please see the -documentation for details. - -Release highlights -++++++++++++++++++ - -* New Unit Tests (for LBP Histograms) make the library more robust. -* Added a documentation and changelog in reStructuredText. - -Release 0.01 ------------- - -Initial release as header-only library. - -Release highlights -++++++++++++++++++ - -* Colormaps for OpenCV to enhance the visualization. -* Face Recognition algorithms implemented: - - * Eigenfaces [TP91]_ - * Fisherfaces [BHK97]_ - * Local Binary Patterns Histograms [AHP04]_ - -* Added persistence facilities to store the models with a common API. -* Unit Tests (using `gtest `_). -* Providing a CMakeLists.txt to enable easy cross-platform building. diff --git a/modules/contrib/doc/facerec/facerec_tutorial.rst b/modules/contrib/doc/facerec/facerec_tutorial.rst deleted file mode 100644 index cbfb41797..000000000 --- a/modules/contrib/doc/facerec/facerec_tutorial.rst +++ /dev/null @@ -1,628 +0,0 @@ -Face Recognition with OpenCV -############################ - -.. contents:: Table of Contents - :depth: 3 - -Introduction -============ - -`OpenCV (Open Source Computer Vision) `_ is a popular computer vision library started by `Intel `_ in 1999. The cross-platform library sets its focus on real-time image processing and includes patent-free implementations of the latest computer vision algorithms. In 2008 `Willow Garage `_ took over support and OpenCV 2.3.1 now comes with a programming interface to C, C++, `Python `_ and `Android `_. OpenCV is released under a BSD license so it is used in academic projects and commercial products alike. - -OpenCV 2.4 now comes with the very new :ocv:class:`FaceRecognizer` class for face recognition, so you can start experimenting with face recognition right away. This document is the guide I've wished for, when I was working myself into face recognition. It shows you how to perform face recognition with :ocv:class:`FaceRecognizer` in OpenCV (with full source code listings) and gives you an introduction into the algorithms behind. I'll also show how to create the visualizations you can find in many publications, because a lot of people asked for. - -The currently available algorithms are: - -* Eigenfaces (see :ocv:func:`createEigenFaceRecognizer`) -* Fisherfaces (see :ocv:func:`createFisherFaceRecognizer`) -* Local Binary Patterns Histograms (see :ocv:func:`createLBPHFaceRecognizer`) - -You don't need to copy and paste the source code examples from this page, because they are available in the ``src`` folder coming with this documentation. If you have built OpenCV with the samples turned on, chances are good you have them compiled already! Although it might be interesting for very advanced users, I've decided to leave the implementation details out as I am afraid they confuse new users. - -All code in this document is released under the `BSD license `_, so feel free to use it for your projects. - -Face Recognition -================ - -Face recognition is an easy task for humans. Experiments in [Tu06]_ have shown, that even one to three day old babies are able to distinguish between known faces. So how hard could it be for a computer? It turns out we know little about human recognition to date. Are inner features (eyes, nose, mouth) or outer features (head shape, hairline) used for a successful face recognition? How do we analyze an image and how does the brain encode it? It was shown by `David Hubel `_ and `Torsten Wiesel `_, that our brain has specialized nerve cells responding to specific local features of a scene, such as lines, edges, angles or movement. Since we don't see the world as scattered pieces, our visual cortex must somehow combine the different sources of information into useful patterns. Automatic face recognition is all about extracting those meaningful features from an image, putting them into a useful representation and performing some kind of classification on them. - -Face recognition based on the geometric features of a face is probably the most intuitive approach to face recognition. One of the first automated face recognition systems was described in [Kanade73]_: marker points (position of eyes, ears, nose, ...) were used to build a feature vector (distance between the points, angle between them, ...). The recognition was performed by calculating the euclidean distance between feature vectors of a probe and reference image. Such a method is robust against changes in illumination by its nature, but has a huge drawback: the accurate registration of the marker points is complicated, even with state of the art algorithms. Some of the latest work on geometric face recognition was carried out in [Bru92]_. A 22-dimensional feature vector was used and experiments on large datasets have shown, that geometrical features alone my not carry enough information for face recognition. - -The Eigenfaces method described in [TP91]_ took a holistic approach to face recognition: A facial image is a point from a high-dimensional image space and a lower-dimensional representation is found, where classification becomes easy. The lower-dimensional subspace is found with Principal Component Analysis, which identifies the axes with maximum variance. While this kind of transformation is optimal from a reconstruction standpoint, it doesn't take any class labels into account. Imagine a situation where the variance is generated from external sources, let it be light. The axes with maximum variance do not necessarily contain any discriminative information at all, hence a classification becomes impossible. So a class-specific projection with a Linear Discriminant Analysis was applied to face recognition in [BHK97]_. The basic idea is to minimize the variance within a class, while maximizing the variance between the classes at the same time. - -Recently various methods for a local feature extraction emerged. To avoid the high-dimensionality of the input data only local regions of an image are described, the extracted features are (hopefully) more robust against partial occlusion, illumation and small sample size. Algorithms used for a local feature extraction are Gabor Wavelets ([Wiskott97]_), Discrete Cosinus Transform ([Messer06]_) and Local Binary Patterns ([AHP04]_). It's still an open research question what's the best way to preserve spatial information when applying a local feature extraction, because spatial information is potentially useful information. - -Face Database -============== - -Let's get some data to experiment with first. I don't want to do a toy example here. We are doing face recognition, so you'll need some face images! You can either create your own dataset or start with one of the available face databases, `http://face-rec.org/databases/ `_ gives you an up-to-date overview. Three interesting databases are (parts of the description are quoted from `http://face-rec.org `_): - -* `AT&T Facedatabase `_ The AT&T Facedatabase, sometimes also referred to as *ORL Database of Faces*, contains ten different images of each of 40 distinct subjects. For some subjects, the images were taken at different times, varying the lighting, facial expressions (open / closed eyes, smiling / not smiling) and facial details (glasses / no glasses). All the images were taken against a dark homogeneous background with the subjects in an upright, frontal position (with tolerance for some side movement). - -* `Yale Facedatabase A `_, also known as Yalefaces. The AT&T Facedatabase is good for initial tests, but it's a fairly easy database. The Eigenfaces method already has a 97% recognition rate on it, so you won't see any great improvements with other algorithms. The Yale Facedatabase A (also known as Yalefaces) is a more appropriate dataset for initial experiments, because the recognition problem is harder. The database consists of 15 people (14 male, 1 female) each with 11 grayscale images sized :math:`320 \times 243` pixel. There are changes in the light conditions (center light, left light, right light), facial expressions (happy, normal, sad, sleepy, surprised, wink) and glasses (glasses, no-glasses). - - The original images are not cropped and aligned. Please look into the :ref:`appendixft` for a Python script, that does the job for you. - -* `Extended Yale Facedatabase B `_ The Extended Yale Facedatabase B contains 2414 images of 38 different people in its cropped version. The focus of this database is set on extracting features that are robust to illumination, the images have almost no variation in emotion/occlusion/... . I personally think, that this dataset is too large for the experiments I perform in this document. You better use the `AT&T Facedatabase `_ for intial testing. A first version of the Yale Facedatabase B was used in [BHK97]_ to see how the Eigenfaces and Fisherfaces method perform under heavy illumination changes. [Lee05]_ used the same setup to take 16128 images of 28 people. The Extended Yale Facedatabase B is the merge of the two databases, which is now known as Extended Yalefacedatabase B. - -Preparing the data -------------------- - -Once we have acquired some data, we'll need to read it in our program. In the demo applications I have decided to read the images from a very simple CSV file. Why? Because it's the simplest platform-independent approach I can think of. However, if you know a simpler solution please ping me about it. Basically all the CSV file needs to contain are lines composed of a ``filename`` followed by a ``;`` followed by the ``label`` (as *integer number*), making up a line like this: - -.. code-block:: none - - /path/to/image.ext;0 - -Let's dissect the line. ``/path/to/image.ext`` is the path to an image, probably something like this if you are in Windows: ``C:/faces/person0/image0.jpg``. Then there is the separator ``;`` and finally we assign the label ``0`` to the image. Think of the label as the subject (the person) this image belongs to, so same subjects (persons) should have the same label. - -Download the AT&T Facedatabase from AT&T Facedatabase and the corresponding CSV file from at.txt, which looks like this (file is without ... of course): - -.. code-block:: none - - ./at/s1/1.pgm;0 - ./at/s1/2.pgm;0 - ... - ./at/s2/1.pgm;1 - ./at/s2/2.pgm;1 - ... - ./at/s40/1.pgm;39 - ./at/s40/2.pgm;39 - -Imagine I have extracted the files to ``D:/data/at`` and have downloaded the CSV file to ``D:/data/at.txt``. Then you would simply need to Search & Replace ``./`` with ``D:/data/``. You can do that in an editor of your choice, every sufficiently advanced editor can do this. Once you have a CSV file with valid filenames and labels, you can run any of the demos by passing the path to the CSV file as parameter: - -.. code-block:: none - - facerec_demo.exe D:/data/at.txt - -Creating the CSV File -+++++++++++++++++++++ - -You don't really want to create the CSV file by hand. I have prepared you a little Python script ``create_csv.py`` (you find it at ``src/create_csv.py`` coming with this tutorial) that automatically creates you a CSV file. If you have your images in hierarchie like this (``/basepath//``): - -.. code-block:: none - - philipp@mango:~/facerec/data/at$ tree - . - |-- s1 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - |-- s2 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - ... - |-- s40 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - - -Then simply call create_csv.py with the path to the folder, just like this and you could save the output: - -.. code-block:: none - - philipp@mango:~/facerec/data$ python create_csv.py - at/s13/2.pgm;0 - at/s13/7.pgm;0 - at/s13/6.pgm;0 - at/s13/9.pgm;0 - at/s13/5.pgm;0 - at/s13/3.pgm;0 - at/s13/4.pgm;0 - at/s13/10.pgm;0 - at/s13/8.pgm;0 - at/s13/1.pgm;0 - at/s17/2.pgm;1 - at/s17/7.pgm;1 - at/s17/6.pgm;1 - at/s17/9.pgm;1 - at/s17/5.pgm;1 - at/s17/3.pgm;1 - [...] - -Please see the :ref:`appendixft` for additional informations. - -Eigenfaces -========== - -The problem with the image representation we are given is its high dimensionality. Two-dimensional :math:`p \times q` grayscale images span a :math:`m = pq`-dimensional vector space, so an image with :math:`100 \times 100` pixels lies in a :math:`10,000`-dimensional image space already. The question is: Are all dimensions equally useful for us? We can only make a decision if there's any variance in data, so what we are looking for are the components that account for most of the information. The Principal Component Analysis (PCA) was independently proposed by `Karl Pearson `_ (1901) and `Harold Hotelling `_ (1933) to turn a set of possibly correlated variables into a smaller set of uncorrelated variables. The idea is, that a high-dimensional dataset is often described by correlated variables and therefore only a few meaningful dimensions account for most of the information. The PCA method finds the directions with the greatest variance in the data, called principal components. - -Algorithmic Description ------------------------ - -Let :math:`X = \{ x_{1}, x_{2}, \ldots, x_{n} \}` be a random vector with observations :math:`x_i \in R^{d}`. - -1. Compute the mean :math:`\mu` - - .. math:: - - \mu = \frac{1}{n} \sum_{i=1}^{n} x_{i} - -2. Compute the the Covariance Matrix `S` - - .. math:: - - S = \frac{1}{n} \sum_{i=1}^{n} (x_{i} - \mu) (x_{i} - \mu)^{T}` - -3. Compute the eigenvalues :math:`\lambda_{i}` and eigenvectors :math:`v_{i}` of :math:`S` - - .. math:: - - S v_{i} = \lambda_{i} v_{i}, i=1,2,\ldots,n - -4. Order the eigenvectors descending by their eigenvalue. The :math:`k` principal components are the eigenvectors corresponding to the :math:`k` largest eigenvalues. - -The :math:`k` principal components of the observed vector :math:`x` are then given by: - -.. math:: - - y = W^{T} (x - \mu) - - -where :math:`W = (v_{1}, v_{2}, \ldots, v_{k})`. - -The reconstruction from the PCA basis is given by: - -.. math:: - - x = W y + \mu - -where :math:`W = (v_{1}, v_{2}, \ldots, v_{k})`. - - -The Eigenfaces method then performs face recognition by: - -* Projecting all training samples into the PCA subspace. -* Projecting the query image into the PCA subspace. -* Finding the nearest neighbor between the projected training images and the projected query image. - -Still there's one problem left to solve. Imagine we are given :math:`400` images sized :math:`100 \times 100` pixel. The Principal Component Analysis solves the covariance matrix :math:`S = X X^{T}`, where :math:`{size}(X) = 10000 \times 400` in our example. You would end up with a :math:`10000 \times 10000` matrix, roughly :math:`0.8 GB`. Solving this problem isn't feasible, so we'll need to apply a trick. From your linear algebra lessons you know that a :math:`M \times N` matrix with :math:`M > N` can only have :math:`N - 1` non-zero eigenvalues. So it's possible to take the eigenvalue decomposition :math:`S = X^{T} X` of size :math:`N \times N` instead: - -.. math:: - - X^{T} X v_{i} = \lambda_{i} v{i} - - -and get the original eigenvectors of :math:`S = X X^{T}` with a left multiplication of the data matrix: - -.. math:: - - X X^{T} (X v_{i}) = \lambda_{i} (X v_{i}) - -The resulting eigenvectors are orthogonal, to get orthonormal eigenvectors they need to be normalized to unit length. I don't want to turn this into a publication, so please look into [Duda01]_ for the derivation and proof of the equations. - -Eigenfaces in OpenCV --------------------- - -For the first source code example, I'll go through it with you. I am first giving you the whole source code listing, and after this we'll look at the most important lines in detail. Please note: every source code listing is commented in detail, so you should have no problems following it. - -.. literalinclude:: src/facerec_eigenfaces.cpp - :language: cpp - :linenos: - -The source code for this demo application is also available in the ``src`` folder coming with this documentation: - -* :download:`src/facerec_eigenfaces.cpp ` - - -I've used the jet colormap, so you can see how the grayscale values are distributed within the specific Eigenfaces. You can see, that the Eigenfaces do not only encode facial features, but also the illumination in the images (see the left light in Eigenface \#4, right light in Eigenfaces \#5): - -.. image:: img/eigenfaces_opencv.png - :align: center - -We've already seen, that we can reconstruct a face from its lower dimensional approximation. So let's see how many Eigenfaces are needed for a good reconstruction. I'll do a subplot with :math:`10,30,\ldots,310` Eigenfaces: - -.. code-block:: cpp - - // Display or save the image reconstruction at some predefined steps: - for(int num_components = 10; num_components < 300; num_components+=15) { - // slice the eigenvectors from the model - Mat evs = Mat(W, Range::all(), Range(0, num_components)); - Mat projection = subspaceProject(evs, mean, images[0].reshape(1,1)); - Mat reconstruction = subspaceReconstruct(evs, mean, projection); - // Normalize the result: - reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows)); - // Display or save: - if(argc == 2) { - imshow(format("eigenface_reconstruction_%d", num_components), reconstruction); - } else { - imwrite(format("%s/eigenface_reconstruction_%d.png", output_folder.c_str(), num_components), reconstruction); - } - } - -10 Eigenvectors are obviously not sufficient for a good image reconstruction, 50 Eigenvectors may already be sufficient to encode important facial features. You'll get a good reconstruction with approximately 300 Eigenvectors for the AT&T Facedatabase. There are rule of thumbs how many Eigenfaces you should choose for a successful face recognition, but it heavily depends on the input data. [Zhao03]_ is the perfect point to start researching for this: - -.. image:: img/eigenface_reconstruction_opencv.png - :align: center - - -Fisherfaces -============ - -The Principal Component Analysis (PCA), which is the core of the Eigenfaces method, finds a linear combination of features that maximizes the total variance in data. While this is clearly a powerful way to represent data, it doesn't consider any classes and so a lot of discriminative information *may* be lost when throwing components away. Imagine a situation where the variance in your data is generated by an external source, let it be the light. The components identified by a PCA do not necessarily contain any discriminative information at all, so the projected samples are smeared together and a classification becomes impossible (see `http://www.bytefish.de/wiki/pca_lda_with_gnu_octave `_ for an example). - -The Linear Discriminant Analysis performs a class-specific dimensionality reduction and was invented by the great statistician `Sir R. A. Fisher `_. He successfully used it for classifying flowers in his 1936 paper *The use of multiple measurements in taxonomic problems* [Fisher36]_. In order to find the combination of features that separates best between classes the Linear Discriminant Analysis maximizes the ratio of between-classes to within-classes scatter, instead of maximizing the overall scatter. The idea is simple: same classes should cluster tightly together, while different classes are as far away as possible from each other in the lower-dimensional representation. This was also recognized by `Belhumeur `_, `Hespanha `_ and `Kriegman `_ and so they applied a Discriminant Analysis to face recognition in [BHK97]_. - -Algorithmic Description ------------------------ - -Let :math:`X` be a random vector with samples drawn from :math:`c` classes: - - -.. math:: - :nowrap: - - \begin{align*} - X & = & \{X_1,X_2,\ldots,X_c\} \\ - X_i & = & \{x_1, x_2, \ldots, x_n\} - \end{align*} - - -The scatter matrices :math:`S_{B}` and `S_{W}` are calculated as: - -.. math:: - :nowrap: - - \begin{align*} - S_{B} & = & \sum_{i=1}^{c} N_{i} (\mu_i - \mu)(\mu_i - \mu)^{T} \\ - S_{W} & = & \sum_{i=1}^{c} \sum_{x_{j} \in X_{i}} (x_j - \mu_i)(x_j - \mu_i)^{T} - \end{align*} - -, where :math:`\mu` is the total mean: - -.. math:: - - \mu = \frac{1}{N} \sum_{i=1}^{N} x_i - -And :math:`\mu_i` is the mean of class :math:`i \in \{1,\ldots,c\}`: - -.. math:: - - \mu_i = \frac{1}{|X_i|} \sum_{x_j \in X_i} x_j - -Fisher's classic algorithm now looks for a projection :math:`W`, that maximizes the class separability criterion: - -.. math:: - - W_{opt} = \operatorname{arg\,max}_{W} \frac{|W^T S_B W|}{|W^T S_W W|} - - -Following [BHK97]_, a solution for this optimization problem is given by solving the General Eigenvalue Problem: - -.. math:: - :nowrap: - - \begin{align*} - S_{B} v_{i} & = & \lambda_{i} S_w v_{i} \nonumber \\ - S_{W}^{-1} S_{B} v_{i} & = & \lambda_{i} v_{i} - \end{align*} - -There's one problem left to solve: The rank of :math:`S_{W}` is at most :math:`(N-c)`, with :math:`N` samples and :math:`c` classes. In pattern recognition problems the number of samples :math:`N` is almost always samller than the dimension of the input data (the number of pixels), so the scatter matrix :math:`S_{W}` becomes singular (see [RJ91]_). In [BHK97]_ this was solved by performing a Principal Component Analysis on the data and projecting the samples into the :math:`(N-c)`-dimensional space. A Linear Discriminant Analysis was then performed on the reduced data, because :math:`S_{W}` isn't singular anymore. - -The optimization problem can then be rewritten as: - -.. math:: - :nowrap: - - \begin{align*} - W_{pca} & = & \operatorname{arg\,max}_{W} |W^T S_T W| \\ - W_{fld} & = & \operatorname{arg\,max}_{W} \frac{|W^T W_{pca}^T S_{B} W_{pca} W|}{|W^T W_{pca}^T S_{W} W_{pca} W|} - \end{align*} - -The transformation matrix :math:`W`, that projects a sample into the :math:`(c-1)`-dimensional space is then given by: - -.. math:: - - W = W_{fld}^{T} W_{pca}^{T} - -Fisherfaces in OpenCV ---------------------- - -.. literalinclude:: src/facerec_fisherfaces.cpp - :language: cpp - :linenos: - -The source code for this demo application is also available in the ``src`` folder coming with this documentation: - -* :download:`src/facerec_fisherfaces.cpp ` - - -For this example I am going to use the Yale Facedatabase A, just because the plots are nicer. Each Fisherface has the same length as an original image, thus it can be displayed as an image. The demo shows (or saves) the first, at most 16 Fisherfaces: - -.. image:: img/fisherfaces_opencv.png - :align: center - -The Fisherfaces method learns a class-specific transformation matrix, so the they do not capture illumination as obviously as the Eigenfaces method. The Discriminant Analysis instead finds the facial features to discriminate between the persons. It's important to mention, that the performance of the Fisherfaces heavily depends on the input data as well. Practically said: if you learn the Fisherfaces for well-illuminated pictures only and you try to recognize faces in bad-illuminated scenes, then method is likely to find the wrong components (just because those features may not be predominant on bad illuminated images). This is somewhat logical, since the method had no chance to learn the illumination. - -The Fisherfaces allow a reconstruction of the projected image, just like the Eigenfaces did. But since we only identified the features to distinguish between subjects, you can't expect a nice reconstruction of the original image. For the Fisherfaces method we'll project the sample image onto each of the Fisherfaces instead. So you'll have a nice visualization, which feature each of the Fisherfaces describes: - -.. code-block:: cpp - - // Display or save the image reconstruction at some predefined steps: - for(int num_component = 0; num_component < min(16, W.cols); num_component++) { - // Slice the Fisherface from the model: - Mat ev = W.col(num_component); - Mat projection = subspaceProject(ev, mean, images[0].reshape(1,1)); - Mat reconstruction = subspaceReconstruct(ev, mean, projection); - // Normalize the result: - reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows)); - // Display or save: - if(argc == 2) { - imshow(format("fisherface_reconstruction_%d", num_component), reconstruction); - } else { - imwrite(format("%s/fisherface_reconstruction_%d.png", output_folder.c_str(), num_component), reconstruction); - } - } - -The differences may be subtle for the human eyes, but you should be able to see some differences: - -.. image:: img/fisherface_reconstruction_opencv.png - :align: center - - -Local Binary Patterns Histograms -================================ - -Eigenfaces and Fisherfaces take a somewhat holistic approach to face recognition. You treat your data as a vector somewhere in a high-dimensional image space. We all know high-dimensionality is bad, so a lower-dimensional subspace is identified, where (probably) useful information is preserved. The Eigenfaces approach maximizes the total scatter, which can lead to problems if the variance is generated by an external source, because components with a maximum variance over all classes aren't necessarily useful for classification (see `http://www.bytefish.de/wiki/pca_lda_with_gnu_octave `_). So to preserve some discriminative information we applied a Linear Discriminant Analysis and optimized as described in the Fisherfaces method. The Fisherfaces method worked great... at least for the constrained scenario we've assumed in our model. - -Now real life isn't perfect. You simply can't guarantee perfect light settings in your images or 10 different images of a person. So what if there's only one image for each person? Our covariance estimates for the subspace *may* be horribly wrong, so will the recognition. Remember the Eigenfaces method had a 96% recognition rate on the AT&T Facedatabase? How many images do we actually need to get such useful estimates? Here are the Rank-1 recognition rates of the Eigenfaces and Fisherfaces method on the AT&T Facedatabase, which is a fairly easy image database: - -.. image:: img/at_database_small_sample_size.png - :scale: 60% - :align: center - -So in order to get good recognition rates you'll need at least 8(+-1) images for each person and the Fisherfaces method doesn't really help here. The above experiment is a 10-fold cross validated result carried out with the facerec framework at: `https://github.com/bytefish/facerec `_. This is not a publication, so I won't back these figures with a deep mathematical analysis. Please have a look into [KM01]_ for a detailed analysis of both methods, when it comes to small training datasets. - -So some research concentrated on extracting local features from images. The idea is to not look at the whole image as a high-dimensional vector, but describe only local features of an object. The features you extract this way will have a low-dimensionality implicitly. A fine idea! But you'll soon observe the image representation we are given doesn't only suffer from illumination variations. Think of things like scale, translation or rotation in images - your local description has to be at least a bit robust against those things. Just like :ocv:class:`SIFT`, the Local Binary Patterns methodology has its roots in 2D texture analysis. The basic idea of Local Binary Patterns is to summarize the local structure in an image by comparing each pixel with its neighborhood. Take a pixel as center and threshold its neighbors against. If the intensity of the center pixel is greater-equal its neighbor, then denote it with 1 and 0 if not. You'll end up with a binary number for each pixel, just like 11001111. So with 8 surrounding pixels you'll end up with 2^8 possible combinations, called *Local Binary Patterns* or sometimes referred to as *LBP codes*. The first LBP operator described in literature actually used a fixed 3 x 3 neighborhood just like this: - -.. image:: img/lbp/lbp.png - :scale: 80% - :align: center - -Algorithmic Description ------------------------ - -A more formal description of the LBP operator can be given as: - -.. math:: - - LBP(x_c, y_c) = \sum_{p=0}^{P-1} 2^p s(i_p - i_c) - -, with :math:`(x_c, y_c)` as central pixel with intensity :math:`i_c`; and :math:`i_n` being the intensity of the the neighbor pixel. :math:`s` is the sign function defined as: - -.. math:: - :nowrap: - - \begin{equation} - s(x) = - \begin{cases} - 1 & \text{if $x \geq 0$}\\ - 0 & \text{else} - \end{cases} - \end{equation} - -This description enables you to capture very fine grained details in images. In fact the authors were able to compete with state of the art results for texture classification. Soon after the operator was published it was noted, that a fixed neighborhood fails to encode details differing in scale. So the operator was extended to use a variable neighborhood in [AHP04]_. The idea is to align an abritrary number of neighbors on a circle with a variable radius, which enables to capture the following neighborhoods: - -.. image:: img/lbp/patterns.png - :scale: 80% - :align: center - -For a given Point :math:`(x_c,y_c)` the position of the neighbor :math:`(x_p,y_p), p \in P` can be calculated by: - -.. math:: - :nowrap: - - \begin{align*} - x_{p} & = & x_c + R \cos({\frac{2\pi p}{P}})\\ - y_{p} & = & y_c - R \sin({\frac{2\pi p}{P}}) - \end{align*} - -Where :math:`R` is the radius of the circle and :math:`P` is the number of sample points. - -The operator is an extension to the original LBP codes, so it's sometimes called *Extended LBP* (also referred to as *Circular LBP*) . If a points coordinate on the circle doesn't correspond to image coordinates, the point get's interpolated. Computer science has a bunch of clever interpolation schemes, the OpenCV implementation does a bilinear interpolation: - -.. math:: - :nowrap: - - \begin{align*} - f(x,y) \approx \begin{bmatrix} - 1-x & x \end{bmatrix} \begin{bmatrix} - f(0,0) & f(0,1) \\ - f(1,0) & f(1,1) \end{bmatrix} \begin{bmatrix} - 1-y \\ - y \end{bmatrix}. - \end{align*} - -By definition the LBP operator is robust against monotonic gray scale transformations. We can easily verify this by looking at the LBP image of an artificially modified image (so you see what an LBP image looks like!): - -.. image:: img/lbp/lbp_yale.jpg - :scale: 60% - :align: center - -So what's left to do is how to incorporate the spatial information in the face recognition model. The representation proposed by Ahonen et. al [AHP04]_ is to divide the LBP image into :math:`m` local regions and extract a histogram from each. The spatially enhanced feature vector is then obtained by concatenating the local histograms (**not merging them**). These histograms are called *Local Binary Patterns Histograms*. - -Local Binary Patterns Histograms in OpenCV ------------------------------------------- - -.. literalinclude:: src/facerec_lbph.cpp - :language: cpp - :linenos: - -The source code for this demo application is also available in the ``src`` folder coming with this documentation: - -* :download:`src/facerec_lbph.cpp ` - -Conclusion -========== - -You've learned how to use the new :ocv:class:`FaceRecognizer` in real applications. After reading the document you also know how the algorithms work, so now it's time for you to experiment with the available algorithms. Use them, improve them and let the OpenCV community participate! - -Credits -======= - -This document wouldn't be possible without the kind permission to use the face images of the *AT&T Database of Faces* and the *Yale Facedatabase A/B*. - -The Database of Faces ---------------------- - -** Important: when using these images, please give credit to "AT&T Laboratories, Cambridge." ** - -The Database of Faces, formerly *The ORL Database of Faces*, contains a set of face images taken between April 1992 and April 1994. The database was used in the context of a face recognition project carried out in collaboration with the Speech, Vision and Robotics Group of the Cambridge University Engineering Department. - -There are ten different images of each of 40 distinct subjects. For some subjects, the images were taken at different times, varying the lighting, facial expressions (open / closed eyes, smiling / not smiling) and facial details (glasses / no glasses). All the images were taken against a dark homogeneous background with the subjects in an upright, frontal position (with tolerance for some side movement). - -The files are in PGM format. The size of each image is 92x112 pixels, with 256 grey levels per pixel. The images are organised in 40 directories (one for each subject), which have names of the form sX, where X indicates the subject number (between 1 and 40). In each of these directories, there are ten different images of that subject, which have names of the form Y.pgm, where Y is the image number for that subject (between 1 and 10). - -A copy of the database can be retrieved from: `http://www.cl.cam.ac.uk/research/dtg/attarchive/pub/data/att_faces.zip `_. - -Yale Facedatabase A -------------------- - -*With the permission of the authors I am allowed to show a small number of images (say subject 1 and all the variations) and all images such as Fisherfaces and Eigenfaces from either Yale Facedatabase A or the Yale Facedatabase B.* - -The Yale Face Database A (size 6.4MB) contains 165 grayscale images in GIF format of 15 individuals. There are 11 images per subject, one per different facial expression or configuration: center-light, w/glasses, happy, left-light, w/no glasses, normal, right-light, sad, sleepy, surprised, and wink. (Source: `http://cvc.yale.edu/projects/yalefaces/yalefaces.html `_) - -Yale Facedatabase B --------------------- - -*With the permission of the authors I am allowed to show a small number of images (say subject 1 and all the variations) and all images such as Fisherfaces and Eigenfaces from either Yale Facedatabase A or the Yale Facedatabase B.* - -The extended Yale Face Database B contains 16128 images of 28 human subjects under 9 poses and 64 illumination conditions. The data format of this database is the same as the Yale Face Database B. Please refer to the homepage of the Yale Face Database B (or one copy of this page) for more detailed information of the data format. - -You are free to use the extended Yale Face Database B for research purposes. All publications which use this database should acknowledge the use of "the Exteded Yale Face Database B" and reference Athinodoros Georghiades, Peter Belhumeur, and David Kriegman's paper, "From Few to Many: Illumination Cone Models for Face Recognition under Variable Lighting and Pose", PAMI, 2001, `[bibtex] `_. - -The extended database as opposed to the original Yale Face Database B with 10 subjects was first reported by Kuang-Chih Lee, Jeffrey Ho, and David Kriegman in "Acquiring Linear Subspaces for Face Recognition under Variable Lighting, PAMI, May, 2005 `[pdf] `_." All test image data used in the experiments are manually aligned, cropped, and then re-sized to 168x192 images. If you publish your experimental results with the cropped images, please reference the PAMI2005 paper as well. (Source: `http://vision.ucsd.edu/~leekc/ExtYaleDatabase/ExtYaleB.html `_) - -Literature -========== - -.. [AHP04] Ahonen, T., Hadid, A., and Pietikainen, M. *Face Recognition with Local Binary Patterns.* Computer Vision - ECCV 2004 (2004), 469–481. - -.. [BHK97] Belhumeur, P. N., Hespanha, J., and Kriegman, D. *Eigenfaces vs. Fisherfaces: Recognition Using Class Specific Linear Projection.* IEEE Transactions on Pattern Analysis and Machine Intelligence 19, 7 (1997), 711–720. - -.. [Bru92] Brunelli, R., Poggio, T. *Face Recognition through Geometrical Features.* European Conference on Computer Vision (ECCV) 1992, S. 792–800. - -.. [Duda01] Duda, Richard O. and Hart, Peter E. and Stork, David G., *Pattern Classification* (2nd Edition) 2001. - -.. [Fisher36] Fisher, R. A. *The use of multiple measurements in taxonomic problems.* Annals Eugen. 7 (1936), 179–188. - -.. [GBK01] Georghiades, A.S. and Belhumeur, P.N. and Kriegman, D.J., *From Few to Many: Illumination Cone Models for Face Recognition under Variable Lighting and Pose* IEEE Transactions on Pattern Analysis and Machine Intelligence 23, 6 (2001), 643-660. - -.. [Kanade73] Kanade, T. *Picture processing system by computer complex and recognition of human faces.* PhD thesis, Kyoto University, November 1973 - -.. [KM01] Martinez, A and Kak, A. *PCA versus LDA* IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 23, No.2, pp. 228-233, 2001. - -.. [Lee05] Lee, K., Ho, J., Kriegman, D. *Acquiring Linear Subspaces for Face Recognition under Variable Lighting.* In: IEEE Transactions on Pattern Analysis and Machine Intelligence (PAMI) 27 (2005), Nr. 5 - -.. [Messer06] Messer, K. et al. *Performance Characterisation of Face Recognition Algorithms and Their Sensitivity to Severe Illumination Changes.* In: In: ICB, 2006, S. 1–11. - -.. [RJ91] S. Raudys and A.K. Jain. *Small sample size effects in statistical pattern recognition: Recommendations for practitioneers.* - IEEE Transactions on Pattern Analysis and Machine Intelligence 13, 3 (1991), 252-264. - -.. [Tan10] Tan, X., and Triggs, B. *Enhanced local texture feature sets for face recognition under difficult lighting conditions.* IEEE Transactions on Image Processing 19 (2010), 1635–650. - -.. [TP91] Turk, M., and Pentland, A. *Eigenfaces for recognition.* Journal of Cognitive Neuroscience 3 (1991), 71–86. - -.. [Tu06] Chiara Turati, Viola Macchi Cassia, F. S., and Leo, I. *Newborns face recognition: Role of inner and outer facial features. Child Development* 77, 2 (2006), 297–311. - -.. [Wiskott97] Wiskott, L., Fellous, J., Krüger, N., Malsburg, C. *Face Recognition By Elastic Bunch Graph Matching.* IEEE Transactions on Pattern Analysis and Machine Intelligence 19 (1997), S. 775–779 - -.. [Zhao03] Zhao, W., Chellappa, R., Phillips, P., and Rosenfeld, A. Face recognition: A literature survey. ACM Computing Surveys (CSUR) 35, 4 (2003), 399–458. - -.. _appendixft: - -Appendix -======== - -Creating the CSV File ---------------------- - -You don't really want to create the CSV file by hand. I have prepared you a little Python script ``create_csv.py`` (you find it at ``/src/create_csv.py`` coming with this tutorial) that automatically creates you a CSV file. If you have your images in hierarchie like this (``/basepath//``): - -.. code-block:: none - - philipp@mango:~/facerec/data/at$ tree - . - |-- s1 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - |-- s2 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - ... - |-- s40 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - - -Then simply call ``create_csv.py`` with the path to the folder, just like this and you could save the output: - -.. code-block:: none - - philipp@mango:~/facerec/data$ python create_csv.py - at/s13/2.pgm;0 - at/s13/7.pgm;0 - at/s13/6.pgm;0 - at/s13/9.pgm;0 - at/s13/5.pgm;0 - at/s13/3.pgm;0 - at/s13/4.pgm;0 - at/s13/10.pgm;0 - at/s13/8.pgm;0 - at/s13/1.pgm;0 - at/s17/2.pgm;1 - at/s17/7.pgm;1 - at/s17/6.pgm;1 - at/s17/9.pgm;1 - at/s17/5.pgm;1 - at/s17/3.pgm;1 - [...] - -Here is the script, if you can't find it: - -.. literalinclude:: ./src/create_csv.py - :language: python - :linenos: - -Aligning Face Images ---------------------- - -An accurate alignment of your image data is especially important in tasks like emotion detection, were you need as much detail as possible. Believe me... You don't want to do this by hand. So I've prepared you a tiny Python script. The code is really easy to use. To scale, rotate and crop the face image you just need to call *CropFace(image, eye_left, eye_right, offset_pct, dest_sz)*, where: - -* *eye_left* is the position of the left eye -* *eye_right* is the position of the right eye -* *offset_pct* is the percent of the image you want to keep next to the eyes (horizontal, vertical direction) -* *dest_sz* is the size of the output image - -If you are using the same *offset_pct* and *dest_sz* for your images, they are all aligned at the eyes. - -.. literalinclude:: ./src/crop_face.py - :language: python - :linenos: - -Imagine we are given `this photo of Arnold Schwarzenegger `_, which is under a Public Domain license. The (x,y)-position of the eyes is approximately *(252,364)* for the left and *(420,366)* for the right eye. Now you only need to define the horizontal offset, vertical offset and the size your scaled, rotated & cropped face should have. - -Here are some examples: - -+---------------------------------+----------------------------------------------------------------------------+ -| Configuration | Cropped, Scaled, Rotated Face | -+=================================+============================================================================+ -| 0.1 (10%), 0.1 (10%), (200,200) | .. image:: ./img/tutorial/gender_classification/arnie_10_10_200_200.jpg | -+---------------------------------+----------------------------------------------------------------------------+ -| 0.2 (20%), 0.2 (20%), (200,200) | .. image:: ./img/tutorial/gender_classification/arnie_20_20_200_200.jpg | -+---------------------------------+----------------------------------------------------------------------------+ -| 0.3 (30%), 0.3 (30%), (200,200) | .. image:: ./img/tutorial/gender_classification/arnie_30_30_200_200.jpg | -+---------------------------------+----------------------------------------------------------------------------+ -| 0.2 (20%), 0.2 (20%), (70,70) | .. image:: ./img/tutorial/gender_classification/arnie_20_20_70_70.jpg | -+---------------------------------+----------------------------------------------------------------------------+ - -CSV for the AT&T Facedatabase ------------------------------- - -.. literalinclude:: etc/at.txt - :language: none - :linenos: diff --git a/modules/contrib/doc/facerec/img/at_database_small_sample_size.png b/modules/contrib/doc/facerec/img/at_database_small_sample_size.png deleted file mode 100644 index 92143c106..000000000 Binary files a/modules/contrib/doc/facerec/img/at_database_small_sample_size.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_autumn.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_autumn.jpg deleted file mode 100644 index 0c1c8a29b..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_autumn.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_bone.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_bone.jpg deleted file mode 100644 index 7dbf76635..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_bone.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_cool.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_cool.jpg deleted file mode 100644 index 4253efb99..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_cool.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_hot.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_hot.jpg deleted file mode 100644 index cf7870085..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_hot.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_hsv.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_hsv.jpg deleted file mode 100644 index 6032b8757..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_hsv.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_jet.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_jet.jpg deleted file mode 100644 index ea273a570..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_jet.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_mkpj1.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_mkpj1.jpg deleted file mode 100644 index d7e936397..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_mkpj1.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_mkpj2.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_mkpj2.jpg deleted file mode 100644 index 40b067afe..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_mkpj2.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_ocean.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_ocean.jpg deleted file mode 100644 index 11d771f71..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_ocean.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_pink.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_pink.jpg deleted file mode 100644 index 8fad88c3f..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_pink.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_rainbow.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_rainbow.jpg deleted file mode 100644 index 9565527ae..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_rainbow.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_spring.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_spring.jpg deleted file mode 100644 index ada03a160..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_spring.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_summer.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_summer.jpg deleted file mode 100644 index 10cb35cfe..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_summer.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/colormaps/colorscale_winter.jpg b/modules/contrib/doc/facerec/img/colormaps/colorscale_winter.jpg deleted file mode 100644 index f7753548f..000000000 Binary files a/modules/contrib/doc/facerec/img/colormaps/colorscale_winter.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/eigenface_reconstruction_opencv.png b/modules/contrib/doc/facerec/img/eigenface_reconstruction_opencv.png deleted file mode 100644 index 3ef469ed6..000000000 Binary files a/modules/contrib/doc/facerec/img/eigenface_reconstruction_opencv.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/eigenfaces_opencv.png b/modules/contrib/doc/facerec/img/eigenfaces_opencv.png deleted file mode 100644 index a1ff4dced..000000000 Binary files a/modules/contrib/doc/facerec/img/eigenfaces_opencv.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/fisherface_reconstruction_opencv.png b/modules/contrib/doc/facerec/img/fisherface_reconstruction_opencv.png deleted file mode 100644 index 7f0762d53..000000000 Binary files a/modules/contrib/doc/facerec/img/fisherface_reconstruction_opencv.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/fisherfaces_opencv.png b/modules/contrib/doc/facerec/img/fisherfaces_opencv.png deleted file mode 100644 index 0b4165017..000000000 Binary files a/modules/contrib/doc/facerec/img/fisherfaces_opencv.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/lbp/lbp.png b/modules/contrib/doc/facerec/img/lbp/lbp.png deleted file mode 100644 index fa181d3f2..000000000 Binary files a/modules/contrib/doc/facerec/img/lbp/lbp.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/lbp/lbp_yale.jpg b/modules/contrib/doc/facerec/img/lbp/lbp_yale.jpg deleted file mode 100644 index b4129216f..000000000 Binary files a/modules/contrib/doc/facerec/img/lbp/lbp_yale.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/lbp/patterns.png b/modules/contrib/doc/facerec/img/lbp/patterns.png deleted file mode 100644 index 0142bb15a..000000000 Binary files a/modules/contrib/doc/facerec/img/lbp/patterns.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/facerec_video/facerec_video.png b/modules/contrib/doc/facerec/img/tutorial/facerec_video/facerec_video.png deleted file mode 100644 index 648188211..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/facerec_video/facerec_video.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_10_10_200_200.jpg b/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_10_10_200_200.jpg deleted file mode 100644 index 963208761..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_10_10_200_200.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_20_20_200_200.jpg b/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_20_20_200_200.jpg deleted file mode 100644 index 2fe663315..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_20_20_200_200.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_20_20_70_70.jpg b/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_20_20_70_70.jpg deleted file mode 100644 index d8464ea62..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_20_20_70_70.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_30_30_200_200.jpg b/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_30_30_200_200.jpg deleted file mode 100644 index 58827f2cf..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/gender_classification/arnie_30_30_200_200.jpg and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/gender_classification/clooney_set.png b/modules/contrib/doc/facerec/img/tutorial/gender_classification/clooney_set.png deleted file mode 100644 index f05e447b5..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/gender_classification/clooney_set.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/gender_classification/fisherface_0.png b/modules/contrib/doc/facerec/img/tutorial/gender_classification/fisherface_0.png deleted file mode 100644 index 672a1972a..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/gender_classification/fisherface_0.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/gender_classification/fisherface_reconstruction_0.png b/modules/contrib/doc/facerec/img/tutorial/gender_classification/fisherface_reconstruction_0.png deleted file mode 100644 index 168acadc0..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/gender_classification/fisherface_reconstruction_0.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/img/tutorial/gender_classification/mean.png b/modules/contrib/doc/facerec/img/tutorial/gender_classification/mean.png deleted file mode 100644 index f85369427..000000000 Binary files a/modules/contrib/doc/facerec/img/tutorial/gender_classification/mean.png and /dev/null differ diff --git a/modules/contrib/doc/facerec/index.rst b/modules/contrib/doc/facerec/index.rst deleted file mode 100644 index b871448c5..000000000 --- a/modules/contrib/doc/facerec/index.rst +++ /dev/null @@ -1,32 +0,0 @@ -FaceRecognizer - Face Recognition with OpenCV -############################################## - -OpenCV 2.4 now comes with the very new :ocv:class:`FaceRecognizer` class for face recognition. This documentation is going to explain you :doc:`the API ` in detail and it will give you a lot of help to get started (full source code examples). :doc:`Face Recognition with OpenCV ` is the definite guide to the new :ocv:class:`FaceRecognizer`. There's also a :doc:`tutorial on gender classification `, a :doc:`tutorial for face recognition in videos ` and it's shown :doc:`how to load & save your results `. - -These documents are the help I have wished for, when I was working myself into face recognition. I hope you also think the new :ocv:class:`FaceRecognizer` is a useful addition to OpenCV. - -Please issue any feature requests and/or bugs on the official OpenCV bug tracker at: - - * http://code.opencv.org/projects/opencv/issues - -Contents -======== - - -.. toctree:: - :maxdepth: 1 - - FaceRecognizer API - Guide to Face Recognition with OpenCV - Tutorial on Gender Classification - Tutorial on Face Recognition in Videos - Tutorial On Saving & Loading a FaceRecognizer - How to use Colormaps in OpenCV - Changelog - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/modules/contrib/doc/facerec/src/CMakeLists.txt b/modules/contrib/doc/facerec/src/CMakeLists.txt deleted file mode 100644 index 94aa36fbe..000000000 --- a/modules/contrib/doc/facerec/src/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) - -set(name "facerec") -project(facerec_cpp_samples) - -#SET(OpenCV_DIR /path/to/your/opencv/installation) - -# packages -find_package(OpenCV REQUIRED) # http://opencv.org - -# probably you should loop through the sample files here -add_executable(facerec_demo facerec_demo.cpp) -target_link_libraries(facerec_demo opencv_core opencv_contrib opencv_imgproc opencv_highgui) - -add_executable(facerec_video facerec_video.cpp) -target_link_libraries(facerec_video opencv_contrib opencv_core opencv_imgproc opencv_highgui opencv_objdetect opencv_imgproc) - -add_executable(facerec_eigenfaces facerec_eigenfaces.cpp) -target_link_libraries(facerec_eigenfaces opencv_contrib opencv_core opencv_imgproc opencv_highgui) - -add_executable(facerec_fisherfaces facerec_fisherfaces.cpp) -target_link_libraries(facerec_fisherfaces opencv_contrib opencv_core opencv_imgproc opencv_highgui) - -add_executable(facerec_lbph facerec_lbph.cpp) -target_link_libraries(facerec_lbph opencv_contrib opencv_core opencv_imgproc opencv_highgui) diff --git a/modules/contrib/doc/facerec/src/create_csv.py b/modules/contrib/doc/facerec/src/create_csv.py deleted file mode 100755 index c4de778f9..000000000 --- a/modules/contrib/doc/facerec/src/create_csv.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python - -import sys -import os.path - -# This is a tiny script to help you creating a CSV file from a face -# database with a similar hierarchie: -# -# philipp@mango:~/facerec/data/at$ tree -# . -# |-- README -# |-- s1 -# | |-- 1.pgm -# | |-- ... -# | |-- 10.pgm -# |-- s2 -# | |-- 1.pgm -# | |-- ... -# | |-- 10.pgm -# ... -# |-- s40 -# | |-- 1.pgm -# | |-- ... -# | |-- 10.pgm -# - -if __name__ == "__main__": - - if len(sys.argv) != 2: - print "usage: create_csv " - sys.exit(1) - - BASE_PATH=sys.argv[1] - SEPARATOR=";" - - label = 0 - for dirname, dirnames, filenames in os.walk(BASE_PATH): - for subdirname in dirnames: - subject_path = os.path.join(dirname, subdirname) - for filename in os.listdir(subject_path): - abs_path = "%s/%s" % (subject_path, filename) - print "%s%s%d" % (abs_path, SEPARATOR, label) - label = label + 1 diff --git a/modules/contrib/doc/facerec/src/crop_face.py b/modules/contrib/doc/facerec/src/crop_face.py deleted file mode 100755 index 6d6669d95..000000000 --- a/modules/contrib/doc/facerec/src/crop_face.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env python -# Software License Agreement (BSD License) -# -# Copyright (c) 2012, Philipp Wagner -# 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 name of the author 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 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. - -import sys, math, Image - -def Distance(p1,p2): - dx = p2[0] - p1[0] - dy = p2[1] - p1[1] - return math.sqrt(dx*dx+dy*dy) - -def ScaleRotateTranslate(image, angle, center = None, new_center = None, scale = None, resample=Image.BICUBIC): - if (scale is None) and (center is None): - return image.rotate(angle=angle, resample=resample) - nx,ny = x,y = center - sx=sy=1.0 - if new_center: - (nx,ny) = new_center - if scale: - (sx,sy) = (scale, scale) - cosine = math.cos(angle) - sine = math.sin(angle) - a = cosine/sx - b = sine/sx - c = x-nx*a-ny*b - d = -sine/sy - e = cosine/sy - f = y-nx*d-ny*e - return image.transform(image.size, Image.AFFINE, (a,b,c,d,e,f), resample=resample) - -def CropFace(image, eye_left=(0,0), eye_right=(0,0), offset_pct=(0.2,0.2), dest_sz = (70,70)): - # calculate offsets in original image - offset_h = math.floor(float(offset_pct[0])*dest_sz[0]) - offset_v = math.floor(float(offset_pct[1])*dest_sz[1]) - # get the direction - eye_direction = (eye_right[0] - eye_left[0], eye_right[1] - eye_left[1]) - # calc rotation angle in radians - rotation = -math.atan2(float(eye_direction[1]),float(eye_direction[0])) - # distance between them - dist = Distance(eye_left, eye_right) - # calculate the reference eye-width - reference = dest_sz[0] - 2.0*offset_h - # scale factor - scale = float(dist)/float(reference) - # rotate original around the left eye - image = ScaleRotateTranslate(image, center=eye_left, angle=rotation) - # crop the rotated image - crop_xy = (eye_left[0] - scale*offset_h, eye_left[1] - scale*offset_v) - crop_size = (dest_sz[0]*scale, dest_sz[1]*scale) - image = image.crop((int(crop_xy[0]), int(crop_xy[1]), int(crop_xy[0]+crop_size[0]), int(crop_xy[1]+crop_size[1]))) - # resize it - image = image.resize(dest_sz, Image.ANTIALIAS) - return image - -if __name__ == "__main__": - image = Image.open("arnie.jpg") - CropFace(image, eye_left=(252,364), eye_right=(420,366), offset_pct=(0.1,0.1), dest_sz=(200,200)).save("arnie_10_10_200_200.jpg") - CropFace(image, eye_left=(252,364), eye_right=(420,366), offset_pct=(0.2,0.2), dest_sz=(200,200)).save("arnie_20_20_200_200.jpg") - CropFace(image, eye_left=(252,364), eye_right=(420,366), offset_pct=(0.3,0.3), dest_sz=(200,200)).save("arnie_30_30_200_200.jpg") - CropFace(image, eye_left=(252,364), eye_right=(420,366), offset_pct=(0.2,0.2)).save("arnie_20_20_70_70.jpg") diff --git a/modules/contrib/doc/facerec/src/facerec_demo.cpp b/modules/contrib/doc/facerec/src/facerec_demo.cpp deleted file mode 100644 index e3d82b6f2..000000000 --- a/modules/contrib/doc/facerec/src/facerec_demo.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 2011. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * 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 name of the organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ - -#include "opencv2/core.hpp" -#include "opencv2/contrib.hpp" -#include "opencv2/highgui.hpp" - - -#include -#include -#include - -using namespace cv; -using namespace std; - -static Mat norm_0_255(InputArray _src) { - Mat src = _src.getMat(); - // Create and return normalized image: - Mat dst; - switch(src.channels()) { - case 1: - cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1); - break; - case 3: - cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC3); - break; - default: - src.copyTo(dst); - break; - } - return dst; -} - -static void read_csv(const string& filename, vector& images, vector& labels, char separator = ';') { - std::ifstream file(filename.c_str(), ifstream::in); - if (!file) { - string error_message = "No valid input file was given, please check the given filename."; - CV_Error(CV_StsBadArg, error_message); - } - string line, path, classlabel; - while (getline(file, line)) { - stringstream liness(line); - getline(liness, path, separator); - getline(liness, classlabel); - if(!path.empty() && !classlabel.empty()) { - images.push_back(imread(path, 0)); - labels.push_back(atoi(classlabel.c_str())); - } - } -} - -int main(int argc, const char *argv[]) { - // Check for valid command line arguments, print usage - // if no arguments were given. - if (argc != 2) { - cout << "usage: " << argv[0] << " " << endl; - exit(1); - } - // Get the path to your CSV. - string fn_csv = string(argv[1]); - // These vectors hold the images and corresponding labels. - vector images; - vector labels; - // Read in the data. This can fail if no valid - // input filename is given. - try { - read_csv(fn_csv, images, labels); - } catch (cv::Exception& e) { - cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl; - // nothing more we can do - exit(1); - } - // Quit if there are not enough images for this demo. - if(images.size() <= 1) { - string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; - CV_Error(CV_StsError, error_message); - } - // Get the height from the first image. We'll need this - // later in code to reshape the images to their original - // size: - int height = images[0].rows; - // The following lines simply get the last images from - // your dataset and remove it from the vector. This is - // done, so that the training data (which we learn the - // cv::FaceRecognizer on) and the test data we test - // the model with, do not overlap. - Mat testSample = images[images.size() - 1]; - int testLabel = labels[labels.size() - 1]; - images.pop_back(); - labels.pop_back(); - // The following lines create an Eigenfaces model for - // face recognition and train it with the images and - // labels read from the given CSV file. - // This here is a full PCA, if you just want to keep - // 10 principal components (read Eigenfaces), then call - // the factory method like this: - // - // cv::createEigenFaceRecognizer(10); - // - // If you want to create a FaceRecognizer with a - // confidennce threshold, call it with: - // - // cv::createEigenFaceRecognizer(10, 123.0); - // - Ptr model = createFisherFaceRecognizer(); - model->train(images, labels); - // The following line predicts the label of a given - // test image: - int predictedLabel = model->predict(testSample); - // - // To get the confidence of a prediction call the model with: - // - // int predictedLabel = -1; - // double confidence = 0.0; - // model->predict(testSample, predictedLabel, confidence); - // - string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel); - cout << result_message << endl; - // Sometimes you'll need to get/set internal model data, - // which isn't exposed by the public cv::FaceRecognizer. - // Since each cv::FaceRecognizer is derived from a - // cv::Algorithm, you can query the data. - // - // First we'll use it to set the threshold of the FaceRecognizer - // to 0.0 without retraining the model. This can be useful if - // you are evaluating the model: - // - model->set("threshold", 0.0); - // Now the threshold of this model is set to 0.0. A prediction - // now returns -1, as it's impossible to have a distance below - // it - predictedLabel = model->predict(testSample); - cout << "Predicted class = " << predictedLabel << endl; - // Here is how to get the eigenvalues of this Eigenfaces model: - Mat eigenvalues = model->getMat("eigenvalues"); - // And we can do the same to display the Eigenvectors (read Eigenfaces): - Mat W = model->getMat("eigenvectors"); - // From this we will display the (at most) first 10 Eigenfaces: - for (int i = 0; i < min(10, W.cols); i++) { - string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at(i)); - cout << msg << endl; - // get eigenvector #i - Mat ev = W.col(i).clone(); - // Reshape to original size & normalize to [0...255] for imshow. - Mat grayscale = norm_0_255(ev.reshape(1, height)); - // Show the image & apply a Jet colormap for better sensing. - Mat cgrayscale; - applyColorMap(grayscale, cgrayscale, COLORMAP_JET); - imshow(format("%d", i), cgrayscale); - } - waitKey(0); - - return 0; -} diff --git a/modules/contrib/doc/facerec/src/facerec_eigenfaces.cpp b/modules/contrib/doc/facerec/src/facerec_eigenfaces.cpp deleted file mode 100644 index 81154677c..000000000 --- a/modules/contrib/doc/facerec/src/facerec_eigenfaces.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (c) 2011. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * 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 name of the organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ - -#include "opencv2/core.hpp" -#include "opencv2/contrib.hpp" -#include "opencv2/highgui.hpp" - -#include -#include -#include - -using namespace cv; -using namespace std; - -static Mat norm_0_255(InputArray _src) { - Mat src = _src.getMat(); - // Create and return normalized image: - Mat dst; - switch(src.channels()) { - case 1: - cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1); - break; - case 3: - cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC3); - break; - default: - src.copyTo(dst); - break; - } - return dst; -} - -static void read_csv(const string& filename, vector& images, vector& labels, char separator = ';') { - std::ifstream file(filename.c_str(), ifstream::in); - if (!file) { - string error_message = "No valid input file was given, please check the given filename."; - CV_Error(CV_StsBadArg, error_message); - } - string line, path, classlabel; - while (getline(file, line)) { - stringstream liness(line); - getline(liness, path, separator); - getline(liness, classlabel); - if(!path.empty() && !classlabel.empty()) { - images.push_back(imread(path, 0)); - labels.push_back(atoi(classlabel.c_str())); - } - } -} - -int main(int argc, const char *argv[]) { - // Check for valid command line arguments, print usage - // if no arguments were given. - if (argc < 2) { - cout << "usage: " << argv[0] << " " << endl; - exit(1); - } - string output_folder = "."; - if (argc == 3) { - output_folder = string(argv[2]); - } - // Get the path to your CSV. - string fn_csv = string(argv[1]); - // These vectors hold the images and corresponding labels. - vector images; - vector labels; - // Read in the data. This can fail if no valid - // input filename is given. - try { - read_csv(fn_csv, images, labels); - } catch (cv::Exception& e) { - cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl; - // nothing more we can do - exit(1); - } - // Quit if there are not enough images for this demo. - if(images.size() <= 1) { - string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; - CV_Error(CV_StsError, error_message); - } - // Get the height from the first image. We'll need this - // later in code to reshape the images to their original - // size: - int height = images[0].rows; - // The following lines simply get the last images from - // your dataset and remove it from the vector. This is - // done, so that the training data (which we learn the - // cv::FaceRecognizer on) and the test data we test - // the model with, do not overlap. - Mat testSample = images[images.size() - 1]; - int testLabel = labels[labels.size() - 1]; - images.pop_back(); - labels.pop_back(); - // The following lines create an Eigenfaces model for - // face recognition and train it with the images and - // labels read from the given CSV file. - // This here is a full PCA, if you just want to keep - // 10 principal components (read Eigenfaces), then call - // the factory method like this: - // - // cv::createEigenFaceRecognizer(10); - // - // If you want to create a FaceRecognizer with a - // confidence threshold (e.g. 123.0), call it with: - // - // cv::createEigenFaceRecognizer(10, 123.0); - // - // If you want to use _all_ Eigenfaces and have a threshold, - // then call the method like this: - // - // cv::createEigenFaceRecognizer(0, 123.0); - // - Ptr model = createEigenFaceRecognizer(); - model->train(images, labels); - // The following line predicts the label of a given - // test image: - int predictedLabel = model->predict(testSample); - // - // To get the confidence of a prediction call the model with: - // - // int predictedLabel = -1; - // double confidence = 0.0; - // model->predict(testSample, predictedLabel, confidence); - // - string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel); - cout << result_message << endl; - // Here is how to get the eigenvalues of this Eigenfaces model: - Mat eigenvalues = model->getMat("eigenvalues"); - // And we can do the same to display the Eigenvectors (read Eigenfaces): - Mat W = model->getMat("eigenvectors"); - // Get the sample mean from the training data - Mat mean = model->getMat("mean"); - // Display or save: - if(argc == 2) { - imshow("mean", norm_0_255(mean.reshape(1, images[0].rows))); - } else { - imwrite(format("%s/mean.png", output_folder.c_str()), norm_0_255(mean.reshape(1, images[0].rows))); - } - // Display or save the Eigenfaces: - for (int i = 0; i < min(10, W.cols); i++) { - string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at(i)); - cout << msg << endl; - // get eigenvector #i - Mat ev = W.col(i).clone(); - // Reshape to original size & normalize to [0...255] for imshow. - Mat grayscale = norm_0_255(ev.reshape(1, height)); - // Show the image & apply a Jet colormap for better sensing. - Mat cgrayscale; - applyColorMap(grayscale, cgrayscale, COLORMAP_JET); - // Display or save: - if(argc == 2) { - imshow(format("eigenface_%d", i), cgrayscale); - } else { - imwrite(format("%s/eigenface_%d.png", output_folder.c_str(), i), norm_0_255(cgrayscale)); - } - } - - // Display or save the image reconstruction at some predefined steps: - for(int num_components = min(W.cols, 10); num_components < min(W.cols, 300); num_components+=15) { - // slice the eigenvectors from the model - Mat evs = Mat(W, Range::all(), Range(0, num_components)); - Mat projection = subspaceProject(evs, mean, images[0].reshape(1,1)); - Mat reconstruction = subspaceReconstruct(evs, mean, projection); - // Normalize the result: - reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows)); - // Display or save: - if(argc == 2) { - imshow(format("eigenface_reconstruction_%d", num_components), reconstruction); - } else { - imwrite(format("%s/eigenface_reconstruction_%d.png", output_folder.c_str(), num_components), reconstruction); - } - } - // Display if we are not writing to an output folder: - if(argc == 2) { - waitKey(0); - } - return 0; -} diff --git a/modules/contrib/doc/facerec/src/facerec_fisherfaces.cpp b/modules/contrib/doc/facerec/src/facerec_fisherfaces.cpp deleted file mode 100644 index 0b2078930..000000000 --- a/modules/contrib/doc/facerec/src/facerec_fisherfaces.cpp +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (c) 2011. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * 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 name of the organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ - -#include "opencv2/core.hpp" -#include "opencv2/contrib.hpp" -#include "opencv2/highgui.hpp" - -#include -#include -#include - -using namespace cv; -using namespace std; - -static Mat norm_0_255(InputArray _src) { - Mat src = _src.getMat(); - // Create and return normalized image: - Mat dst; - switch(src.channels()) { - case 1: - cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1); - break; - case 3: - cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC3); - break; - default: - src.copyTo(dst); - break; - } - return dst; -} - -static void read_csv(const string& filename, vector& images, vector& labels, char separator = ';') { - std::ifstream file(filename.c_str(), ifstream::in); - if (!file) { - string error_message = "No valid input file was given, please check the given filename."; - CV_Error(CV_StsBadArg, error_message); - } - string line, path, classlabel; - while (getline(file, line)) { - stringstream liness(line); - getline(liness, path, separator); - getline(liness, classlabel); - if(!path.empty() && !classlabel.empty()) { - images.push_back(imread(path, 0)); - labels.push_back(atoi(classlabel.c_str())); - } - } -} - -int main(int argc, const char *argv[]) { - // Check for valid command line arguments, print usage - // if no arguments were given. - if (argc < 2) { - cout << "usage: " << argv[0] << " " << endl; - exit(1); - } - string output_folder = "."; - if (argc == 3) { - output_folder = string(argv[2]); - } - // Get the path to your CSV. - string fn_csv = string(argv[1]); - // These vectors hold the images and corresponding labels. - vector images; - vector labels; - // Read in the data. This can fail if no valid - // input filename is given. - try { - read_csv(fn_csv, images, labels); - } catch (cv::Exception& e) { - cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl; - // nothing more we can do - exit(1); - } - // Quit if there are not enough images for this demo. - if(images.size() <= 1) { - string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; - CV_Error(CV_StsError, error_message); - } - // Get the height from the first image. We'll need this - // later in code to reshape the images to their original - // size: - int height = images[0].rows; - // The following lines simply get the last images from - // your dataset and remove it from the vector. This is - // done, so that the training data (which we learn the - // cv::FaceRecognizer on) and the test data we test - // the model with, do not overlap. - Mat testSample = images[images.size() - 1]; - int testLabel = labels[labels.size() - 1]; - images.pop_back(); - labels.pop_back(); - // The following lines create an Fisherfaces model for - // face recognition and train it with the images and - // labels read from the given CSV file. - // If you just want to keep 10 Fisherfaces, then call - // the factory method like this: - // - // cv::createFisherFaceRecognizer(10); - // - // However it is not useful to discard Fisherfaces! Please - // always try to use _all_ available Fisherfaces for - // classification. - // - // If you want to create a FaceRecognizer with a - // confidence threshold (e.g. 123.0) and use _all_ - // Fisherfaces, then call it with: - // - // cv::createFisherFaceRecognizer(0, 123.0); - // - Ptr model = createFisherFaceRecognizer(); - model->train(images, labels); - // The following line predicts the label of a given - // test image: - int predictedLabel = model->predict(testSample); - // - // To get the confidence of a prediction call the model with: - // - // int predictedLabel = -1; - // double confidence = 0.0; - // model->predict(testSample, predictedLabel, confidence); - // - string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel); - cout << result_message << endl; - // Here is how to get the eigenvalues of this Eigenfaces model: - Mat eigenvalues = model->getMat("eigenvalues"); - // And we can do the same to display the Eigenvectors (read Eigenfaces): - Mat W = model->getMat("eigenvectors"); - // Get the sample mean from the training data - Mat mean = model->getMat("mean"); - // Display or save: - if(argc == 2) { - imshow("mean", norm_0_255(mean.reshape(1, images[0].rows))); - } else { - imwrite(format("%s/mean.png", output_folder.c_str()), norm_0_255(mean.reshape(1, images[0].rows))); - } - // Display or save the first, at most 16 Fisherfaces: - for (int i = 0; i < min(16, W.cols); i++) { - string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at(i)); - cout << msg << endl; - // get eigenvector #i - Mat ev = W.col(i).clone(); - // Reshape to original size & normalize to [0...255] for imshow. - Mat grayscale = norm_0_255(ev.reshape(1, height)); - // Show the image & apply a Bone colormap for better sensing. - Mat cgrayscale; - applyColorMap(grayscale, cgrayscale, COLORMAP_BONE); - // Display or save: - if(argc == 2) { - imshow(format("fisherface_%d", i), cgrayscale); - } else { - imwrite(format("%s/fisherface_%d.png", output_folder.c_str(), i), norm_0_255(cgrayscale)); - } - } - // Display or save the image reconstruction at some predefined steps: - for(int num_component = 0; num_component < min(16, W.cols); num_component++) { - // Slice the Fisherface from the model: - Mat ev = W.col(num_component); - Mat projection = subspaceProject(ev, mean, images[0].reshape(1,1)); - Mat reconstruction = subspaceReconstruct(ev, mean, projection); - // Normalize the result: - reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows)); - // Display or save: - if(argc == 2) { - imshow(format("fisherface_reconstruction_%d", num_component), reconstruction); - } else { - imwrite(format("%s/fisherface_reconstruction_%d.png", output_folder.c_str(), num_component), reconstruction); - } - } - // Display if we are not writing to an output folder: - if(argc == 2) { - waitKey(0); - } - return 0; -} diff --git a/modules/contrib/doc/facerec/src/facerec_lbph.cpp b/modules/contrib/doc/facerec/src/facerec_lbph.cpp deleted file mode 100644 index 147777794..000000000 --- a/modules/contrib/doc/facerec/src/facerec_lbph.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2011. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * 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 name of the organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ - -#include "opencv2/core.hpp" -#include "opencv2/contrib.hpp" -#include "opencv2/highgui.hpp" - -#include -#include -#include - -using namespace cv; -using namespace std; - -static void read_csv(const string& filename, vector& images, vector& labels, char separator = ';') { - std::ifstream file(filename.c_str(), ifstream::in); - if (!file) { - string error_message = "No valid input file was given, please check the given filename."; - CV_Error(CV_StsBadArg, error_message); - } - string line, path, classlabel; - while (getline(file, line)) { - stringstream liness(line); - getline(liness, path, separator); - getline(liness, classlabel); - if(!path.empty() && !classlabel.empty()) { - images.push_back(imread(path, 0)); - labels.push_back(atoi(classlabel.c_str())); - } - } -} - -int main(int argc, const char *argv[]) { - // Check for valid command line arguments, print usage - // if no arguments were given. - if (argc != 2) { - cout << "usage: " << argv[0] << " " << endl; - exit(1); - } - // Get the path to your CSV. - string fn_csv = string(argv[1]); - // These vectors hold the images and corresponding labels. - vector images; - vector labels; - // Read in the data. This can fail if no valid - // input filename is given. - try { - read_csv(fn_csv, images, labels); - } catch (cv::Exception& e) { - cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl; - // nothing more we can do - exit(1); - } - // Quit if there are not enough images for this demo. - if(images.size() <= 1) { - string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; - CV_Error(CV_StsError, error_message); - } - // Get the height from the first image. We'll need this - // later in code to reshape the images to their original - // size: - int height = images[0].rows; - // The following lines simply get the last images from - // your dataset and remove it from the vector. This is - // done, so that the training data (which we learn the - // cv::FaceRecognizer on) and the test data we test - // the model with, do not overlap. - Mat testSample = images[images.size() - 1]; - int testLabel = labels[labels.size() - 1]; - images.pop_back(); - labels.pop_back(); - // The following lines create an LBPH model for - // face recognition and train it with the images and - // labels read from the given CSV file. - // - // The LBPHFaceRecognizer uses Extended Local Binary Patterns - // (it's probably configurable with other operators at a later - // point), and has the following default values - // - // radius = 1 - // neighbors = 8 - // grid_x = 8 - // grid_y = 8 - // - // So if you want a LBPH FaceRecognizer using a radius of - // 2 and 16 neighbors, call the factory method with: - // - // cv::createLBPHFaceRecognizer(2, 16); - // - // And if you want a threshold (e.g. 123.0) call it with its default values: - // - // cv::createLBPHFaceRecognizer(1,8,8,8,123.0) - // - Ptr model = createLBPHFaceRecognizer(); - model->train(images, labels); - // The following line predicts the label of a given - // test image: - int predictedLabel = model->predict(testSample); - // - // To get the confidence of a prediction call the model with: - // - // int predictedLabel = -1; - // double confidence = 0.0; - // model->predict(testSample, predictedLabel, confidence); - // - string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel); - cout << result_message << endl; - // Sometimes you'll need to get/set internal model data, - // which isn't exposed by the public cv::FaceRecognizer. - // Since each cv::FaceRecognizer is derived from a - // cv::Algorithm, you can query the data. - // - // First we'll use it to set the threshold of the FaceRecognizer - // to 0.0 without retraining the model. This can be useful if - // you are evaluating the model: - // - model->set("threshold", 0.0); - // Now the threshold of this model is set to 0.0. A prediction - // now returns -1, as it's impossible to have a distance below - // it - predictedLabel = model->predict(testSample); - cout << "Predicted class = " << predictedLabel << endl; - // Show some informations about the model, as there's no cool - // Model data to display as in Eigenfaces/Fisherfaces. - // Due to efficiency reasons the LBP images are not stored - // within the model: - cout << "Model Information:" << endl; - string model_info = format("\tLBPH(radius=%i, neighbors=%i, grid_x=%i, grid_y=%i, threshold=%.2f)", - model->getInt("radius"), - model->getInt("neighbors"), - model->getInt("grid_x"), - model->getInt("grid_y"), - model->getDouble("threshold")); - cout << model_info << endl; - // We could get the histograms for example: - vector histograms = model->getMatVector("histograms"); - // But should I really visualize it? Probably the length is interesting: - cout << "Size of the histograms: " << histograms[0].total() << endl; - return 0; -} diff --git a/modules/contrib/doc/facerec/src/facerec_save_load.cpp b/modules/contrib/doc/facerec/src/facerec_save_load.cpp deleted file mode 100644 index 4db2d6666..000000000 --- a/modules/contrib/doc/facerec/src/facerec_save_load.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2011. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * 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 name of the organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ - -#include "opencv2/contrib.hpp" -#include "opencv2/core.hpp" -#include "opencv2/highgui.hpp" - -#include -#include -#include - -using namespace cv; -using namespace std; - -static Mat norm_0_255(InputArray _src) { - Mat src = _src.getMat(); - // Create and return normalized image: - Mat dst; - switch(src.channels()) { - case 1: - cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1); - break; - case 3: - cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC3); - break; - default: - src.copyTo(dst); - break; - } - return dst; -} - -static void read_csv(const string& filename, vector& images, vector& labels, char separator = ';') { - std::ifstream file(filename.c_str(), ifstream::in); - if (!file) { - string error_message = "No valid input file was given, please check the given filename."; - CV_Error(CV_StsBadArg, error_message); - } - string line, path, classlabel; - while (getline(file, line)) { - stringstream liness(line); - getline(liness, path, separator); - getline(liness, classlabel); - if(!path.empty() && !classlabel.empty()) { - images.push_back(imread(path, 0)); - labels.push_back(atoi(classlabel.c_str())); - } - } -} - -int main(int argc, const char *argv[]) { - // Check for valid command line arguments, print usage - // if no arguments were given. - if (argc < 2) { - cout << "usage: " << argv[0] << " " << endl; - exit(1); - } - string output_folder = "."; - if (argc == 3) { - output_folder = string(argv[2]); - } - // Get the path to your CSV. - string fn_csv = string(argv[1]); - // These vectors hold the images and corresponding labels. - vector images; - vector labels; - // Read in the data. This can fail if no valid - // input filename is given. - try { - read_csv(fn_csv, images, labels); - } catch (cv::Exception& e) { - cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl; - // nothing more we can do - exit(1); - } - // Quit if there are not enough images for this demo. - if(images.size() <= 1) { - string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; - CV_Error(CV_StsError, error_message); - } - // Get the height from the first image. We'll need this - // later in code to reshape the images to their original - // size: - int height = images[0].rows; - // The following lines simply get the last images from - // your dataset and remove it from the vector. This is - // done, so that the training data (which we learn the - // cv::FaceRecognizer on) and the test data we test - // the model with, do not overlap. - Mat testSample = images[images.size() - 1]; - int testLabel = labels[labels.size() - 1]; - images.pop_back(); - labels.pop_back(); - // The following lines create an Eigenfaces model for - // face recognition and train it with the images and - // labels read from the given CSV file. - // This here is a full PCA, if you just want to keep - // 10 principal components (read Eigenfaces), then call - // the factory method like this: - // - // cv::createEigenFaceRecognizer(10); - // - // If you want to create a FaceRecognizer with a - // confidence threshold (e.g. 123.0), call it with: - // - // cv::createEigenFaceRecognizer(10, 123.0); - // - // If you want to use _all_ Eigenfaces and have a threshold, - // then call the method like this: - // - // cv::createEigenFaceRecognizer(0, 123.0); - // - Ptr model0 = createEigenFaceRecognizer(); - model0->train(images, labels); - // save the model to eigenfaces_at.yaml - model0->save("eigenfaces_at.yml"); - // - // - // Now create a new Eigenfaces Recognizer - // - Ptr model1 = createEigenFaceRecognizer(); - model1->load("eigenfaces_at.yml"); - // The following line predicts the label of a given - // test image: - int predictedLabel = model1->predict(testSample); - // - // To get the confidence of a prediction call the model with: - // - // int predictedLabel = -1; - // double confidence = 0.0; - // model->predict(testSample, predictedLabel, confidence); - // - string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel); - cout << result_message << endl; - // Here is how to get the eigenvalues of this Eigenfaces model: - Mat eigenvalues = model1->getMat("eigenvalues"); - // And we can do the same to display the Eigenvectors (read Eigenfaces): - Mat W = model1->getMat("eigenvectors"); - // Get the sample mean from the training data - Mat mean = model1->getMat("mean"); - // Display or save: - if(argc == 2) { - imshow("mean", norm_0_255(mean.reshape(1, images[0].rows))); - } else { - imwrite(format("%s/mean.png", output_folder.c_str()), norm_0_255(mean.reshape(1, images[0].rows))); - } - // Display or save the Eigenfaces: - for (int i = 0; i < min(10, W.cols); i++) { - string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at(i)); - cout << msg << endl; - // get eigenvector #i - Mat ev = W.col(i).clone(); - // Reshape to original size & normalize to [0...255] for imshow. - Mat grayscale = norm_0_255(ev.reshape(1, height)); - // Show the image & apply a Jet colormap for better sensing. - Mat cgrayscale; - applyColorMap(grayscale, cgrayscale, COLORMAP_JET); - // Display or save: - if(argc == 2) { - imshow(format("eigenface_%d", i), cgrayscale); - } else { - imwrite(format("%s/eigenface_%d.png", output_folder.c_str(), i), norm_0_255(cgrayscale)); - } - } - // Display or save the image reconstruction at some predefined steps: - for(int num_components = 10; num_components < 300; num_components+=15) { - // slice the eigenvectors from the model - Mat evs = Mat(W, Range::all(), Range(0, num_components)); - Mat projection = subspaceProject(evs, mean, images[0].reshape(1,1)); - Mat reconstruction = subspaceReconstruct(evs, mean, projection); - // Normalize the result: - reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows)); - // Display or save: - if(argc == 2) { - imshow(format("eigenface_reconstruction_%d", num_components), reconstruction); - } else { - imwrite(format("%s/eigenface_reconstruction_%d.png", output_folder.c_str(), num_components), reconstruction); - } - } - // Display if we are not writing to an output folder: - if(argc == 2) { - waitKey(0); - } - return 0; -} diff --git a/modules/contrib/doc/facerec/src/facerec_video.cpp b/modules/contrib/doc/facerec/src/facerec_video.cpp deleted file mode 100644 index c22e41621..000000000 --- a/modules/contrib/doc/facerec/src/facerec_video.cpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) 2011. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * 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 name of the organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ - -#include "opencv2/core.hpp" -#include "opencv2/contrib.hpp" -#include "opencv2/highgui.hpp" -#include "opencv2/imgproc.hpp" -#include "opencv2/objdetect.hpp" - -#include -#include -#include - -using namespace cv; -using namespace std; - -static void read_csv(const string& filename, vector& images, vector& labels, char separator = ';') { - std::ifstream file(filename.c_str(), ifstream::in); - if (!file) { - string error_message = "No valid input file was given, please check the given filename."; - CV_Error(CV_StsBadArg, error_message); - } - string line, path, classlabel; - while (getline(file, line)) { - stringstream liness(line); - getline(liness, path, separator); - getline(liness, classlabel); - if(!path.empty() && !classlabel.empty()) { - images.push_back(imread(path, 0)); - labels.push_back(atoi(classlabel.c_str())); - } - } -} - -int main(int argc, const char *argv[]) { - // Check for valid command line arguments, print usage - // if no arguments were given. - if (argc != 4) { - cout << "usage: " << argv[0] << " " << endl; - cout << "\t -- Path to the Haar Cascade for face detection." << endl; - cout << "\t -- Path to the CSV file with the face database." << endl; - cout << "\t -- The webcam device id to grab frames from." << endl; - exit(1); - } - // Get the path to your CSV: - string fn_haar = string(argv[1]); - string fn_csv = string(argv[2]); - int deviceId = atoi(argv[3]); - // These vectors hold the images and corresponding labels: - vector images; - vector labels; - // Read in the data (fails if no valid input filename is given, but you'll get an error message): - try { - read_csv(fn_csv, images, labels); - } catch (cv::Exception& e) { - cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl; - // nothing more we can do - exit(1); - } - // Get the height from the first image. We'll need this - // later in code to reshape the images to their original - // size AND we need to reshape incoming faces to this size: - int im_width = images[0].cols; - int im_height = images[0].rows; - // Create a FaceRecognizer and train it on the given images: - Ptr model = createFisherFaceRecognizer(); - model->train(images, labels); - // That's it for learning the Face Recognition model. You now - // need to create the classifier for the task of Face Detection. - // We are going to use the haar cascade you have specified in the - // command line arguments: - // - CascadeClassifier haar_cascade; - haar_cascade.load(fn_haar); - // Get a handle to the Video device: - VideoCapture cap(deviceId); - // Check if we can use this device at all: - if(!cap.isOpened()) { - cerr << "Capture Device ID " << deviceId << "cannot be opened." << endl; - return -1; - } - // Holds the current frame from the Video device: - Mat frame; - for(;;) { - cap >> frame; - // Clone the current frame: - Mat original = frame.clone(); - // Convert the current frame to grayscale: - Mat gray; - cvtColor(original, gray, CV_BGR2GRAY); - // Find the faces in the frame: - vector< Rect_ > faces; - haar_cascade.detectMultiScale(gray, faces); - // At this point you have the position of the faces in - // faces. Now we'll get the faces, make a prediction and - // annotate it in the video. Cool or what? - for(int i = 0; i < faces.size(); i++) { - // Process face by face: - Rect face_i = faces[i]; - // Crop the face from the image. So simple with OpenCV C++: - Mat face = gray(face_i); - // Resizing the face is necessary for Eigenfaces and Fisherfaces. You can easily - // verify this, by reading through the face recognition tutorial coming with OpenCV. - // Resizing IS NOT NEEDED for Local Binary Patterns Histograms, so preparing the - // input data really depends on the algorithm used. - // - // I strongly encourage you to play around with the algorithms. See which work best - // in your scenario, LBPH should always be a contender for robust face recognition. - // - // Since I am showing the Fisherfaces algorithm here, I also show how to resize the - // face you have just found: - Mat face_resized; - cv::resize(face, face_resized, Size(im_width, im_height), 1.0, 1.0, INTER_CUBIC); - // Now perform the prediction, see how easy that is: - int prediction = model->predict(face_resized); - // And finally write all we've found out to the original image! - // First of all draw a green rectangle around the detected face: - rectangle(original, face_i, CV_RGB(0, 255,0), 1); - // Create the text we will annotate the box with: - string box_text = format("Prediction = %d", prediction); - // Calculate the position for annotated text (make sure we don't - // put illegal values in there): - int pos_x = std::max(face_i.tl().x - 10, 0); - int pos_y = std::max(face_i.tl().y - 10, 0); - // And now put it into the image: - putText(original, box_text, Point(pos_x, pos_y), FONT_HERSHEY_PLAIN, 1.0, CV_RGB(0,255,0), 2.0); - } - // Show the result: - imshow("face_recognizer", original); - // And display it: - char key = (char) waitKey(20); - // Exit this loop on escape: - if(key == 27) - break; - } - return 0; -} diff --git a/modules/contrib/doc/facerec/tutorial/facerec_gender_classification.rst b/modules/contrib/doc/facerec/tutorial/facerec_gender_classification.rst deleted file mode 100644 index 95c821298..000000000 --- a/modules/contrib/doc/facerec/tutorial/facerec_gender_classification.rst +++ /dev/null @@ -1,233 +0,0 @@ -Gender Classification with OpenCV -================================= - -.. contents:: Table of Contents - :depth: 3 - -Introduction ------------- - -A lot of people interested in face recognition, also want to know how to perform image classification tasks like: - -* Gender Classification (Gender Detection) -* Emotion Classification (Emotion Detection) -* Glasses Classification (Glasses Detection) -* ... - -This is has become very, very easy with the new :ocv:class:`FaceRecognizer` class. In this tutorial I'll show you how to perform gender classification with OpenCV on a set of face images. You'll also learn how to align your images to enhance the recognition results. If you want to do emotion classification instead of gender classification, all you need to do is to update is your training data and the configuration you pass to the demo. - -Prerequisites --------------- - -For gender classification of faces, you'll need some images of male and female faces first. I've decided to search faces of celebrities using `Google Images `_ with the faces filter turned on (my god, they have great algorithms at `Google `_!). My database has 8 male and 5 female subjects, each with 10 images. Here are the names, if you don't know who to search: - -* Angelina Jolie -* Arnold Schwarzenegger -* Brad Pitt -* Emma Watson -* George Clooney -* Jennifer Lopez -* Johnny Depp -* Justin Timberlake -* Katy Perry -* Keanu Reeves -* Naomi Watts -* Patrick Stewart -* Tom Cruise - -Once you have acquired some images, you'll need to read them. In the demo application I have decided to read the images from a very simple CSV file. Why? Because it's the simplest platform-independent approach I can think of. However, if you know a simpler solution please ping me about it. Basically all the CSV file needs to contain are lines composed of a ``filename`` followed by a ``;`` followed by the ``label`` (as *integer number*), making up a line like this: - -.. code-block:: none - - /path/to/image.ext;0 - -Let's dissect the line. ``/path/to/image.ext`` is the path to an image, probably something like this if you are in Windows: ``C:/faces/person0/image0.jpg``. Then there is the separator ``;`` and finally we assign a label ``0`` to the image. Think of the label as the subject (the person, the gender or whatever comes to your mind). In the gender classification scenario, the label is the gender the person has. I'll give the label ``0`` to *male* persons and the label ``1`` is for *female* subjects. So my CSV file looks like this: - -.. code-block:: none - - /home/philipp/facerec/data/gender/male/keanu_reeves/keanu_reeves_01.jpg;0 - /home/philipp/facerec/data/gender/male/keanu_reeves/keanu_reeves_02.jpg;0 - /home/philipp/facerec/data/gender/male/keanu_reeves/keanu_reeves_03.jpg;0 - ... - /home/philipp/facerec/data/gender/female/katy_perry/katy_perry_01.jpg;1 - /home/philipp/facerec/data/gender/female/katy_perry/katy_perry_02.jpg;1 - /home/philipp/facerec/data/gender/female/katy_perry/katy_perry_03.jpg;1 - ... - /home/philipp/facerec/data/gender/male/brad_pitt/brad_pitt_01.jpg;0 - /home/philipp/facerec/data/gender/male/brad_pitt/brad_pitt_02.jpg;0 - /home/philipp/facerec/data/gender/male/brad_pitt/brad_pitt_03.jpg;0 - ... - /home/philipp/facerec/data/gender/female/emma_watson/emma_watson_08.jpg;1 - /home/philipp/facerec/data/gender/female/emma_watson/emma_watson_02.jpg;1 - /home/philipp/facerec/data/gender/female/emma_watson/emma_watson_03.jpg;1 - -All images for this example were chosen to have a frontal face perspective. They have been cropped, scaled and rotated to be aligned at the eyes, just like this set of George Clooney images: - -.. image:: ../img/tutorial/gender_classification/clooney_set.png - :align: center - -You really don't want to create the CSV file by hand. And you really don't want scale, rotate & translate the images manually. I have prepared you two Python scripts ``create_csv.py`` and ``crop_face.py``, you can find them in the ``src`` folder coming with this documentation. You'll see how to use them in the :ref:`appendixfgc`. - -Fisherfaces for Gender Classification --------------------------------------- - -If you want to decide whether a person is *male* or *female*, you have to learn the discriminative features of both classes. The Eigenfaces method is based on the Principal Component Analysis, which is an unsupervised statistical model and not suitable for this task. Please see the Face Recognition tutorial for insights into the algorithms. The Fisherfaces instead yields a class-specific linear projection, so it is much better suited for the gender classification task. `http://www.bytefish.de/blog/gender_classification `_ shows the recognition rate of the Fisherfaces method for gender classification. - -The Fisherfaces method achieves a 98% recognition rate in a subject-independent cross-validation. A subject-independent cross-validation means *images of the person under test are never used for learning the model*. And could you believe it: you can simply use the facerec_fisherfaces demo, that's inlcuded in OpenCV. - -Fisherfaces in OpenCV ---------------------- - -The source code for this demo application is also available in the ``src`` folder coming with this documentation: - -* :download:`src/facerec_fisherfaces.cpp <../src/facerec_fisherfaces.cpp>` - -.. literalinclude:: ../src/facerec_fisherfaces.cpp - :language: cpp - :linenos: - -Running the Demo ----------------- - -If you are in Windows, then simply start the demo by running (from command line): - -.. code-block:: none - - facerec_fisherfaces.exe C:/path/to/your/csv.ext - -If you are in Linux, then simply start the demo by running: - -.. code-block:: none - - ./facerec_fisherfaces /path/to/your/csv.ext - -If you don't want to display the images, but save them, then pass the desired path to the demo. It works like this in Windows: - -.. code-block:: none - - facerec_fisherfaces.exe C:/path/to/your/csv.ext C:/path/to/store/results/at - -And in Linux: - -.. code-block:: none - - ./facerec_fisherfaces /path/to/your/csv.ext /path/to/store/results/at - -Results -------- - -If you run the program with your CSV file as parameter, you'll see the Fisherface that separates between male and female images. I've decided to apply a Jet colormap in this demo, so you can see which features the method identifies: - -.. image:: ../img/tutorial/gender_classification/fisherface_0.png - -The demo also shows the average face of the male and female training images you have passed: - -.. image:: ../img/tutorial/gender_classification/mean.png - -Moreover it the demo should yield the prediction for the correct gender: - -.. code-block:: none - - Predicted class = 1 / Actual class = 1. - -And for advanced users I have also shown the Eigenvalue for the Fisherface: - -.. code-block:: none - - Eigenvalue #0 = 152.49493 - -And the Fisherfaces reconstruction: - -.. image:: ../img/tutorial/gender_classification/fisherface_reconstruction_0.png - -I hope this gives you an idea how to approach gender classification and the other image classification tasks. - -.. _appendixfgc: - -Appendix --------- - -Creating the CSV File -+++++++++++++++++++++ - -You don't really want to create the CSV file by hand. I have prepared you a little Python script ``create_csv.py`` (you find it at ``/src/create_csv.py`` coming with this tutorial) that automatically creates you a CSV file. If you have your images in hierarchie like this (``/basepath//``): - -.. code-block:: none - - philipp@mango:~/facerec/data/at$ tree - . - |-- s1 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - |-- s2 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - ... - |-- s40 - | |-- 1.pgm - | |-- ... - | |-- 10.pgm - - -Then simply call ``create_csv.py`` with the path to the folder, just like this and you could save the output: - -.. code-block:: none - - philipp@mango:~/facerec/data$ python create_csv.py - at/s13/2.pgm;0 - at/s13/7.pgm;0 - at/s13/6.pgm;0 - at/s13/9.pgm;0 - at/s13/5.pgm;0 - at/s13/3.pgm;0 - at/s13/4.pgm;0 - at/s13/10.pgm;0 - at/s13/8.pgm;0 - at/s13/1.pgm;0 - at/s17/2.pgm;1 - at/s17/7.pgm;1 - at/s17/6.pgm;1 - at/s17/9.pgm;1 - at/s17/5.pgm;1 - at/s17/3.pgm;1 - [...] - -Here is the script, if you can't find it: - -.. literalinclude:: ../src/create_csv.py - :language: python - :linenos: - -Aligning Face Images -++++++++++++++++++++ - -An accurate alignment of your image data is especially important in tasks like emotion detection, were you need as much detail as possible. Believe me... You don't want to do this by hand. So I've prepared you a tiny Python script. The code is really easy to use. To scale, rotate and crop the face image you just need to call *CropFace(image, eye_left, eye_right, offset_pct, dest_sz)*, where: - -* *eye_left* is the position of the left eye -* *eye_right* is the position of the right eye -* *offset_pct* is the percent of the image you want to keep next to the eyes (horizontal, vertical direction) -* *dest_sz* is the size of the output image - -If you are using the same *offset_pct* and *dest_sz* for your images, they are all aligned at the eyes. - -.. literalinclude:: ../src/crop_face.py - :language: python - :linenos: - -Imagine we are given `this photo of Arnold Schwarzenegger `_, which is under a Public Domain license. The (x,y)-position of the eyes is approximately *(252,364)* for the left and *(420,366)* for the right eye. Now you only need to define the horizontal offset, vertical offset and the size your scaled, rotated & cropped face should have. - -Here are some examples: - -+---------------------------------+----------------------------------------------------------------------------+ -| Configuration | Cropped, Scaled, Rotated Face | -+=================================+============================================================================+ -| 0.1 (10%), 0.1 (10%), (200,200) | .. image:: ../img/tutorial/gender_classification/arnie_10_10_200_200.jpg | -+---------------------------------+----------------------------------------------------------------------------+ -| 0.2 (20%), 0.2 (20%), (200,200) | .. image:: ../img/tutorial/gender_classification/arnie_20_20_200_200.jpg | -+---------------------------------+----------------------------------------------------------------------------+ -| 0.3 (30%), 0.3 (30%), (200,200) | .. image:: ../img/tutorial/gender_classification/arnie_30_30_200_200.jpg | -+---------------------------------+----------------------------------------------------------------------------+ -| 0.2 (20%), 0.2 (20%), (70,70) | .. image:: ../img/tutorial/gender_classification/arnie_20_20_70_70.jpg | -+---------------------------------+----------------------------------------------------------------------------+ diff --git a/modules/contrib/doc/facerec/tutorial/facerec_save_load.rst b/modules/contrib/doc/facerec/tutorial/facerec_save_load.rst deleted file mode 100644 index 2d0b65dff..000000000 --- a/modules/contrib/doc/facerec/tutorial/facerec_save_load.rst +++ /dev/null @@ -1,46 +0,0 @@ -Saving and Loading a FaceRecognizer -=================================== - -Introduction ------------- - -Saving and loading a :ocv:class:`FaceRecognizer` is very important. Training a FaceRecognizer can be a very time-intense task, plus it's often impossible to ship the whole face database to the user of your product. The task of saving and loading a FaceRecognizer is easy with :ocv:class:`FaceRecognizer`. You only have to call :ocv:func:`FaceRecognizer::load` for loading and :ocv:func:`FaceRecognizer::save` for saving a :ocv:class:`FaceRecognizer`. - -I'll adapt the Eigenfaces example from the :doc:`../facerec_tutorial`: Imagine we want to learn the Eigenfaces of the `AT&T Facedatabase `_, store the model to a YAML file and then load it again. - -From the loaded model, we'll get a prediction, show the mean, Eigenfaces and the image reconstruction. - -Using FaceRecognizer::save and FaceRecognizer::load ------------------------------------------------------ - -The source code for this demo application is also available in the ``src`` folder coming with this documentation: - -* :download:`src/facerec_save_load.cpp <../src/facerec_save_load.cpp>` - -.. literalinclude:: ../src/facerec_save_load.cpp - :language: cpp - :linenos: - -Results -------- - -``eigenfaces_at.yml`` then contains the model state, we'll simply look at the first 10 lines with ``head eigenfaces_at.yml``: - -.. code-block:: none - - philipp@mango:~/github/libfacerec-build$ head eigenfaces_at.yml - %YAML:1.0 - num_components: 399 - mean: !!opencv-matrix - rows: 1 - cols: 10304 - dt: d - data: [ 8.5558897243107765e+01, 8.5511278195488714e+01, - 8.5854636591478695e+01, 8.5796992481203006e+01, - 8.5952380952380949e+01, 8.6162907268170414e+01, - 8.6082706766917283e+01, 8.5776942355889716e+01, - -And here is the Reconstruction, which is the same as the original: - -.. image:: ../img/eigenface_reconstruction_opencv.png - :align: center diff --git a/modules/contrib/doc/facerec/tutorial/facerec_video_recognition.rst b/modules/contrib/doc/facerec/tutorial/facerec_video_recognition.rst deleted file mode 100644 index 76e76eebe..000000000 --- a/modules/contrib/doc/facerec/tutorial/facerec_video_recognition.rst +++ /dev/null @@ -1,207 +0,0 @@ -Face Recognition in Videos with OpenCV -======================================= - -.. contents:: Table of Contents - :depth: 3 - -Introduction ------------- - -Whenever you hear the term *face recognition*, you instantly think of surveillance in videos. So performing face recognition in videos (e.g. webcam) is one of the most requested features I have got. I have heard your cries, so here it is. An application, that shows you how to do face recognition in videos! For the face detection part we'll use the awesome :ocv:class:`CascadeClassifier` and we'll use :ocv:class:`FaceRecognizer` for face recognition. This example uses the Fisherfaces method for face recognition, because it is robust against large changes in illumination. - -Here is what the final application looks like. As you can see I am only writing the id of the recognized person above the detected face (by the way this id is Arnold Schwarzenegger for my data set): - -.. image:: ../img/tutorial/facerec_video/facerec_video.png - :align: center - :scale: 70% - -This demo is a basis for your research and it shows you how to implement face recognition in videos. You probably want to extend the application and make it more sophisticated: You could combine the id with the name, then show the confidence of the prediction, recognize the emotion... and and and. But before you send mails, asking what these Haar-Cascade thing is or what a CSV is: Make sure you have read the entire tutorial. It's all explained in here. If you just want to scroll down to the code, please note: - -* The available Haar-Cascades for face detection are located in the ``data`` folder of your OpenCV installation! One of the available Haar-Cascades for face detection is for example ``/path/to/opencv/data/haarcascades/haarcascade_frontalface_default.xml``. - -I encourage you to experiment with the application. Play around with the available :ocv:class:`FaceRecognizer` implementations, try the available cascades in OpenCV and see if you can improve your results! - -Prerequisites --------------- - -You want to do face recognition, so you need some face images to learn a :ocv:class:`FaceRecognizer` on. I have decided to reuse the images from the gender classification example: :doc:`facerec_gender_classification`. - -I have the following celebrities in my training data set: - -* Angelina Jolie -* Arnold Schwarzenegger -* Brad Pitt -* George Clooney -* Johnny Depp -* Justin Timberlake -* Katy Perry -* Keanu Reeves -* Patrick Stewart -* Tom Cruise - -In the demo I have decided to read the images from a very simple CSV file. Why? Because it's the simplest platform-independent approach I can think of. However, if you know a simpler solution please ping me about it. Basically all the CSV file needs to contain are lines composed of a ``filename`` followed by a ``;`` followed by the ``label`` (as *integer number*), making up a line like this: - -.. code-block:: none - - /path/to/image.ext;0 - -Let's dissect the line. ``/path/to/image.ext`` is the path to an image, probably something like this if you are in Windows: ``C:/faces/person0/image0.jpg``. Then there is the separator ``;`` and finally we assign a label ``0`` to the image. Think of the label as the subject (the person, the gender or whatever comes to your mind). In the face recognition scenario, the label is the person this image belongs to. In the gender classification scenario, the label is the gender the person has. So my CSV file looks like this: - -.. code-block:: none - - /home/philipp/facerec/data/c/keanu_reeves/keanu_reeves_01.jpg;0 - /home/philipp/facerec/data/c/keanu_reeves/keanu_reeves_02.jpg;0 - /home/philipp/facerec/data/c/keanu_reeves/keanu_reeves_03.jpg;0 - ... - /home/philipp/facerec/data/c/katy_perry/katy_perry_01.jpg;1 - /home/philipp/facerec/data/c/katy_perry/katy_perry_02.jpg;1 - /home/philipp/facerec/data/c/katy_perry/katy_perry_03.jpg;1 - ... - /home/philipp/facerec/data/c/brad_pitt/brad_pitt_01.jpg;2 - /home/philipp/facerec/data/c/brad_pitt/brad_pitt_02.jpg;2 - /home/philipp/facerec/data/c/brad_pitt/brad_pitt_03.jpg;2 - ... - /home/philipp/facerec/data/c1/crop_arnold_schwarzenegger/crop_08.jpg;6 - /home/philipp/facerec/data/c1/crop_arnold_schwarzenegger/crop_05.jpg;6 - /home/philipp/facerec/data/c1/crop_arnold_schwarzenegger/crop_02.jpg;6 - /home/philipp/facerec/data/c1/crop_arnold_schwarzenegger/crop_03.jpg;6 - -All images for this example were chosen to have a frontal face perspective. They have been cropped, scaled and rotated to be aligned at the eyes, just like this set of George Clooney images: - -.. image:: ../img/tutorial/gender_classification/clooney_set.png - :align: center - -Face Recongition from Videos ------------------------------ - -The source code for the demo is available in the ``src`` folder coming with this documentation: - -* :download:`src/facerec_video.cpp <../src/facerec_video.cpp>` - -This demo uses the :ocv:class:`CascadeClassifier`: - -.. literalinclude:: ../src/facerec_video.cpp - :language: cpp - :linenos: - -Running the Demo ----------------- - -You'll need: - -* The path to a valid Haar-Cascade for detecting a face with a :ocv:class:`CascadeClassifier`. -* The path to a valid CSV File for learning a :ocv:class:`FaceRecognizer`. -* A webcam and its device id (you don't know the device id? Simply start from 0 on and see what happens). - -If you are in Windows, then simply start the demo by running (from command line): - -.. code-block:: none - - facerec_video.exe