PHP 8.2.30
Preview: test_strings.py Size: 3.75 KB
//opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/core/tests/test_strings.py

import pytest

import operator
import numpy as np

from numpy.testing import assert_array_equal


COMPARISONS = [
    (operator.eq, np.equal, "=="),
    (operator.ne, np.not_equal, "!="),
    (operator.lt, np.less, "<"),
    (operator.le, np.less_equal, "<="),
    (operator.gt, np.greater, ">"),
    (operator.ge, np.greater_equal, ">="),
]


@pytest.mark.parametrize(["op", "ufunc", "sym"], COMPARISONS)
def test_mixed_string_comparison_ufuncs_fail(op, ufunc, sym):
    arr_string = np.array(["a", "b"], dtype="S")
    arr_unicode = np.array(["a", "c"], dtype="U")

    with pytest.raises(TypeError, match="did not contain a loop"):
        ufunc(arr_string, arr_unicode)

    with pytest.raises(TypeError, match="did not contain a loop"):
        ufunc(arr_unicode, arr_string)

@pytest.mark.parametrize(["op", "ufunc", "sym"], COMPARISONS)
def test_mixed_string_comparisons_ufuncs_with_cast(op, ufunc, sym):
    arr_string = np.array(["a", "b"], dtype="S")
    arr_unicode = np.array(["a", "c"], dtype="U")

    # While there is no loop, manual casting is acceptable:
    res1 = ufunc(arr_string, arr_unicode, signature="UU->?", casting="unsafe")
    res2 = ufunc(arr_string, arr_unicode, signature="SS->?", casting="unsafe")

    expected = op(arr_string.astype('U'), arr_unicode)
    assert_array_equal(res1, expected)
    assert_array_equal(res2, expected)


@pytest.mark.parametrize(["op", "ufunc", "sym"], COMPARISONS)
@pytest.mark.parametrize("dtypes", [
        ("S2", "S2"), ("S2", "S10"),
        ("<U1", "<U1"), ("<U1", ">U1"), (">U1", ">U1"),
        ("<U1", "<U10"), ("<U1", ">U10")])
@pytest.mark.parametrize("aligned", [True, False])
def test_string_comparisons(op, ufunc, sym, dtypes, aligned):
    # ensure native byte-order for the first view to stay within unicode range
    native_dt = np.dtype(dtypes[0]).newbyteorder("=")
    arr = np.arange(2**15).view(native_dt).astype(dtypes[0])
    if not aligned:
        # Make `arr` unaligned:
        new = np.zeros(arr.nbytes + 1, dtype=np.uint8)[1:].view(dtypes[0])
        new[...] = arr
        arr = new

    arr2 = arr.astype(dtypes[1], copy=True)
    np.random.shuffle(arr2)
    arr[0] = arr2[0]  # make sure one matches

    expected = [op(d1, d2) for d1, d2 in zip(arr.tolist(), arr2.tolist())]
    assert_array_equal(op(arr, arr2), expected)
    assert_array_equal(ufunc(arr, arr2), expected)
    assert_array_equal(np.compare_chararrays(arr, arr2, sym, False), expected)

    expected = [op(d2, d1) for d1, d2 in zip(arr.tolist(), arr2.tolist())]
    assert_array_equal(op(arr2, arr), expected)
    assert_array_equal(ufunc(arr2, arr), expected)
    assert_array_equal(np.compare_chararrays(arr2, arr, sym, False), expected)


@pytest.mark.parametrize(["op", "ufunc", "sym"], COMPARISONS)
@pytest.mark.parametrize("dtypes", [
        ("S2", "S2"), ("S2", "S10"), ("<U1", "<U1"), ("<U1", ">U10")])
def test_string_comparisons_empty(op, ufunc, sym, dtypes):
    arr = np.empty((1, 0, 1, 5), dtype=dtypes[0])
    arr2 = np.empty((100, 1, 0, 1), dtype=dtypes[1])

    expected = np.empty(np.broadcast_shapes(arr.shape, arr2.shape), dtype=bool)
    assert_array_equal(op(arr, arr2), expected)
    assert_array_equal(ufunc(arr, arr2), expected)
    assert_array_equal(np.compare_chararrays(arr, arr2, sym, False), expected)


@pytest.mark.parametrize("str_dt", ["S", "U"])
@pytest.mark.parametrize("float_dt", np.typecodes["AllFloat"])
def test_float_to_string_cast(str_dt, float_dt):
    float_dt = np.dtype(float_dt)
    fi = np.finfo(float_dt)
    arr = np.array([np.nan, np.inf, -np.inf, fi.max, fi.min], dtype=float_dt)
    expected = ["nan", "inf", "-inf", repr(fi.max), repr(fi.min)]
    if float_dt.kind == 'c':
        expected = [f"({r}+0j)" for r in expected]

    res = arr.astype(str_dt)
    assert_array_equal(res, np.array(expected, dtype=str_dt))

Directory Contents

Dirs: 3 × Files: 63

Name Size Perms Modified Actions
data DIR
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
examples DIR
- drwxr-xr-x 2026-01-20 13:01:48
Edit Download
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
2.17 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
22.46 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.92 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.17 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
39.51 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
33.57 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
7.42 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
4.94 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
33.49 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
6.41 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.49 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
14.51 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
9.18 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.54 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
113.49 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
24.41 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
30.35 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
3.44 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
73.52 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
51.72 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
2.17 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
5.51 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
15.23 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
6.56 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
23.66 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1011 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download
5.01 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
53.04 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
6.31 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
1.14 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
13.58 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
1.04 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
7.30 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
28.40 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
15.63 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
370.43 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
127.75 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
8.63 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
133.34 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
21.18 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
25.47 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
6.68 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.14 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
19.79 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
89.30 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
5.45 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
2.31 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
41.88 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
18.33 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
5.97 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
7.36 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
29.03 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
47.55 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.72 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.75 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
121.24 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
180.79 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
3.81 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
22.70 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
12.48 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
2.78 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
2.15 KB lrw-r--r-- 2026-01-20 13:01:47
Edit Download
0 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).