diff options
-rw-r--r-- | phstuff/diphawrapper.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/phstuff/diphawrapper.py b/phstuff/diphawrapper.py index 1b633b5..517a929 100644 --- a/phstuff/diphawrapper.py +++ b/phstuff/diphawrapper.py @@ -303,6 +303,35 @@ def save_text_barcode(fname, barcode): else: f.write("%d %g inf\n" %(dim, interval.birth)) +def save_barcode(fname, barcode): + """Saves a barcode in DIPHA's format. + + Parameters: + ----------- + + fname: File name to save to. + + barcode: The barcode to save, a dictionary keyed on degree, each + entry being a list of `Interval`s. + + """ + + with open(fname, "wb") as f: + f.write(struct.pack("<q", DIPHA_MAGIC)) + f.write(struct.pack("<q", DIPHA_DIPHA_PERSISTENCE_DIAGRAM)) + + n = 0 + for (dim, intervals) in barcode.items(): + n += len(intervals) + f.write(struct.pack("<q", n)) + + for (dim, intervals) in barcode.items(): + for interval in intervals: + if interval.is_finite(): + f.write(struct.pack("<qdd", dim, interval.birth, interval.death)) + else: + f.write(struct.pack("<qdd", -dim - 1, interval.birth, float("inf"))) + class DiphaRunner: |