• Bug#1103210: textdistance: FTBFS: RuntimeError: cannot import Levenshte

    From Santiago Vila@21:1/5 to All on Tue Apr 15 02:30:03 2025
    Package: src:textdistance
    Version: 4.6.3-4
    Severity: serious
    Tags: ftbfs trixie sid

    Dear maintainer:

    During a rebuild of all packages in unstable, your package failed to build:

    --------------------------------------------------------------------------------
    [...]
    debian/rules clean
    dh clean --buildsystem=pybuild
    dh_auto_clean -O--buildsystem=pybuild
    I: pybuild base:311: python3.13 setup.py clean /usr/lib/python3/dist-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
    !!

    ********************************************************************************
    Please consider removing the following classifiers in favor of a SPDX license expression:

    License :: OSI Approved :: MIT License

    See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
    ********************************************************************************

    !!
    self._finalize_license_expression()
    running clean
    removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build' (and everything under it)
    'build/bdist.linux-x86_64' does not exist -- can't clean it 'build/scripts-3.13' does not exist -- can't clean it
    dh_autoreconf_clean -O--buildsystem=pybuild
    dh_clean -O--buildsystem=pybuild
    debian/rules binary
    dh binary --buildsystem=pybuild
    dh_update_autotools_config -O--buildsystem=pybuild
    dh_autoreconf -O--buildsystem=pybuild
    dh_auto_configure -O--buildsystem=pybuild
    I: pybuild base:311: python3.13 setup.py config /usr/lib/python3/dist-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
    !!

    ********************************************************************************
    Please consider removing the following classifiers in favor of a SPDX license expression:

    License :: OSI Approved :: MIT License

    See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
    ********************************************************************************

    !!
    self._finalize_license_expression()
    running config
    dh_auto_build -O--buildsystem=pybuild
    I: pybuild base:311: /usr/bin/python3 setup.py build /usr/lib/python3/dist-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
    !!

    ********************************************************************************
    Please consider removing the following classifiers in favor of a SPDX license expression:

    License :: OSI Approved :: MIT License

    See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
    ********************************************************************************

    !!
    self._finalize_license_expression()
    running build
    running build_py
    creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance
    copying textdistance/benchmark.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance
    copying textdistance/libraries.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance
    copying textdistance/utils.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance
    copying textdistance/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance
    creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms copying textdistance/algorithms/token_based.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/sequence_based.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/phonetic.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/edit_based.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/simple.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/vector_based.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/compression_based.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/types.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/base.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/algorithms/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance/algorithms
    copying textdistance/py.typed -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance
    copying textdistance/libraries.json -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/textdistance
    dh_auto_test -O--buildsystem=pybuild
    I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -m pytest tests
    ============================= test session starts ==============================
    platform linux -- Python 3.13.3, pytest-8.3.5, pluggy-1.5.0
    rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build
    configfile: setup.cfg
    plugins: hypothesis-6.130.5, typeguard-4.4.2
    collected 430 items

    tests/test_common.py ................................................... [ 11%] ........................................................................ [ 28%] ............................................. [ 39%] tests/test_compression/test_arith_ncd.py .... [ 40%] tests/test_compression/test_bwtrle_ncd.py .. [ 40%] tests/test_compression/test_bz2_ncd.py .. [ 40%] tests/test_compression/test_common.py ............................ [ 47%] tests/test_compression/test_entropy_ncd.py ........ [ 49%] tests/test_compression/test_sqrt_ncd.py ....... [ 50%] tests/test_edit/test_damerau_levenshtein.py ............................ [ 57%] .... [ 58%] tests/test_edit/test_editex.py ............ [ 61%] tests/test_edit/test_gotoh.py ..... [ 62%] tests/test_edit/test_hamming.py ...... [ 63%] tests/test_edit/test_jaro.py ........ [ 65%] tests/test_edit/test_jaro_winkler.py ....... [ 67%] tests/test_edit/test_levenshtein.py ...... [ 68%] tests/test_edit/test_matrix.py .......... [ 70%] tests/test_edit/test_mlipns.py ........... [ 73%] tests/test_edit/test_needleman_wunsch.py ..... [ 74%] tests/test_edit/test_smith_waterman.py ..... [ 75%] tests/test_edit/test_strcmp95.py .... [ 76%] tests/test_external.py .F..F.F..F.F..F.F..F.F..F.F..F [ 83%] tests/test_phonetic/test_editex.py .............................. [ 90%] tests/test_sequence/test_lcsseq.py ........... [ 93%] tests/test_sequence/test_lcsstr.py .......... [ 95%] tests/test_token/test_bag.py .... [ 96%] tests/test_token/test_cosine.py .. [ 96%] tests/test_token/test_jaccard.py ..... [ 98%] tests/test_token/test_monge_elkan.py .. [ 98%] tests/test_token/test_overlap.py ... [ 99%] tests/test_token/test_sorensen.py ... [100%]

    =================================== FAILURES ===================================
    ____________________________ test_compare[Hamming] _____________________________

    alg = 'Hamming'

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:21:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Hamming'

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.settings(deadline=None)
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    def test_compare(left, right, alg):
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.hamming
    E Falsifying example: test_compare(
    E # The test always failed when commented parts were varied together.
    E alg='Hamming',
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:39: RuntimeError
    __________________________ test_compare[Levenshtein] ___________________________

    alg = 'Levenshtein'

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:21:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Levenshtein'

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.settings(deadline=None)
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    def test_compare(left, right, alg):
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.distance
    E Falsifying example: test_compare(
    E # The test always failed when commented parts were varied together.
    E alg='Levenshtein',
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:39: RuntimeError
    ___________________________ test_qval[None-Hamming] ____________________________

    alg = 'Hamming', qval = None

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:51:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Hamming', qval = None

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    @pytest.mark.parametrize('qval', (None, 1, 2, 3))
    def test_qval(left: str, right: str, alg: str, qval: int | None) -> None:
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.hamming
    E Falsifying example: test_qval(
    E # The test always failed when commented parts were varied together.
    E alg='Hamming',
    E qval=None,
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:69: RuntimeError
    _________________________ test_qval[None-Levenshtein] __________________________

    alg = 'Levenshtein', qval = None

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:51:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Levenshtein', qval = None

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    @pytest.mark.parametrize('qval', (None, 1, 2, 3))
    def test_qval(left: str, right: str, alg: str, qval: int | None) -> None:
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.distance
    E Falsifying example: test_qval(
    E # The test always failed when commented parts were varied together.
    E alg='Levenshtein',
    E qval=None,
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:69: RuntimeError
    _____________________________ test_qval[1-Hamming] _____________________________

    alg = 'Hamming', qval = 1

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:51:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Hamming', qval = 1

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    @pytest.mark.parametrize('qval', (None, 1, 2, 3))
    def test_qval(left: str, right: str, alg: str, qval: int | None) -> None:
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.hamming
    E Falsifying example: test_qval(
    E # The test always failed when commented parts were varied together.
    E alg='Hamming',
    E qval=1,
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:69: RuntimeError
    ___________________________ test_qval[1-Levenshtein] ___________________________

    alg = 'Levenshtein', qval = 1

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:51:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Levenshtein', qval = 1

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    @pytest.mark.parametrize('qval', (None, 1, 2, 3))
    def test_qval(left: str, right: str, alg: str, qval: int | None) -> None:
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.distance
    E Falsifying example: test_qval(
    E # The test always failed when commented parts were varied together.
    E alg='Levenshtein',
    E qval=1,
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:69: RuntimeError
    _____________________________ test_qval[2-Hamming] _____________________________

    alg = 'Hamming', qval = 2

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:51:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Hamming', qval = 2

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    @pytest.mark.parametrize('qval', (None, 1, 2, 3))
    def test_qval(left: str, right: str, alg: str, qval: int | None) -> None:
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.hamming
    E Falsifying example: test_qval(
    E # The test always failed when commented parts were varied together.
    E alg='Hamming',
    E qval=2,
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:69: RuntimeError
    ___________________________ test_qval[2-Levenshtein] ___________________________

    alg = 'Levenshtein', qval = 2

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:51:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Levenshtein', qval = 2

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    @pytest.mark.parametrize('qval', (None, 1, 2, 3))
    def test_qval(left: str, right: str, alg: str, qval: int | None) -> None:
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.distance
    E Falsifying example: test_qval(
    E # The test always failed when commented parts were varied together.
    E alg='Levenshtein',
    E qval=2,
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:69: RuntimeError
    _____________________________ test_qval[3-Hamming] _____________________________

    alg = 'Hamming', qval = 3

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:51:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Hamming', qval = 3

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    @pytest.mark.parametrize('qval', (None, 1, 2, 3))
    def test_qval(left: str, right: str, alg: str, qval: int | None) -> None:
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.hamming
    E Falsifying example: test_qval(
    E # The test always failed when commented parts were varied together.
    E alg='Hamming',
    E qval=3,
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:69: RuntimeError
    ___________________________ test_qval[3-Levenshtein] ___________________________

    alg = 'Levenshtein', qval = 3

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:51:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = '0', right = '0', alg = 'Levenshtein', qval = 3

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.text(min_size=1),
    right=hypothesis.strategies.text(min_size=1),
    )
    @pytest.mark.parametrize('qval', (None, 1, 2, 3))
    def test_qval(left: str, right: str, alg: str, qval: int | None) -> None:
    for lib in libraries.get_libs(alg):

    if lib.module_name == 'jellyfish':
    ascii = set(string.printable)
    if (set(left) | set(right)) - ascii:
    continue

    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.distance
    E Falsifying example: test_qval(
    E # The test always failed when commented parts were varied together.
    E alg='Levenshtein',
    E qval=3,
    E left='0', # or any other generated value
    E right='0', # or any other generated value
    E )

    tests/test_external.py:69: RuntimeError
    ________________________ test_list_of_numbers[Hamming] _________________________

    alg = 'Hamming'

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:91:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = [], right = [], alg = 'Hamming'

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.lists(hypothesis.strategies.integers()),
    right=hypothesis.strategies.lists(hypothesis.strategies.integers()),
    )
    def test_list_of_numbers(left, right, alg):
    for lib in libraries.get_libs(alg):
    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.hamming
    E Falsifying example: test_list_of_numbers(
    E # The test always failed when commented parts were varied together.
    E alg='Hamming',
    E left=[], # or any other generated value
    E right=[], # or any other generated value
    E )

    tests/test_external.py:102: RuntimeError
    ______________________ test_list_of_numbers[Levenshtein] _______________________

    alg = 'Levenshtein'

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())

    tests/test_external.py:91:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    left = [], right = [], alg = 'Levenshtein'

    @pytest.mark.external
    @pytest.mark.parametrize('alg', libraries.get_algorithms())
    @hypothesis.given(
    left=hypothesis.strategies.lists(hypothesis.strategies.integers()),
    right=hypothesis.strategies.lists(hypothesis.strategies.integers()),
    )
    def test_list_of_numbers(left, right, alg):
    for lib in libraries.get_libs(alg):
    conditions = lib.conditions or {}
    internal_func = getattr(textdistance, alg)(external=False, **conditions)
    external_func = lib.get_function()
    if external_func is None:
    raise RuntimeError('cannot import {}'.format(str(lib)))
    E RuntimeError: cannot import Levenshtein.distance
    E Falsifying example: test_list_of_numbers(
    E # The test always failed when commented parts were varied together.
    E alg='Levenshtein',
    E left=[], # or any other generated value
    E right=[], # or any other generated value
    E )

    tests/test_external.py:102: RuntimeError
    =========================== short test summary info ============================
    FAILED tests/test_external.py::test_compare[Hamming] - RuntimeError: cannot i...
    FAILED tests/test_external.py::test_compare[Levenshtein] - RuntimeError: cann...
    FAILED tests/test_external.py::test_qval[None-Hamming] - RuntimeError: cannot...
    FAILED tests/test_external.py::test_qval[None-Levenshtein] - RuntimeError: ca...
    FAILED tests/test_external.py::test_qval[1-Hamming] - RuntimeError: cannot im...
    FAILED tests/test_external.py::test_qval[1-Levenshtein] - RuntimeError: canno...
    FAILED tests/test_external.py::test_qval[2-Hamming] - RuntimeError: cannot im...
    FAILED tests/test_external.py::test_qval[2-Levenshtein] - RuntimeError: canno...
    FAILED tests/test_external.py::test_qval[3-Hamming] - RuntimeError: cannot im...
    FAILED tests/test_external.py::test_qval[3-Levenshtein] - RuntimeError: canno...
    FAILED tests/test_external.py::test_list_of_numbers[Hamming] - RuntimeError: ...
    FAILED tests/test_external.py::test_list_of_numbers[Levenshtein] - RuntimeErr...
    ======================= 12 failed, 418 passed in 25.09s ========================
    E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -m pytest tests
    dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13
    make: *** [debian/rules:4: binary] Error 25
    dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 --------------------------------------------------------------------------------

    The above is just how the build ends and not necessarily the most relevant part.
    If required, the full build log is available here:

    https://people.debian.org/~sanvila/build-logs/202504/

    About the archive rebuild: The build was made on virtual machines from AWS, using sbuild and a reduced chroot with only build-essential packages.

    If you could not reproduce the bug please contact me privately, as I
    am willing to provide ssh access to a virtual machine where the bug is
    fully reproducible.

    If this is really a bug in one of the build-depends, please use
    reassign and add an affects on src:textdistance, so that this is still
    visible in the BTS web page for this package.

    Thanks.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Julian Gilbey@21:1/5 to All on Wed Apr 16 07:30:01 2025
    reassign 1103210 python-levenshtein 0.27.1-1
    affects 1103210 textdistance
    close 1103210 0.27.1-2
    thanks
    --

    python-levenshtein 0.27.1-1 did not include the Levenshtein module;
    this is fixed in 0.27.1-2.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)