diff options
-rw-r--r-- | phstuff/diphawrapper.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/phstuff/diphawrapper.py b/phstuff/diphawrapper.py index f6ab403..45444c8 100644 --- a/phstuff/diphawrapper.py +++ b/phstuff/diphawrapper.py @@ -18,6 +18,7 @@ optionally manage running the DIPHA executable. # DIPHA header files. DIPHA_MAGIC = 8067171840 DIPHA_WEIGHTED_BOUNDARY_MATRIX = 0 +DIPHA_IMAGE_DATA = 1 DIPHA_PERSISTENCE_DIAGRAM = 2 DIPHA_DISTANCE_MATRIX = 7 DIPHA_SPARSE_DISTANCE_MATRIX = 8 @@ -148,8 +149,36 @@ def save_edge_list(fname, edge_list): for j in range(0, len(edge_list[i])): f.write(struct.pack('<d', factor*edge_list[i][j][1])) +def save_cubical(fname, complex): + """Save a (any-dimensional) array that will be interpreted as a + cubical complex with top-dimensional cells entering the filtration + at the scale given by the array values. + + Parameters: + ----------- + + fname: Name of file to write. + + complex: Any-dimensional array with floating-point values giving + the filtration values of the top-dimensional cells. + + """ + + with open(fname, "wb") as f: + f.write(struct.pack("<q", DIPHA_MAGIC)) + f.write(struct.pack("<q", DIPHA_IMAGE_DATA)) + f.write(struct.pack("<q", np.product(complex.shape))) + f.write(struct.pack("<q", len(complex.shape))) + + for n in complex.shape: + f.write(struct.pack("<q", n)) + + for w in complex.flat: + f.write(struct.pack("<d", w)) + def load_barcode(fname, top_dim = None): + """Load a barcode as written by DIPHA. Parameters: @@ -213,6 +242,7 @@ def save_text_barcode(fname, barcode): f.write("%d %g %g\n" %(dim, interval.birth, interval.death)) else: f.write("%d %g inf\n" %(dim, interval.birth)) + class DiphaRunner: |