Given a simplicial complex , and a sequence of values on each one of its vertices, one may construct a homotopy of PL functions on the complex that interpolates linearly between the values. For any given time in the homotopy, we get a function from the simplicial complex to the real line, and we can compute its persistence diagram. Stacking all such diagrams together we get a persistence vineyard [CEM06]. An example that computes such a vineyard is in examples/pl-functions/pl-vineyard.cpp.
Once compiled, it takes three files as the input:
pl-vineyard complex values output-prefix
complex lists the simplices of the simplicial complex , one per-line:
0
1
0 1
2
0 2
...
values lists the vertex values of the consequtive “frames” of the homotopy. Each line is a sequence of as many numbers as there are vertices in the complex. It describes a single frame. pl-vineayrd constructs the homotopy over the interval , where is the number of frames. As an example of values input:
3.3 6 2
1.2 3 10
7.5 2.1 0
This input means: . Similarly, ; .
The vineyard is saved to the files prefixed with output-prefix, followed by the dimension and extension, e.g. myfunction1.vin or myfunction1.edg, depending on the format. The two formats are vines and edges. The former saves one vine per line, listed as a stream of triplets BIRTH DEATH TIME:
4 5 0 3.4 5.6 0.4 3 6 1 ...
The edge format represents the vine as a sequence of edges, each given as a start and end point. So the above vine would appear as:
4 5 0
3.4 5.6 0.4
3.4 5.6 0.4
3 6 1
...
pl-vineyard takes additional options:
Do not output infinite vines.
Output vines, instead of the default edge format.
Go through the events one by one (useful for the debugging).