diff options
| author | Miodrag Milanović <mmicko@gmail.com> | 2021-01-02 11:16:49 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-02 11:16:49 +0100 | 
| commit | 9b9628047c01a970cfe20f83f2b7129ed109440d (patch) | |
| tree | 1db418e9a889dc6fbe6199c5259aac9bd8cbb32f /3rdparty/pybind11/tests/test_numpy_vectorize.py | |
| parent | c6cdf30501dcb2da01361229dd66a05dad73a132 (diff) | |
| parent | 61b07bc9a664d6a88b85aae99f9756d7569688a9 (diff) | |
| download | nextpnr-9b9628047c01a970cfe20f83f2b7129ed109440d.tar.gz nextpnr-9b9628047c01a970cfe20f83f2b7129ed109440d.tar.bz2 nextpnr-9b9628047c01a970cfe20f83f2b7129ed109440d.zip  | |
Merge pull request #549 from YosysHQ/update
Update pybind11 version and fix for future python versions
Diffstat (limited to '3rdparty/pybind11/tests/test_numpy_vectorize.py')
| -rw-r--r-- | 3rdparty/pybind11/tests/test_numpy_vectorize.py | 168 | 
1 files changed, 119 insertions, 49 deletions
diff --git a/3rdparty/pybind11/tests/test_numpy_vectorize.py b/3rdparty/pybind11/tests/test_numpy_vectorize.py index 0e9c8839..4e6b2d19 100644 --- a/3rdparty/pybind11/tests/test_numpy_vectorize.py +++ b/3rdparty/pybind11/tests/test_numpy_vectorize.py @@ -1,10 +1,8 @@ +# -*- coding: utf-8 -*-  import pytest  from pybind11_tests import numpy_vectorize as m -pytestmark = pytest.requires_numpy - -with pytest.suppress(ImportError): -    import numpy as np +np = pytest.importorskip("numpy")  def test_vectorize(capture): @@ -19,28 +17,40 @@ def test_vectorize(capture):          assert capture == "my_func(x:int=1, y:float=2, z:float=3)"          with capture:              assert np.allclose(f(np.array([1, 3]), np.array([2, 4]), 3), [6, 36]) -        assert capture == """ +        assert ( +            capture +            == """              my_func(x:int=1, y:float=2, z:float=3)              my_func(x:int=3, y:float=4, z:float=3)          """ +        )          with capture: -            a = np.array([[1, 2], [3, 4]], order='F') -            b = np.array([[10, 20], [30, 40]], order='F') +            a = np.array([[1, 2], [3, 4]], order="F") +            b = np.array([[10, 20], [30, 40]], order="F")              c = 3              result = f(a, b, c)              assert np.allclose(result, a * b * c)              assert result.flags.f_contiguous          # All inputs are F order and full or singletons, so we the result is in col-major order: -        assert capture == """ +        assert ( +            capture +            == """              my_func(x:int=1, y:float=10, z:float=3)              my_func(x:int=3, y:float=30, z:float=3)              my_func(x:int=2, y:float=20, z:float=3)              my_func(x:int=4, y:float=40, z:float=3)          """ +        )          with capture: -            a, b, c = np.array([[1, 3, 5], [7, 9, 11]]), np.array([[2, 4, 6], [8, 10, 12]]), 3 +            a, b, c = ( +                np.array([[1, 3, 5], [7, 9, 11]]), +                np.array([[2, 4, 6], [8, 10, 12]]), +                3, +            )              assert np.allclose(f(a, b, c), a * b * c) -        assert capture == """ +        assert ( +            capture +            == """              my_func(x:int=1, y:float=2, z:float=3)              my_func(x:int=3, y:float=4, z:float=3)              my_func(x:int=5, y:float=6, z:float=3) @@ -48,10 +58,13 @@ def test_vectorize(capture):              my_func(x:int=9, y:float=10, z:float=3)              my_func(x:int=11, y:float=12, z:float=3)          """ +        )          with capture:              a, b, c = np.array([[1, 2, 3], [4, 5, 6]]), np.array([2, 3, 4]), 2              assert np.allclose(f(a, b, c), a * b * c) -        assert capture == """ +        assert ( +            capture +            == """              my_func(x:int=1, y:float=2, z:float=2)              my_func(x:int=2, y:float=3, z:float=2)              my_func(x:int=3, y:float=4, z:float=2) @@ -59,10 +72,13 @@ def test_vectorize(capture):              my_func(x:int=5, y:float=3, z:float=2)              my_func(x:int=6, y:float=4, z:float=2)          """ +        )          with capture:              a, b, c = np.array([[1, 2, 3], [4, 5, 6]]), np.array([[2], [3]]), 2              assert np.allclose(f(a, b, c), a * b * c) -        assert capture == """ +        assert ( +            capture +            == """              my_func(x:int=1, y:float=2, z:float=2)              my_func(x:int=2, y:float=2, z:float=2)              my_func(x:int=3, y:float=2, z:float=2) @@ -70,10 +86,17 @@ def test_vectorize(capture):              my_func(x:int=5, y:float=3, z:float=2)              my_func(x:int=6, y:float=3, z:float=2)          """ +        )          with capture: -            a, b, c = np.array([[1, 2, 3], [4, 5, 6]], order='F'), np.array([[2], [3]]), 2 +            a, b, c = ( +                np.array([[1, 2, 3], [4, 5, 6]], order="F"), +                np.array([[2], [3]]), +                2, +            )              assert np.allclose(f(a, b, c), a * b * c) -        assert capture == """ +        assert ( +            capture +            == """              my_func(x:int=1, y:float=2, z:float=2)              my_func(x:int=2, y:float=2, z:float=2)              my_func(x:int=3, y:float=2, z:float=2) @@ -81,36 +104,53 @@ def test_vectorize(capture):              my_func(x:int=5, y:float=3, z:float=2)              my_func(x:int=6, y:float=3, z:float=2)          """ +        )          with capture:              a, b, c = np.array([[1, 2, 3], [4, 5, 6]])[::, ::2], np.array([[2], [3]]), 2              assert np.allclose(f(a, b, c), a * b * c) -        assert capture == """ +        assert ( +            capture +            == """              my_func(x:int=1, y:float=2, z:float=2)              my_func(x:int=3, y:float=2, z:float=2)              my_func(x:int=4, y:float=3, z:float=2)              my_func(x:int=6, y:float=3, z:float=2)          """ +        )          with capture: -            a, b, c = np.array([[1, 2, 3], [4, 5, 6]], order='F')[::, ::2], np.array([[2], [3]]), 2 +            a, b, c = ( +                np.array([[1, 2, 3], [4, 5, 6]], order="F")[::, ::2], +                np.array([[2], [3]]), +                2, +            )              assert np.allclose(f(a, b, c), a * b * c) -        assert capture == """ +        assert ( +            capture +            == """              my_func(x:int=1, y:float=2, z:float=2)              my_func(x:int=3, y:float=2, z:float=2)              my_func(x:int=4, y:float=3, z:float=2)              my_func(x:int=6, y:float=3, z:float=2)          """ +        )  def test_type_selection():      assert m.selective_func(np.array([1], dtype=np.int32)) == "Int branch taken."      assert m.selective_func(np.array([1.0], dtype=np.float32)) == "Float branch taken." -    assert m.selective_func(np.array([1.0j], dtype=np.complex64)) == "Complex float branch taken." +    assert ( +        m.selective_func(np.array([1.0j], dtype=np.complex64)) +        == "Complex float branch taken." +    )  def test_docs(doc): -    assert doc(m.vectorized_func) == """ -        vectorized_func(arg0: numpy.ndarray[int32], arg1: numpy.ndarray[float32], arg2: numpy.ndarray[float64]) -> object +    assert ( +        doc(m.vectorized_func) +        == """ +        vectorized_func(arg0: numpy.ndarray[numpy.int32], arg1: numpy.ndarray[numpy.float32], arg2: numpy.ndarray[numpy.float64]) -> object      """  # noqa: E501 line too long +    )  def test_trivial_broadcasting(): @@ -118,16 +158,24 @@ def test_trivial_broadcasting():      assert vectorized_is_trivial(1, 2, 3) == trivial.c_trivial      assert vectorized_is_trivial(np.array(1), np.array(2), 3) == trivial.c_trivial -    assert vectorized_is_trivial(np.array([1, 3]), np.array([2, 4]), 3) == trivial.c_trivial +    assert ( +        vectorized_is_trivial(np.array([1, 3]), np.array([2, 4]), 3) +        == trivial.c_trivial +    )      assert trivial.c_trivial == vectorized_is_trivial( -        np.array([[1, 3, 5], [7, 9, 11]]), np.array([[2, 4, 6], [8, 10, 12]]), 3) -    assert vectorized_is_trivial( -        np.array([[1, 2, 3], [4, 5, 6]]), np.array([2, 3, 4]), 2) == trivial.non_trivial -    assert vectorized_is_trivial( -        np.array([[1, 2, 3], [4, 5, 6]]), np.array([[2], [3]]), 2) == trivial.non_trivial -    z1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype='int32') -    z2 = np.array(z1, dtype='float32') -    z3 = np.array(z1, dtype='float64') +        np.array([[1, 3, 5], [7, 9, 11]]), np.array([[2, 4, 6], [8, 10, 12]]), 3 +    ) +    assert ( +        vectorized_is_trivial(np.array([[1, 2, 3], [4, 5, 6]]), np.array([2, 3, 4]), 2) +        == trivial.non_trivial +    ) +    assert ( +        vectorized_is_trivial(np.array([[1, 2, 3], [4, 5, 6]]), np.array([[2], [3]]), 2) +        == trivial.non_trivial +    ) +    z1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype="int32") +    z2 = np.array(z1, dtype="float32") +    z3 = np.array(z1, dtype="float64")      assert vectorized_is_trivial(z1, z2, z3) == trivial.c_trivial      assert vectorized_is_trivial(1, z2, z3) == trivial.c_trivial      assert vectorized_is_trivial(z1, 1, z3) == trivial.c_trivial @@ -137,7 +185,7 @@ def test_trivial_broadcasting():      assert vectorized_is_trivial(1, 1, z3[::2, ::2]) == trivial.non_trivial      assert vectorized_is_trivial(z1, 1, z3[1::4, 1::4]) == trivial.c_trivial -    y1 = np.array(z1, order='F') +    y1 = np.array(z1, order="F")      y2 = np.array(y1)      y3 = np.array(y1)      assert vectorized_is_trivial(y1, y2, y3) == trivial.f_trivial @@ -158,30 +206,41 @@ def test_trivial_broadcasting():  def test_passthrough_arguments(doc):      assert doc(m.vec_passthrough) == ( -        "vec_passthrough(" + ", ".join([ -            "arg0: float", -            "arg1: numpy.ndarray[float64]", -            "arg2: numpy.ndarray[float64]", -            "arg3: numpy.ndarray[int32]", -            "arg4: int", -            "arg5: m.numpy_vectorize.NonPODClass", -            "arg6: numpy.ndarray[float64]"]) + ") -> object") - -    b = np.array([[10, 20, 30]], dtype='float64') +        "vec_passthrough(" +        + ", ".join( +            [ +                "arg0: float", +                "arg1: numpy.ndarray[numpy.float64]", +                "arg2: numpy.ndarray[numpy.float64]", +                "arg3: numpy.ndarray[numpy.int32]", +                "arg4: int", +                "arg5: m.numpy_vectorize.NonPODClass", +                "arg6: numpy.ndarray[numpy.float64]", +            ] +        ) +        + ") -> object" +    ) + +    b = np.array([[10, 20, 30]], dtype="float64")      c = np.array([100, 200])  # NOT a vectorized argument -    d = np.array([[1000], [2000], [3000]], dtype='int') -    g = np.array([[1000000, 2000000, 3000000]], dtype='int')  # requires casting +    d = np.array([[1000], [2000], [3000]], dtype="int") +    g = np.array([[1000000, 2000000, 3000000]], dtype="int")  # requires casting      assert np.all( -        m.vec_passthrough(1, b, c, d, 10000, m.NonPODClass(100000), g) == -        np.array([[1111111, 2111121, 3111131], -                  [1112111, 2112121, 3112131], -                  [1113111, 2113121, 3113131]])) +        m.vec_passthrough(1, b, c, d, 10000, m.NonPODClass(100000), g) +        == np.array( +            [ +                [1111111, 2111121, 3111131], +                [1112111, 2112121, 3112131], +                [1113111, 2113121, 3113131], +            ] +        ) +    )  def test_method_vectorization():      o = m.VectorizeTestClass(3) -    x = np.array([1, 2], dtype='int') -    y = np.array([[10], [20]], dtype='float32') +    x = np.array([1, 2], dtype="int") +    y = np.array([[10], [20]], dtype="float32")      assert np.all(o.method(x, y) == [[14, 15], [24, 25]]) @@ -190,7 +249,18 @@ def test_array_collapse():      assert not isinstance(m.vectorized_func(np.array(1), 2, 3), np.ndarray)      z = m.vectorized_func([1], 2, 3)      assert isinstance(z, np.ndarray) -    assert z.shape == (1, ) +    assert z.shape == (1,)      z = m.vectorized_func(1, [[[2]]], 3)      assert isinstance(z, np.ndarray)      assert z.shape == (1, 1, 1) + + +def test_vectorized_noreturn(): +    x = m.NonPODClass(0) +    assert x.value == 0 +    m.add_to(x, [1, 2, 3, 4]) +    assert x.value == 10 +    m.add_to(x, 1) +    assert x.value == 11 +    m.add_to(x, [[1, 1], [2, 3]]) +    assert x.value == 18  | 
