Skip to main content

Myers Diff with realtime and plot support

Project description

PyMyers

  • a myers diff algorithm implementation which support realtime calculation and visualization

Features

  • Extended the myers algorithm to support realtime calculations
  • Diff trace can be drawn with animation
  • Using a tree data structure to store and track diff traces
  • Inputs can be easily logged and restored
  • code is well orgnized with black/isort/mypy/pytest

Installation

pip install pymyers

or install editablely

git clone https://github.com/leowooong/PyMyers.git
cd PyMyers
pip install -e ./

Usage

diff

from pymyers import MyersRealTime, Diff

# set two sequences
a = "ABCABBA"
b = "CBABAC"

# diff from a to b
matches = [(2, 0), (3, 2), (4, 3), (6, 4)]
deletes = [0, 1, 5]
inserts = [1, 5]
diff = Diff(matches, deletes, inserts)

# calculate diff
myers = MyersRealTime(a, b)
diff_re = myers.diff()
assert diff_re == diff

# show diff
print('matches:', [a[c[0]] for c in matches])
print('deletes:', [a[c] for c in deletes])
print('inserts:', [b[c] for c in inserts])

real-time diff

a = "0123456789"
b0 = ""
b1 = "0"
b2 = "34"
b3 = "687"
b4 = "890"
b = [b0, b1, b2, b3, b4]

myers = MyersRealTime(a, b[0], max_depth=50)
for bi in b[1:]:
    print(myers.update(bi))

plot

a = "ABCABBA"
b = "CBABAC"

myers = MyersRealTime(a, b, plot=True, animation = True, plot_size = 50)
diff_re = myers.diff()

log

a = "ABCABBA"
b = "CBABAC"

myers = MyersRealTime(a, b, log_path='./log')
diff_re = myers.diff()

# restore log
from pymyers import Debug
log_folder = "./log/log-myers-2022-12-21-18:19:11"
a, *b = Debug.read(log_folder)

custom compare function

a = [1, 2, 3, 4, 5]
b = "13456"
eq = lambda a, b: a == int(b)

myers = MyersRealTime(a, b, eq=eq)
diff_re = myers.diff()

References

  • Thanks to Eugene W. Myers for the development of the myers algorithm and James Coglan for the clear explanation to the myers algorithm

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymyers-0.2.1.tar.gz (9.3 kB view hashes)

Uploaded Source

Built Distribution

pymyers-0.2.1-py3-none-any.whl (9.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page