CAPD RedHom Library
|
To use Mathematica bindings you need to have compiled library. We recomend to use precompiled binaries (see Download). The bindings are located in <INSTALL_PATH>/usr/local/libexec/capdredhom/capdRedHomM-<VERSION>.zip
. You can find source code of the bindings in capdRedHom/programs/apiRedHom-mathematica
.
To install the bindings into Mathematica you can use our installator install.m:
(** Insert bellow a correct path to bindings or call from command line MathematicaScript -script install.m capdRedHomM.zip **) capdRedHomPKG=$ScriptCommandLine[[2]]; appsDir = FileNameJoin[{$UserBaseDirectory, "Applications"}]; pkgDir = FileNameJoin[{appsDir, "capdRedHom"}] If[FileExistsQ[pkgDir], DeleteDirectory[pkgDir, DeleteContents -> True]] (** ExtractArchive[capdRedHomPKG, appsDir] does not work with symlinks !**) Run["tar xzf", capdRedHomPKG, "-C", appsDir]; Print["Installed " <> capdRedHomPKG <> " into " <> appsDir]; Print["Restart Mathematica!"];
You can call the installator from command line as follow: MathematicaScript -script install.m <INSTALL_PATH>/usr/local/libexec/capdredhom/capdRedHomM-<VERSION>.zip
To check if all run-time dependencies are satisfied you can load a shared library in Python using following snippet:
where PATH_TO_LIBRARY is like
# on Linux ~/.Mathematica/Applications/capdRedHom/LibraryResources/Linux-x86-64/libcapdapiRedHom_mathematica.so
# on macOS ~/Library/Mathematica/Applications/capdRedHom/LibraryResources/MacOSX-x86-64/libcapdapiRedHom_mathematica.dylib
In case of error your system will show you a message.
MathematicaScript -script simplicial_1.m
<< capdRedHom` (** Complex from list of simplices **) simplices = {{0, 1, 2}, {0, 1, 3}, {0, 4}, {1, 4}}; Print[RedHomSimplicialBettiNumbersOverZ[simplices]]; Print[RedHomSimplicialBettiNumbersOverZ2[simplices]]; Print[RedHomSimplicialBettiNumbersOverZp[simplices, 3]]; Print[RedHomSimplicialHomologyOverZ[simplices]]; Print[RedHomSimplicialHomologyOverZ2[simplices]]; Print[RedHomSimplicialHomologyOverZp[simplices, 3]]; (**Topological sphere.Points coordinates.**) simplices = {{2, 3, 4}, {1, 2, 3}, {1, 3, 4}, {1, 2, 4}}; Print[RedHomSimplicialBettiNumbersOverZ[simplices]]; (**Visualization.We need to have points and create a simplex from an \ abstract simplex.**) points = {{0, 0, 0}, {1, 0, 0}, {0, 2, 0}, {0, 0, 3}}; SimplexCoordinate[simplex_] := Map[Function[p, points[[p]]], simplex]; Graphics3D[Polygon[Map[SimplexCoordinate, simplices]]]
MathematicaScript -script cubical_1.m
MathematicaScript -script point_cloud_persistence.m
<< capdRedHom` (** Compute persistence homology from a point cloud. Arguments: - a list of points in n-dimensional euclidean space - max complex dimension - max distance **) Print[RedHomPointCloudPersistentHomology[{{.1, .2, .3}, {.0, .0, .0}}, 1, .1]]; (** Random points example with visualization **) Needs["HierarchicalClustering`"]; numberOfPoints = 100; points = Table[{RandomReal[1], RandomReal[1], RandomReal[1]}, {i, numberOfPoints}]; distanceMatrix = DistanceMatrix[points]; Distance[p_, q_] := distanceMatrix[[p]][[q]]; SimplexCoordinate[simplex_] := Map[Function[p, points[[p]]], simplex]; maxDistance = 0.3; maxDimension = 2; (** compute persistence intervals **) persistenceIntervals = RedHomPointCloudPersistentHomology[points, maxDimension, maxDistance]; (** compute simplicial Rips complex, only for visualization **) complex = RipsComplex[Distance, Length[points], maxDistance, maxDimension]; distance = 0.1; dimension = maxDimension; (** create filtration based on the precomputed Rips complex **) filteredSimplices = ComplexFiltration[Distance, complex, distance, dimension]; (** For the filtration we can compute regular homology **) filteredComplex = RedHomCreateSimplicialComplex[Union @@ filteredSimplices]; betti = RedHomBettiNumbers[filteredComplex]; Print[betti]; plotDimension = 2; plot = PlotSimplicialComplex[filteredSimplices, plotDimension, SimplexCoordinate]; Show[plot]