Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/appliedtopology/ctl

A fast generic C++ library for applied and computational topology
https://github.com/appliedtopology/ctl

Last synced: about 2 months ago
JSON representation

A fast generic C++ library for applied and computational topology

Lists

README

        

# README #
This C++11 library provides a set of generic tools for:

* Building Neighborhood Graphs
* Building Cellular Complexes
* Computing [persistent] homology over finite fields
* Parallel algorithm(s) for homology

## LICENSE ##
* CTL is licensed under the BSD.
* See LICENSE for more info.

## DEPENDENCIES ##

CTL has dependencies.
- boost
- tbb
- metis
- ann (for \epsilon nearest neighbors, we plan to move to a more up to date neighborhood computer)

We strongly recommend installing them on your system either
as root or with the help of your system administrator via your operating systems
package manager e.g. apt on debian based systems, yum on RHEL systems, or
brew/port/fink on OSX.

please see .travis.yml for an example of how to to this, and our CI results to clarify is a given commit will build.

If you wish to install your own dependencies in another way, you can manually edit:
build_dependencies.txt

If you encounter any issues, make sure to file it:
https://github.com/appliedtopology/ctl/issues

This list of the dependencies is below and we have annoted
which packages we can auto-help you install locally.

C++14 compiler (clang or gcc)
Boost
Intel TBB
METIS (make metis) (used for graph partitioning)
ANN (make ann) (used for nearest neighbor querying..)
Doxygen (Optional)

## BUILDING ##
0. You may specify paths to the include/link directories here:
`vim build_dependencies.txt`
1. CMake will use what you specify, and if you dont it will look on the system
for dependencies (and ideally find them...)
2. Create makefiles
`mkdir build; cd build; cmake ..`
3. Compile: (the -j option makes in parallel)
`make -j`

### For OS/X Users: ###
If you plan on using the default compiler (clang)
then when installing boost ensure that you use:
brew install boost ---build-from-source --with-c++11 --with-mpi --with-program_options --with-clang --without-single
and after `cmake .` ensure that the compiler chosen is clang via `ccmake .` /usr/bin/c++
is a good choice.

Since libstdc++ (GNU C++ STL) and libc++ (Clang C++ STL) are not ABI compatible
one needs to take care to use the correct compilers for libraries linked against.
if boost is compiled with gcc, you cannot use clang to compile CTL and vice versa.

## INSTALL ##
OS/X:
`brew tap appliedtopology/software`
`brew install --HEAD ctl`

This sticks the headers into the default location on your system and all the tools into the appropriate path/bin directory

## SUBMITTING PATCHES ##
Please Do! Accepting Pull Requests via github.

### Future ###
We hope to add support for:
* [Persistent] Co-homology
* Zig Zag Persistence
* Multidimensional Persistence
* Tidy Sets
* OpenGL Visualizations
* Bindings to other languages such as Python, MATLAB, and R

Feel free to fork and help development. Do ask questions!