132 lines
3.6 KiB
Python
132 lines
3.6 KiB
Python
# SPDX-License-Identifier: MIT
|
|
# Copyright (C) 2022 Max Bachmann
|
|
"""
|
|
The Levenshtein (edit) distance is a string metric to measure the
|
|
difference between two strings/sequences s1 and s2.
|
|
It's defined as the minimum number of insertions, deletions or
|
|
substitutions required to transform s1 into s2.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Hashable, Sequence
|
|
from typing import Callable, TypeVar, overload
|
|
|
|
from rapidfuzz.distance import Editops, Opcodes
|
|
|
|
_UnprocessedType1 = TypeVar("_UnprocessedType1")
|
|
_UnprocessedType2 = TypeVar("_UnprocessedType2")
|
|
|
|
@overload
|
|
def distance(
|
|
s1: Sequence[Hashable],
|
|
s2: Sequence[Hashable],
|
|
*,
|
|
weights: tuple[int, int, int] | None = (1, 1, 1),
|
|
processor: None = None,
|
|
score_cutoff: int | None = None,
|
|
score_hint: int | None = None,
|
|
) -> int: ...
|
|
@overload
|
|
def distance(
|
|
s1: _UnprocessedType1,
|
|
s2: _UnprocessedType2,
|
|
*,
|
|
weights: tuple[int, int, int] | None = (1, 1, 1),
|
|
processor: Callable[[_UnprocessedType1 | _UnprocessedType2], Sequence[Hashable]],
|
|
score_cutoff: int | None = None,
|
|
score_hint: int | None = None,
|
|
) -> int: ...
|
|
@overload
|
|
def normalized_distance(
|
|
s1: Sequence[Hashable],
|
|
s2: Sequence[Hashable],
|
|
*,
|
|
weights: tuple[int, int, int] | None = (1, 1, 1),
|
|
processor: None = None,
|
|
score_cutoff: float | None = 0,
|
|
score_hint: float | None = 0,
|
|
) -> float: ...
|
|
@overload
|
|
def normalized_distance(
|
|
s1: _UnprocessedType1,
|
|
s2: _UnprocessedType2,
|
|
*,
|
|
weights: tuple[int, int, int] | None = (1, 1, 1),
|
|
processor: Callable[[_UnprocessedType1 | _UnprocessedType2], Sequence[Hashable]],
|
|
score_cutoff: float | None = 0,
|
|
score_hint: float | None = 0,
|
|
) -> float: ...
|
|
@overload
|
|
def similarity(
|
|
s1: Sequence[Hashable],
|
|
s2: Sequence[Hashable],
|
|
*,
|
|
weights: tuple[int, int, int] | None = (1, 1, 1),
|
|
processor: None = None,
|
|
score_cutoff: int | None = None,
|
|
score_hint: int | None = None,
|
|
) -> int: ...
|
|
@overload
|
|
def similarity(
|
|
s1: _UnprocessedType1,
|
|
s2: _UnprocessedType2,
|
|
*,
|
|
weights: tuple[int, int, int] | None = (1, 1, 1),
|
|
processor: Callable[[_UnprocessedType1 | _UnprocessedType2], Sequence[Hashable]],
|
|
score_cutoff: int | None = None,
|
|
score_hint: int | None = None,
|
|
) -> int: ...
|
|
@overload
|
|
def normalized_similarity(
|
|
s1: Sequence[Hashable],
|
|
s2: Sequence[Hashable],
|
|
*,
|
|
weights: tuple[int, int, int] | None = (1, 1, 1),
|
|
processor: None = None,
|
|
score_cutoff: float | None = 0,
|
|
score_hint: float | None = 0,
|
|
) -> float: ...
|
|
@overload
|
|
def normalized_similarity(
|
|
s1: _UnprocessedType1,
|
|
s2: _UnprocessedType2,
|
|
*,
|
|
weights: tuple[int, int, int] | None = (1, 1, 1),
|
|
processor: Callable[[_UnprocessedType1 | _UnprocessedType2], Sequence[Hashable]],
|
|
score_cutoff: float | None = 0,
|
|
score_hint: float | None = 0,
|
|
) -> float: ...
|
|
@overload
|
|
def editops(
|
|
s1: Sequence[Hashable],
|
|
s2: Sequence[Hashable],
|
|
*,
|
|
processor: None = None,
|
|
score_hint: int | None = None,
|
|
) -> Editops: ...
|
|
@overload
|
|
def editops(
|
|
s1: _UnprocessedType1,
|
|
s2: _UnprocessedType2,
|
|
*,
|
|
processor: Callable[[_UnprocessedType1 | _UnprocessedType2], Sequence[Hashable]],
|
|
score_hint: int | None = None,
|
|
) -> Editops: ...
|
|
@overload
|
|
def opcodes(
|
|
s1: Sequence[Hashable],
|
|
s2: Sequence[Hashable],
|
|
*,
|
|
processor: None = None,
|
|
score_hint: int | None = None,
|
|
) -> Opcodes: ...
|
|
@overload
|
|
def opcodes(
|
|
s1: _UnprocessedType1,
|
|
s2: _UnprocessedType2,
|
|
*,
|
|
processor: Callable[[_UnprocessedType1 | _UnprocessedType2], Sequence[Hashable]],
|
|
score_hint: int | None = None,
|
|
) -> Opcodes: ...
|