seqdiff

Crates.ioseqdiff
lib.rsseqdiff
version0.3.0
sourcesrc
created_at2020-06-19 11:23:25.032999
updated_at2021-03-31 11:57:06.269004
descriptionDiff between two sequences
homepagehttps://github.com/tamuhey/seqdiff
repositoryhttps://github.com/tamuhey/seqdiff
max_upload_size
id255660
size42,486
Yohei Tamura (tamuhey)

documentation

https://docs.rs/seqdiff

README

SeqDiff - Diff between two sequences for Rust and Python

creates.io pypi Actions Status

Functions to get correspondence between two sequences like diff, based on Myers' algorithm.

Usage

Python

diff

def diff(
    a: Sequence[S], b: Sequence[T], *, key: Optional[Callable[[S, T], bool]] = None
) -> Tuple[List[Optional[int]], List[Optional[int]]]: ...

Returns the correspondence between two sequences a and b. key is a comparison function (if needed).

import seqdiff

a = [1, 2, 3]
b = [1, 3, 4]
a2b, b2a = seqdiff.diff(a, b)
assert all(a[i] == b[j] for i, j in enumerate(a2b) if j is not None)
assert all(a[j] == b[i] for i, j in enumerate(b2a) if j is not None)
print(a2b)
print(b2a)
[0, None, 1]
[0, 2, None]

print_diff

def print_diff(
    a: Sequence[S], b: Sequence[T], *, key: Optional[Callable[[S, T], bool]] = None
): ...

Pretty print the diff between two sequences a and b.
key is a comparison function (if needed).

import seqdiff

a = [1, 2, 3]
b = [1, 3, 4]
a2b, b2a = seqdiff.print_diff(a, b)

The return value is a pair of tuples. The first tuple contains the index where the item from the first sequence appears in the 2nd sequence or None if the item doesn't appear in the 2nd sequence. The 2nd tuple is the same but listing the corresponding indexes for the 2nd sequence in the first sequence.

Rust

use seqdiff;

let (a2b, b2a) = seqdiff::diff(&[1, 2, 3], &[1, 3]);
assert_eq!(a2b, vec![Some(0), None, Some(1)]);
assert_eq!(b2a, vec![Some(0), Some(2)]);

See the doc for more info.

Related

Commit count: 94

cargo fmt