# SeqDiff - Diff between two sequences for Rust and Python [![creates.io](https://img.shields.io/crates/v/seqdiff.svg)](https://crates.io/crates/seqdiff) [![pypi](https://img.shields.io/pypi/v/pyseqdiff.svg)](https://pypi.org/project/pyseqdiff/) [![Actions Status](https://github.com/tamuhey/seqdiff/workflows/Test%20and%20Deploy/badge.svg)](https://github.com/tamuhey/seqdiff/actions) Functions to get correspondence between two sequences like `diff`, based on Myers' algorithm. # Usage ## Python ### `diff` ```python 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). ```python 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` ```python 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). ```python 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 ```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](https://docs.rs/seqdiff) for more info. # Related - [tokenizations - Robust and Fast tokenizations alignment library for Rust and Python](https://github.com/tamuhey/tokenizations) - This library depends on `seqdiff`