1. Top--------------------------------------------
# The name of our project is "MOCAPY". CMakeLists files in this project can
# refer to the root source directory of the project as ${MOCAPY_SOURCE_DIR} and
# to the root binary directory of the project as ${MOCAPY_BINARY_DIR}.
cmake_minimum_required (VERSION 2.6.2)
project (MOCAPY C CXX Fortran)
# version number
set(MOCAPY_VERSION 0.1)
# Recurse into the "src" and "examples" subdirectories. This does not actually
# cause another cmake executable to run. The same process will walk through
# the project's entire directory structure.
add_subdirectory (src)
add_subdirectory (examples)
add_subdirectory (tests)
# settings for making distribution package
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Mocapy is a Dynamic Bayesian Network toolkit")
set(CPACK_PACKAGE_VENDOR "Thomas Hamelryck and Martin Paluszewski")
#set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/README)
set(CPACK_GENERATOR TGZ)
set(
CPACK_SOURCE_PACKAGE_FILE_NAME
"Mocapy-${MOCAPY_VERSION}"
CACHE INTERNAL "tarball basename"
)
set(CPACK_SOURCE_GENERATOR TGZ)
include(CPack)
2 . Subdiretory ----------------------------------------------------------
2.1 src---------------------------------------------
SET(BUILD_RELEASE OFF)
SET(BUILD_DEBUG ON)
SET(BUILD_PROFILE ON)
SET(BUILD_DUMMYRANDOM OFF)
SET(Boost_USE_MULTITHREAD OFF)
FIND_PACKAGE(Boost 1.39)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
SET(Mocapy_src
utils/LogFactorial.cpp
multinomial/MultinomialDensities.cpp
multinomial/MultinomialDensity.cpp
multinomial/MultinomialESS.cpp
dirichlet/DirichletDensities.cpp
dirichlet/DirichletDensity.cpp
dirichlet/DirichletESS.cpp
inference/abstractinfengine.cpp
framework/dbn.cpp
discrete/discretedensities.cpp
discrete/discreteess.cpp
discrete/discretepriors.cpp
framework/emengine.cpp
framework/essbase.cpp
inference/detail/forwardbacktracker.cpp
inference/detail/generalinfenginemm.cpp
gaussian/gaussiandensities.cpp
gaussian/gaussianess.cpp
gaussian/shrinkage/Shrinkage.cpp
gaussian/shrinkage/ShrinkageHelpers.cpp
inference/gibbsrandom.cpp
inference/fwbtrandom.cpp
inference/infenginemm.cpp
inference/infenginehmm.cpp
inference/infenginemcmc.cpp
inference/mcmc.cpp
inference/moreabstractinfengine.cpp
gaussian/multigauss.cpp
framework/node.cpp
framework/nodefactory.cpp
framework/parentmap.cpp
poisson/poissondensities.cpp
poisson/poissoness.cpp
poisson/poissonsample.cpp
bippo/bippodensities.cpp
bippo/bippoess.cpp
bippo/bippo.cpp
utils/random_data.cpp
utils/randomgen.cpp
inference/sampleinfengine.cpp
utils/utils.cpp
vonmises/vonmises.cpp
vonmises2d/vonmises2d.cpp
vonmises2d/vonmises2ddensities.cpp
vonmises2d/vonmises2dess.cpp
vonmises/vonmisesdensities.cpp
vonmises/vonmisesess.cpp
kent/kentdensities.cpp
kent/kentess.cpp
)
SET(Integrate_src
utils/netlib/integrate.cpp
utils/netlib/integrate.h
utils/netlib/slatec/d1mach.f
utils/netlib/slatec/d9lgmc.f
utils/netlib/slatec/dcsevl.f
utils/netlib/slatec/dgamlm.f
utils/netlib/slatec/dgamma.f
utils/netlib/slatec/dqags.f
utils/netlib/slatec/dqagse.f
utils/netlib/slatec/dqelg.f
utils/netlib/slatec/dqk21.f
utils/netlib/slatec/dqpsrt.f
utils/netlib/slatec/fdump.f
utils/netlib/slatec/i1mach.f
utils/netlib/slatec/initds.f
utils/netlib/slatec/j4save.f
utils/netlib/slatec/xercnt.f
utils/netlib/slatec/xerhlt.f
utils/netlib/slatec/xermsg.f
utils/netlib/slatec/xerprn.f
utils/netlib/slatec/xersve.f
utils/netlib/slatec/xgetua.f
)
SET(Functions_src
utils/vector_nD.h
utils/optimize.h
utils/netlib/cephes/chbevl.c
utils/netlib/cephes/const.c
utils/netlib/cephes/gamma.c
utils/netlib/cephes/zeta.c
utils/netlib/cephes/i0.c
utils/netlib/cephes/i1.c
utils/netlib/cephes/isnan.c
utils/netlib/cephes/mconf.h
utils/netlib/cephes/mtherr.c
utils/netlib/cephes/polevl.c
)
SET(LIBRARY_OUTPUT_PATH ${MOCAPY_SOURCE_DIR}/libs)
# build release library
IF(BUILD_RELEASE)
add_library (Mocapy STATIC
${Mocapy_src}
${Integrate_src}
${Functions_src}
)
SET_TARGET_PROPERTIES(Mocapy PROPERTIES COMPILE_FLAGS " -O3 -fPIC -c -fmessage-length=0 -I${MOCAPY_SOURCE_DIR}/src")
ENDIF(BUILD_RELEASE)
#IF(BUILD_RELEASE)
#add_library (Mocapy SHARED
# ${Mocapy_src}
# ${Integrate_src}
# ${Functions_src}
# )
#SET_TARGET_PROPERTIES(Mocapy PROPERTIES COMPILE_FLAGS " -O3 -fPIC -c -fmessage-length=0 -I${MOCAPY_SOURCE_DIR}/src")
#ENDIF(BUILD_RELEASE)
IF(BUILD_DEBUG)
add_library (MocapyD
${Mocapy_src}
${Integrate_src}
${Functions_src}
)
#SET_TARGET_PROPERTIES(MocapyD PROPERTIES COMPILE_FLAGS "-O0 -fPIC -g -Wall -c -fmessage-length=0")
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g3 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
SET_TARGET_PROPERTIES(MocapyD PROPERTIES COMPILE_FLAGS "-O0 -fPIC -ggdb -Wall -c -fmessage-length=0")
ENDIF(BUILD_DEBUG)
IF(BUILD_PROFILE)
add_library (MocapyP
${Mocapy_src}
${Integrate_src}
${Functions_src}
)
SET_TARGET_PROPERTIES(MocapyP PROPERTIES COMPILE_FLAGS "-pg -fPIC -O3 -Wall -c -fmessage-length=0")
ENDIF(BUILD_PROFILE)
IF(BUILD_DUMMYRANDOM)
add_library (MocapyDR
${Mocapy_src}
${Integrate_src}
${Functions_src}
)
SET_TARGET_PROPERTIES(MocapyDR PROPERTIES COMPILE_FLAGS "-DRANDDUMMY -O3 -fPIC -Wall -c -fmessage-length=0")
ENDIF(BUILD_DUMMYRANDOM)
# install commands
# INSTALL(TARGETS Mocapy
# LIBRARY DESTINATION lib
# ARCHIVE DESTINATION lib
# )
2.2 example-----------------------------------------
SET(BUILD_RELEASE ON)
SET(BUILD_DEBUG ON)
SET(BUILD_PROFILE ON)
SET(BUILD_DUMMYRANDOM OFF)
SET(CMAKE_VERBOSE_MAKEFILE OFF)
SET(Boost_USE_STATIC_LIBS ON)
FIND_PACKAGE(Boost COMPONENTS serialization program_options thread REQUIRED)
FIND_LIBRARY(PTHREAD pthread)
# Make sure the compiler can find include files from mocapy.
include_directories (${MOCAPY_SOURCE_DIR}/src)
# find lapack
FIND_LIBRARY(LAPACK_LIBRARY NAMES lapack )
IF(NOT LAPACK_LIBRARY)
message("error: could not find lapack library")
ENDIF(NOT LAPACK_LIBRARY)
# FFLAGS depend on the compiler
get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)
if (Fortran_COMPILER_NAME STREQUAL "gfortran")
# gfortran
set (CMAKE_FLIB "gfortran")
elseif (Fortran_COMPILER_NAME STREQUAL "g77")
# g77
set (CMAKE_FLIB "g2c")
else (Fortran_COMPILER_NAME STREQUAL "gfortran")
# message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER})
# message ("Fortran compiler: " ${Fortran_COMPILER_NAME})
# message ("No optimized Fortran link flags are known, we just try -lgfortran")
set (CMAKE_FLIB "gfortran")
endif (Fortran_COMPILER_NAME STREQUAL "gfortran")
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
IF(BUILD_RELEASE)
SET(CMAKE_CXX_FLAGS "-O3 -fPIC -Wall -fmessage-length=0")
SET(MOCAPYLIB Mocapy CACHE STRING "Mocapy library used when linking executables")
ENDIF(BUILD_RELEASE)
IF(BUILD_DEBUG)
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g3 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
#SET(CMAKE_CXX_FLAGS "-g -O0 -Wall -fmessage-length=0")
SET(MOCAPYLIB MocapyD CACHE STRING "Mocapy library used when linking executables")
ENDIF(BUILD_DEBUG)
IF(BUILD_PROFILE)
SET(CMAKE_CXX_FLAGS "-pg -O3 -Wall -fmessage-length=0")
SET(MOCAPYLIB MocapyP CACHE STRING "Mocapy library used when linking executables")
ENDIF(BUILD_PROFILE)
IF(BUILD_DUMMYRANDOM)
SET(CMAKE_CXX_FLAGS "-DRANDDUMMY -O3 -Wall -fmessage-length=0")
SET(MOCAPYLIB MocapyDR CACHE STRING "Mocapy library used when linking executables")
ENDIF(BUILD_DUMMYRANDOM)
SET(PROGS mdarray hmm_bippo hmm_factorial hmm_simple hmm_discrete discrete_hmm_with_prior hmm_gauss hmm_gauss_1d hmm_multinomial hmm_dirichlet hmm_poisson hmm_vonmises infenginehmm_example infenginemm_example hmm_torus hmm_kent)
SET(PROGS_BOOST_OPTIONS_THREADS mlr-uni)
FOREACH(p ${PROGS})
add_executable(${p} ${p}.cpp)
target_link_libraries (${p} ${MOCAPYLIB} ${Boost_SYSTEM_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${LAPACK_LIBRARY} ${CMAKE_FLIB})
ENDFOREACH(p)
FOREACH(p ${PROGS_BOOST_OPTIONS_THREADS})
add_executable(${p} ${p}.cpp)
target_link_libraries (${p} ${MOCAPYLIB} ${Boost_SYSTEM_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_THREAD_LIBRARY} ${PTHREAD} ${LAPACK_LIBRARY} ${CMAKE_FLIB})
ENDFOREACH(p)
# copy data directory
exec_program(
${CMAKE_COMMAND}
ARGS
"-E create_symlink \"${CMAKE_CURRENT_SOURCE_DIR}/data\" \"${CMAKE_CURRENT_BINARY_DIR}/data\""
)
#exec_program(
# ${CMAKE_COMMAND}
# ARGS
# "-E copy_directory \"${CMAKE_CURRENT_SOURCE_DIR}/data\" \"${CMAKE_CURRENT_BINARY_DIR}\""
# )
2.3 tests-------------------------------------------
SET(BUILD_RELEASE OFF)
SET(BUILD_DEBUG ON)
SET(BUILD_PROFILE ON)
SET(BUILD_DUMMYRANDOM OFF)
SET(Boost_ADDITIONAL_VERSIONS "1.39" "1.39.0" "1.38" "1.38.0" "1.37" "1.37.0" "1.36" "1.36.0" )
SET(Boost_USE_STATIC_LIBS ON)
FIND_PACKAGE(Boost COMPONENTS serialization 1.39)
IF(NOT BOOST_serialization_FOUND )
FIND_PACKAGE(Boost COMPONENTS serialization 1.39.0)
ENDIF(NOT BOOST_serialization_FOUND)
IF(NOT BOOST_serialization_FOUND )
FIND_PACKAGE(Boost COMPONENTS serialization 1.38)
ENDIF(NOT BOOST_serialization_FOUND)
IF(NOT BOOST_serialization_FOUND )
FIND_PACKAGE(Boost COMPONENTS serialization 1.38.0)
ENDIF(NOT BOOST_serialization_FOUND)
IF(NOT BOOST_serialization_FOUND )
FIND_PACKAGE(Boost 1.37 COMPONENTS serialization )
ENDIF(NOT BOOST_serialization_FOUND)
IF(NOT BOOST_serialization_FOUND )
FIND_PACKAGE(Boost COMPONENTS serialization 1.37.0)
ENDIF(NOT BOOST_serialization_FOUND)
IF(NOT BOOST_serialization_FOUND )
FIND_PACKAGE(Boost 1.36 COMPONENTS serialization )
ENDIF(NOT BOOST_serialization_FOUND)
IF(NOT BOOST_serialization_FOUND )
FIND_PACKAGE(Boost COMPONENTS serialization 1.36.0)
ENDIF(NOT BOOST_serialization_FOUND)
# Make sure the compiler can find include files from mocapy.
include_directories (${MOCAPY_SOURCE_DIR}/src)
# find lapack
FIND_LIBRARY(LAPACK_LIBRARY NAMES lapack )
IF(NOT LAPACK_LIBRARY)
message("error: could not find lapack library")
ENDIF(NOT LAPACK_LIBRARY)
# FFLAGS depend on the compiler
get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)
if (Fortran_COMPILER_NAME STREQUAL "gfortran")
# gfortran
set (CMAKE_FLIB "gfortran")
elseif (Fortran_COMPILER_NAME STREQUAL "g77")
# g77
set (CMAKE_FLIB "g2c")
else (Fortran_COMPILER_NAME STREQUAL "gfortran")
# message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER})
# message ("Fortran compiler: " ${Fortran_COMPILER_NAME})
# message ("No optimized Fortran link flags are known, we just try -lgfortran")
set (CMAKE_FLIB "gfortran")
endif (Fortran_COMPILER_NAME STREQUAL "gfortran")
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS} ${MOCAPY_SOURCE_DIR}/src)
IF(BUILD_RELEASE)
SET(CMAKE_CXX_FLAGS "-lboost_system -lboost_filesystem -O3 -Wall -fmessage-length=0")
SET(MOCAPYLIB Mocapy CACHE STRING "Mocapy library used when linking executables")
ENDIF(BUILD_RELEASE)
IF(BUILD_DEBUG)
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g3 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
#SET(CMAKE_CXX_FLAGS "-g -O0 -Wall -fmessage-length=0")
SET(MOCAPYLIB MocapyD CACHE STRING "Mocapy library used when linking executables")
ENDIF(BUILD_DEBUG)
IF(BUILD_PROFILE)
SET(CMAKE_CXX_FLAGS "-pg -O3 -Wall -fmessage-length=0")
SET(MOCAPYLIB MocapyP CACHE STRING "Mocapy library used when linking executables")
ENDIF(BUILD_PROFILE)
IF(BUILD_DUMMYRANDOM)
SET(CMAKE_CXX_FLAGS "-DRANDDUMMY -O3 -Wall -fmessage-length=0")
SET(MOCAPYLIB MocapyDR CACHE STRING "Mocapy library used when linking executables")
ENDIF(BUILD_DUMMYRANDOM)
SET(PROGS infenginehmm_test infenginemm_test)
FOREACH(p ${PROGS})
add_executable(${p} ${p}.cpp)
target_link_libraries (${p} ${MOCAPYLIB} ${boost_system} ${Boost_SERIALIZATION_LIBRARY} ${LAPACK_LIBRARY} ${CMAKE_FLIB})
ENDFOREACH(p)
3. --/build$ cmake -DCMAKE_BUILD_TYPE=debug ..
4. --- make
5.build/examples$ gdb ./mdarray
----------------------
(gdb) list
2 This file shows some of the things you can do with Mocapy++'s MDArray.
3
4 The MDArray is a Multi-Dimensional array with many features. One feature is
5 that the shape can be modified at run time.
6 */
7
8 #include <iostream>
9 #include <stdio.h>
10 #include <stdlib.h>
11
(gdb) break 11
Breakpoint 1 at 0x555555557a10: file /home/liufeng/FpxStudio/Research/cppStudio/Mocapy++-1.07-debug/examples/mdarray.cpp, line 11.
(gdb) r
Starting program: /home/liufeng/FpxStudio/Research/cppStudio/Mocapy++-1.07-debug/build/examples/mdarray
Breakpoint 1, main () at /home/liufeng/FpxStudio/Research/cppStudio/Mocapy++-1.07-debug/examples/mdarray.cpp:16
16 int main(void) {
(gdb) n
18 MDArray<double> myMDA01(vec(2,2));
(gdb) n
16 int main(void) {
(gdb) n
18 MDArray<double> myMDA01(vec(2,2));
(gdb) n
16 int main(void) {
(gdb) n
18 MDArray<double> myMDA01(vec(2,2));
(gdb) n
16 int main(void) {
(gdb) n
18 MDArray<double> myMDA01(vec(2,2));
(gdb) n
434 { std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
(gdb) n
435 _M_get_Tp_allocator()); }
(gdb) n
21 cout << myMDA01 << endl;
(gdb) n
[0 0 ]
[0 0 ]
24 myMDA01.set(0,0,1);
(gdb)
#----------------------------------
by emacs step
a) cd ../build/examples
b) emacs(24.5.1)
c) select GDB in menu Tools---> gdb -i=mi hmm_kent
d) b main
e) r
f) n
g) by the menu instruction, ok!!!
31 mocapy_seed((uint)5556575);
(gdb) p tdbn
$1 = {randomGen = 0x555555ba5980, is_constructed = true, nr_nodes = 2, total_output_size = 4, name = "", index_map = std::map with 3 elements = {["th0"] = {first = 0, second = 0}, ["th1"] = {first = 0, second = 1}, ["to0"] = {first = 1, second = 1}}, nodes_0 = std::vector of length 2, capacity 2 = {0x555555ba4b60, 0x555555ba5640}, nodes_1 = std::vector of length 2, capacity 2 = {0x555555ba50d0, 0x555555ba5640}, unique_nodes = std::vector of length 3, capacity 4 = {0x555555ba4b60, 0x555555ba50d0, 0x555555ba5640}, all_nodes = std::vector of length 4, capacity 4 = {0x555555ba4b60, 0x555555ba5640, 0x555555ba50d0, 0x555555ba5640}, myseed = 5556575}
------ GREAT EMACS! --- STEP INTO STL
// Called by _M_fill_insert, _M_insert_aux etc.
size_type
_M_check_len(size_type __n, const char* __s) const
{
if (max_size() - size() < __n)
__throw_length_error(__N(__s));
const size_type __len = size() + std::max(size(), __n);
return (__len < size() || __len > max_size()) ? max_size() : __len;
}
stl_vector.h-----
#else
template<typename _Tp, typename _Alloc>
void
vector<_Tp, _Alloc>::
_M_realloc_insert(iterator __position, const _Tp& __x)
#endif
{
const size_type __len =
_M_check_len(size_type(1), "vector::_M_realloc_insert");
const size_type __elems_before = __position - begin();
pointer __new_start(this->_M_allocate(__len));
pointer __new_finish(__new_start);
__try
{
---- vector.tcc
!!!!! thankyou EMACS!