Skip to main content

Longest Common Subsequence (LCS) extension for vectors.

Project description

Python 3.8 GitHub CI GitHub license Code style

LCSvec

Longest Common Subsequence/Substring (LCS) solving package for vectors.

Why LCSvec

While looking for fast implementations solving the Longest Common Subsequence and Longest Common Substring (i.e. Contiguous Subsequence) (LCCS) problems, I only found pieces of code for strings, while I needed something working for vectors of integers. Yet, string LCS implementations 1) work at the character level, which might not be suitable for certain use-cases where one wants to work at word or sentence level; 2) only work with strings, other modalities will not work and might not be designed to be converted to bytes.

LCSvec aims to solve this gap by providing user-friendly and fast implementations of the LCS and LCCS problems for vectors. It works with numpy, pytorch, tensorflow and jax arrays/tensors! The code is written in C++ and the methods are bind with Python with nanobind for optimal performances.

Example

You can install the package with pip: pip install lcsvec. Here we will use numpy, the usage for other deep learning libraries is the same.

from lcsvec import lccs, lccs_length, lcs, lcs_length
import numpy as np

seq1 = np.arange(0, 12)
seq2 = np.array([8, 0, 1, 2, 8, 2, 3, 4, 5, 6], dtype=np.int64)

lcs_ = lcs(seq1, seq2)  # [0, 1, 2, 3, 4, 5, 6]
lcs_len = lcs_length(seq1, seq2)  # 7, more efficient than calling len(lcs(seq1, seq2))

lccs = lccs(seq1, seq2)  # [2, 3, 4, 5, 6]
lccs_len = lccs_length(seq1, seq2)  # 5, more efficient than calling len(lccs(seq1, seq2))

TODOs

  • implement lccs with suffix tree;
  • batch methods, i.e. supporting 2D arrays;
  • batch methods with any number of dimensions (nD array) and add a dim argument;
  • make it work with an unlimited number of sequences, and set dim and pad_token as kwargs only;

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

lcsvec-0.0.1.tar.gz (906.5 kB view hashes)

Uploaded Source

Built Distributions

lcsvec-0.0.1-pp39-pypy39_pp73-win_amd64.whl (49.2 kB view hashes)

Uploaded PyPy Windows x86-64

lcsvec-0.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.manylinux_2_24_x86_64.whl (45.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.24+ x86-64 manylinux: glibc 2.28+ x86-64

lcsvec-0.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.manylinux_2_24_aarch64.whl (43.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.24+ ARM64 manylinux: glibc 2.28+ ARM64

lcsvec-0.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (43.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

lcsvec-0.0.1-cp312-cp312-win_amd64.whl (49.8 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

lcsvec-0.0.1-cp312-cp312-win32.whl (44.9 kB view hashes)

Uploaded CPython 3.12 Windows x86

lcsvec-0.0.1-cp312-cp312-musllinux_1_2_x86_64.whl (130.2 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

lcsvec-0.0.1-cp312-cp312-musllinux_1_2_aarch64.whl (126.3 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

lcsvec-0.0.1-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_24_x86_64.whl (45.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.24+ x86-64 manylinux: glibc 2.28+ x86-64

lcsvec-0.0.1-cp312-cp312-manylinux_2_28_aarch64.manylinux_2_24_aarch64.whl (43.4 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.24+ ARM64 manylinux: glibc 2.28+ ARM64

lcsvec-0.0.1-cp312-cp312-macosx_11_0_arm64.whl (43.0 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

lcsvec-0.0.1-cp312-cp312-macosx_10_9_x86_64.whl (44.5 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

lcsvec-0.0.1-cp311-cp311-win_amd64.whl (51.0 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

lcsvec-0.0.1-cp311-cp311-win32.whl (46.1 kB view hashes)

Uploaded CPython 3.11 Windows x86

lcsvec-0.0.1-cp311-cp311-musllinux_1_2_x86_64.whl (132.7 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

lcsvec-0.0.1-cp311-cp311-musllinux_1_2_aarch64.whl (128.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

lcsvec-0.0.1-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_24_x86_64.whl (48.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.24+ x86-64 manylinux: glibc 2.28+ x86-64

lcsvec-0.0.1-cp311-cp311-manylinux_2_28_aarch64.manylinux_2_24_aarch64.whl (45.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.24+ ARM64 manylinux: glibc 2.28+ ARM64

lcsvec-0.0.1-cp311-cp311-macosx_11_0_arm64.whl (45.0 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

lcsvec-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl (46.6 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

lcsvec-0.0.1-cp310-cp310-win_amd64.whl (51.2 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

lcsvec-0.0.1-cp310-cp310-win32.whl (46.1 kB view hashes)

Uploaded CPython 3.10 Windows x86

lcsvec-0.0.1-cp310-cp310-musllinux_1_2_x86_64.whl (132.9 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

lcsvec-0.0.1-cp310-cp310-musllinux_1_2_aarch64.whl (128.5 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

lcsvec-0.0.1-cp310-cp310-manylinux_2_28_x86_64.manylinux_2_24_x86_64.whl (48.5 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.24+ x86-64 manylinux: glibc 2.28+ x86-64

lcsvec-0.0.1-cp310-cp310-manylinux_2_28_aarch64.manylinux_2_24_aarch64.whl (46.1 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.24+ ARM64 manylinux: glibc 2.28+ ARM64

lcsvec-0.0.1-cp310-cp310-macosx_11_0_arm64.whl (45.1 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

lcsvec-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl (46.7 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

lcsvec-0.0.1-cp39-cp39-win_amd64.whl (51.5 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

lcsvec-0.0.1-cp39-cp39-win32.whl (46.5 kB view hashes)

Uploaded CPython 3.9 Windows x86

lcsvec-0.0.1-cp39-cp39-musllinux_1_2_x86_64.whl (132.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

lcsvec-0.0.1-cp39-cp39-musllinux_1_2_aarch64.whl (128.5 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

lcsvec-0.0.1-cp39-cp39-manylinux_2_28_x86_64.manylinux_2_24_x86_64.whl (48.5 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.24+ x86-64 manylinux: glibc 2.28+ x86-64

lcsvec-0.0.1-cp39-cp39-manylinux_2_28_aarch64.manylinux_2_24_aarch64.whl (46.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.24+ ARM64 manylinux: glibc 2.28+ ARM64

lcsvec-0.0.1-cp39-cp39-macosx_11_0_arm64.whl (45.1 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

lcsvec-0.0.1-cp39-cp39-macosx_10_9_x86_64.whl (46.7 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

lcsvec-0.0.1-cp38-cp38-win_amd64.whl (51.5 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

lcsvec-0.0.1-cp38-cp38-win32.whl (46.4 kB view hashes)

Uploaded CPython 3.8 Windows x86

lcsvec-0.0.1-cp38-cp38-musllinux_1_2_x86_64.whl (132.9 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

lcsvec-0.0.1-cp38-cp38-musllinux_1_2_aarch64.whl (128.4 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

lcsvec-0.0.1-cp38-cp38-manylinux_2_28_x86_64.manylinux_2_24_x86_64.whl (48.5 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.24+ x86-64 manylinux: glibc 2.28+ x86-64

lcsvec-0.0.1-cp38-cp38-manylinux_2_28_aarch64.manylinux_2_24_aarch64.whl (46.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.24+ ARM64 manylinux: glibc 2.28+ ARM64

lcsvec-0.0.1-cp38-cp38-macosx_11_0_arm64.whl (45.1 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

lcsvec-0.0.1-cp38-cp38-macosx_10_9_x86_64.whl (46.8 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

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