8 from pybind11_tests
import detailed_error_messages_enabled
9 from pybind11_tests
import pytypes
as m
13 assert m.handle_from_move_only_type_with_operator_PyObject_ncnst()
14 assert m.handle_from_move_only_type_with_operator_PyObject_const()
18 assert doc(m.get_bool) ==
"get_bool() -> bool" 22 assert doc(m.get_int) ==
"get_int() -> int" 26 assert doc(m.get_iterator) ==
"get_iterator() -> Iterator" 30 assert doc(m.get_iterable) ==
"get_iterable() -> Iterable" 34 assert doc(m.get_float) ==
"get_float() -> float" 38 assert m.list_no_args() == []
39 assert m.list_ssize_t() == []
40 assert m.list_size_t() == []
42 m.list_insert_ssize_t(lins)
43 assert lins == [1, 83, 2]
44 m.list_insert_size_t(lins)
45 assert lins == [1, 83, 2, 57]
49 assert lst == [
"inserted-0",
"overwritten",
"inserted-2"]
56 Entry at position 0: value 57 list item 0: inserted-0 58 list item 1: overwritten 59 list item 2: inserted-2 64 assert doc(m.get_list) ==
"get_list() -> list" 65 assert doc(m.print_list) ==
"print_list(arg0: list) -> None" 69 assert doc(m.get_none) ==
"get_none() -> None" 70 assert doc(m.print_none) ==
"print_none(arg0: None) -> None" 76 assert s == {
"key1",
"key2",
"key3"}
92 assert m.anyset_size(s) == 5
95 assert m.anyset_empty(s)
97 assert not m.anyset_contains(
set(), 42)
98 assert m.anyset_contains({42}, 42)
99 assert m.anyset_contains({
"foo"},
"foo")
101 assert doc(m.get_set) ==
"get_set() -> set" 102 assert doc(m.print_anyset) ==
"print_anyset(arg0: anyset) -> None" 106 s = m.get_frozenset()
108 assert s ==
frozenset({
"key1",
"key2",
"key3"})
120 assert m.anyset_size(s) == 3
121 assert not m.anyset_empty(s)
123 assert not m.anyset_contains(
frozenset(), 42)
124 assert m.anyset_contains(
frozenset({42}), 42)
125 assert m.anyset_contains(
frozenset({
"foo"}),
"foo")
127 assert doc(m.get_frozenset) ==
"get_frozenset() -> frozenset" 132 assert d == {
"key":
"value"}
140 key: key, value=value 141 key: key2, value=value2 145 assert not m.dict_contains({}, 42)
146 assert m.dict_contains({42:
None}, 42)
147 assert m.dict_contains({
"foo":
None},
"foo")
149 assert doc(m.get_dict) ==
"get_dict() -> dict" 150 assert doc(m.print_dict) ==
"print_dict(arg0: dict) -> None" 152 assert m.dict_keyword_constructor() == {
"x": 1,
"y": 2,
"z": 3}
156 assert m.tuple_no_args() == ()
157 assert m.tuple_ssize_t() == ()
158 assert m.tuple_size_t() == ()
159 assert m.get_tuple() == (42,
None,
"spam")
163 ns = m.get_simple_namespace()
167 assert not hasattr(ns,
"wrong")
171 assert m.str_from_char_ssize_t().
encode().
decode() ==
"red" 172 assert m.str_from_char_size_t().
encode().
decode() ==
"blue" 176 assert doc(m.str_from_bytes) ==
"str_from_bytes() -> str" 180 return "this is a str" 183 return "this is a repr" 185 assert m.str_from_object(
A()) ==
"this is a str" 186 assert m.repr_from_object(
A()) ==
"this is a repr" 187 assert m.str_from_handle(
A()) ==
"this is a str" 189 s1, s2 = m.str_format()
190 assert s1 ==
"1 + 2 = 3" 193 malformed_utf8 = b
"\x80" 194 if hasattr(m,
"PYBIND11_STR_LEGACY_PERMISSIVE"):
195 assert m.str_from_object(malformed_utf8)
is malformed_utf8
197 assert m.str_from_object(malformed_utf8) ==
"b'\\x80'" 198 assert m.str_from_handle(malformed_utf8) ==
"b'\\x80'" 200 assert m.str_from_string_from_str(
"this is a str") ==
"this is a str" 201 ucs_surrogates_str =
"\udcc3" 202 with pytest.raises(UnicodeEncodeError):
203 m.str_from_string_from_str(ucs_surrogates_str)
207 assert m.bytes_from_char_ssize_t().
decode() ==
"green" 208 assert m.bytes_from_char_size_t().
decode() ==
"purple" 209 assert m.bytes_from_string().
decode() ==
"foo" 210 assert m.bytes_from_str().
decode() ==
"bar" 212 assert doc(m.bytes_from_str) ==
"bytes_from_str() -> bytes" 216 assert m.bytearray_from_char_ssize_t().
decode() ==
"$%" 217 assert m.bytearray_from_char_size_t().
decode() ==
"@$!" 218 assert m.bytearray_from_string().
decode() ==
"foo" 219 assert m.bytearray_size() ==
len(
"foo")
225 a = m.return_capsule_with_destructor()
237 a = m.return_renamed_capsule_with_destructor()
250 a = m.return_capsule_with_destructor_2()
257 destructing capsule: 1234 262 a = m.return_renamed_capsule_with_destructor_2()
270 destructing capsule: 1234 275 a = m.return_capsule_with_name_and_destructor()
281 created capsule (1234, 'pointer type description') 282 destructing capsule (1234, 'pointer type description') 294 begin_end = [1, 2, 3]
295 d = {
"operator[object]": 1,
"operator[char *]": 2}
296 sub = SubTestObject()
298 def func(self, x, *args):
299 return self.basic_attr + x + sum(args)
301 d = m.accessor_api(TestObject())
302 assert d[
"basic_attr"] == 1
303 assert d[
"begin_end"] == [1, 2, 3]
304 assert d[
"operator[object]"] == 1
305 assert d[
"operator[char *]"] == 2
306 assert d[
"attr(object)"] == 1
307 assert d[
"attr(char *)"] == 2
308 assert d[
"missing_attr_ptr"] ==
"raised" 309 assert d[
"missing_attr_chain"] ==
"raised" 310 assert d[
"is_none"]
is False 311 assert d[
"operator()"] == 2
312 assert d[
"operator*"] == 7
313 assert d[
"implicit_list"] == [1, 2, 3]
314 assert all(x
in TestObject.__dict__
for x
in d[
"implicit_dict"])
316 assert m.tuple_accessor(
tuple()) == (0, 1, 2)
318 d = m.accessor_assignment()
320 assert d[
"deferred_get"] == 0
322 assert d[
"deferred_set"] == 1
323 assert d[
"var"] == 99
327 inc_refs = m.accessor_moves()
329 assert inc_refs == [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
331 pytest.skip(
"Not defined: PYBIND11_HANDLE_REF_DEBUG")
335 """C++ default and converting constructors are equivalent to type calls in Python""" 336 types = [bytes, bytearray, str, bool, int, float, tuple, list, dict, set]
337 expected = {t.__name__:
t()
for t
in types}
338 assert m.default_constructors() == expected
349 dict: [(
"two", 2), (
"one", 1), (
"three", 3)],
350 set: [4, 4, 5, 6, 6, 6],
351 frozenset: [4, 4, 5, 6, 6, 6],
354 inputs = {k.__name__: v
for k, v
in data.items()}
355 expected = {k.__name__: k(v)
for k, v
in data.items()}
357 assert m.converting_constructors(inputs) == expected
358 assert m.cast_functions(inputs) == expected
362 noconv1 = m.converting_constructors(expected)
364 assert noconv1[k]
is expected[k]
366 noconv2 = m.cast_functions(expected)
368 assert noconv2[k]
is expected[k]
372 non_converting_test_cases = [
373 (
"bytes",
range(10)),
378 for t, v
in non_converting_test_cases:
379 for move
in [
True,
False]:
380 with pytest.raises(TypeError)
as excinfo:
381 m.nonconverting_constructor(t, v, move)
383 f
"Object of type '{type(v).__name__}' is not an instance of '{t}'" 385 assert str(excinfo.value) == expected_error
390 cvt = m.convert_to_pybind11_str
391 assert cvt(
"Str") ==
"Str" 392 assert cvt(b
"Bytes") ==
"b'Bytes'" 393 assert cvt(
None) ==
"None" 394 assert cvt(
False) ==
"False" 395 assert cvt(
True) ==
"True" 396 assert cvt(42) ==
"42" 397 assert cvt(2**65) ==
"36893488147419103232" 398 assert cvt(-1.50) ==
"-1.5" 399 assert cvt(()) ==
"()" 400 assert cvt((18,)) ==
"(18,)" 401 assert cvt([]) ==
"[]" 402 assert cvt([28]) ==
"[28]" 403 assert cvt({}) ==
"{}" 404 assert cvt({3: 4}) ==
"{3: 4}" 405 assert cvt(
set()) ==
"set()" 406 assert cvt({3, 3}) ==
"{3}" 409 valid_utf8 = valid_orig.encode(
"utf-8")
410 valid_cvt = cvt(valid_utf8)
411 if hasattr(m,
"PYBIND11_STR_LEGACY_PERMISSIVE"):
412 assert valid_cvt
is valid_utf8
414 assert type(valid_cvt)
is str
415 assert valid_cvt ==
"b'\\xc7\\xb1'" 417 malformed_utf8 = b
"\x80" 418 if hasattr(m,
"PYBIND11_STR_LEGACY_PERMISSIVE"):
419 assert cvt(malformed_utf8)
is malformed_utf8
421 malformed_cvt = cvt(malformed_utf8)
422 assert type(malformed_cvt)
is str
423 assert malformed_cvt ==
"b'\\x80'" 427 """Tests implicit casting when assigning or appending to dicts and lists.""" 428 z = m.get_implicit_casting()
443 assert z[
"l"] == [3, 6, 9, 12, 15]
453 1 2.0 three True -- multiple args 454 *args-and-a-custom-separator 455 no new line here -- next print 457 py::print + str.format = this 460 assert capture.stderr ==
"this goes to stderr" 462 with pytest.raises(RuntimeError)
as excinfo:
464 assert str(excinfo.value) ==
"Unable to convert call argument " + (
465 "'1' of type 'UnregisteredType' to Python object" 466 if detailed_error_messages_enabled
467 else "to Python object (#define PYBIND11_DETAILED_ERROR_MESSAGES or compile in debug mode for details)" 482 assert m.hash_function(Hashable(42)) == 42
483 with pytest.raises(TypeError):
484 m.hash_function(Unhashable())
488 for a, b
in [(1, 1), (3, 5)]:
506 assert m.test_number_protocol(a, b) == li
511 assert li[::2] == m.test_list_slicing(li)
516 assert m.issue2361_str_implicit_copy_none() ==
"None" 517 with pytest.raises(TypeError)
as excinfo:
518 assert m.issue2361_dict_implicit_copy_none()
519 assert "NoneType" in str(excinfo.value)
520 assert "iterable" in str(excinfo.value)
523 @pytest.mark.parametrize(
524 "method, args, fmt, expected_view",
526 (m.test_memoryview_object, (b
"red",),
"B", b
"red"),
527 (m.test_memoryview_buffer_info, (b
"green",),
"B", b
"green"),
528 (m.test_memoryview_from_buffer, (
False,),
"h", [3, 1, 4, 1, 5]),
529 (m.test_memoryview_from_buffer, (
True,),
"H", [2, 7, 1, 8]),
530 (m.test_memoryview_from_buffer_nativeformat, (),
"@i", [4, 7, 5]),
536 assert view.format == fmt
537 assert list(view) ==
list(expected_view)
540 @pytest.mark.xfail(
"env.PYPY", reason=
"getrefcount is not available")
541 @pytest.mark.parametrize(
544 m.test_memoryview_object,
545 m.test_memoryview_buffer_info,
549 buf = b
"\x0a\x0b\x0c\x0d" 550 ref_before = sys.getrefcount(buf)
552 ref_after = sys.getrefcount(buf)
553 assert ref_before < ref_after
558 view = m.test_memoryview_from_buffer_empty_shape()
560 assert view.format ==
"B" 561 assert bytes(view) == b
"" 565 with pytest.raises(RuntimeError):
566 m.test_memoryview_from_buffer_invalid_strides()
570 with pytest.raises(ValueError):
571 m.test_memoryview_from_buffer_nullptr()
575 view = m.test_memoryview_from_memory()
577 assert view.format ==
"B" 578 assert bytes(view) == b
"\xff\xe1\xab\x37" 582 assert m.get_len([i
for i
in range(42)]) == 42
583 with pytest.raises(TypeError)
as exc_info:
584 m.get_len(i
for i
in range(42))
585 assert str(exc_info.value)
in [
586 "object of type 'generator' has no len()",
587 "'generator' has no length",
592 assert m.isinstance_pybind11_bytes(b
"")
593 assert not m.isinstance_pybind11_bytes(
"")
595 assert m.isinstance_pybind11_str(
"")
596 if hasattr(m,
"PYBIND11_STR_LEGACY_PERMISSIVE"):
597 assert m.isinstance_pybind11_str(b
"")
599 assert not m.isinstance_pybind11_str(b
"")
603 assert m.pass_to_pybind11_bytes(b
"Bytes") == 5
604 with pytest.raises(TypeError):
605 m.pass_to_pybind11_bytes(
"Str")
607 if hasattr(m,
"PYBIND11_STR_LEGACY_PERMISSIVE"):
608 assert m.pass_to_pybind11_str(b
"Bytes") == 5
610 with pytest.raises(TypeError):
611 m.pass_to_pybind11_str(b
"Bytes")
612 assert m.pass_to_pybind11_str(
"Str") == 3
614 assert m.pass_to_std_string(b
"Bytes") == 5
615 assert m.pass_to_std_string(
"Str") == 3
617 malformed_utf8 = b
"\x80" 618 if hasattr(m,
"PYBIND11_STR_LEGACY_PERMISSIVE"):
619 assert m.pass_to_pybind11_str(malformed_utf8) == 1
621 with pytest.raises(TypeError):
622 m.pass_to_pybind11_str(malformed_utf8)
625 @pytest.mark.parametrize(
626 "create_weakref, create_weakref_with_callback",
628 (m.weakref_from_handle, m.weakref_from_handle_and_function),
629 (m.weakref_from_object, m.weakref_from_object_and_function),
633 from weakref
import getweakrefcount
636 class WeaklyReferenced:
639 callback_called =
False 642 nonlocal callback_called
643 callback_called =
True 645 obj = WeaklyReferenced()
646 assert getweakrefcount(obj) == 0
647 wr = create_weakref(obj)
648 assert getweakrefcount(obj) == 1
650 obj = WeaklyReferenced()
651 assert getweakrefcount(obj) == 0
652 wr = create_weakref_with_callback(obj, callback)
653 assert getweakrefcount(obj) == 1
654 assert not callback_called
657 assert callback_called
660 @pytest.mark.parametrize(
661 "create_weakref, has_callback",
663 (m.weakref_from_handle,
False),
664 (m.weakref_from_object,
False),
665 (m.weakref_from_handle_and_function,
True),
666 (m.weakref_from_object_and_function,
True),
678 with pytest.raises(TypeError)
if not env.PYPY
else contextlib.nullcontext():
680 _ = create_weakref(ob, callback)
682 _ = create_weakref(ob)
686 assert m.tuple_iterator() == 12
687 assert m.dict_iterator() == 305 + 711
688 assert m.passed_iterator(
iter((-7, 3))) == -4
692 lst = [39, 43, 92, 49, 22, 29, 93, 98, 26, 57, 8]
694 assert m.sequence_item_get_ssize_t(lst) == 43
695 assert m.sequence_item_set_ssize_t(lst)
is None 696 assert lst[1] ==
"peppa" 697 assert m.sequence_item_get_size_t(lst) == 92
698 assert m.sequence_item_set_size_t(lst)
is None 699 assert lst[2] ==
"george" 700 assert m.list_item_get_ssize_t(lst) == 49
701 assert m.list_item_set_ssize_t(lst)
is None 702 assert lst[3] ==
"rebecca" 703 assert m.list_item_get_size_t(lst) == 22
704 assert m.list_item_set_size_t(lst)
is None 705 assert lst[4] ==
"richard" 706 assert m.tuple_item_get_ssize_t(tup) == 29
707 assert m.tuple_item_set_ssize_t() == (
"emely",
"edmond")
708 assert m.tuple_item_get_size_t(tup) == 93
709 assert m.tuple_item_set_size_t() == (
"candy",
"cat")
713 r1 = m.square_float_(2.0)
720 m.tuple_rvalue_getter(tup)
726 m.list_rvalue_getter(my_list)
731 my_dict = {i: i
for i
in range(pop)}
732 assert m.populate_dict_rvalue(pop) == my_dict
737 o = types.SimpleNamespace(**{
str(i): i
for i
in range(pop)})
738 new_o = m.populate_obj_str_attrs(o, pop)
739 new_attrs = {k: v
for k, v
in new_o.__dict__.items()
if not k.startswith(
"_")}
741 assert len(new_attrs) == pop
bool hasattr(handle obj, handle name)
static const Eigen::internal::all_t all
def test_number_protocol()
def test_capsule(capture)
def test_memoryview_refcount(method)
def test_builtin_functions()
Annotation for documentation.
def test_dict(capture, doc)
def test_none(capture, doc)
def test_pybind11_str_raw_str()
iterator iter(handle obj)
bool isinstance(handle obj)
def test_populate_obj_str_attrs()
def test_frozenset(capture, doc)
def test_implementation_details()
def test_test_memoryview_from_buffer_invalid_strides()
def test_test_memoryview_from_buffer_nullptr()
def test_pass_bytes_or_unicode_to_string_types()
def test_external_float_()
def test_list(capture, doc)
def test_set(capture, doc)
def test_memoryview_from_memory()
def test_accessor_moves()
def test_list_rvalue_getter()
def test_handle_from_move_only_type_with_operator_PyObject()
Matrix< Scalar, Dynamic, Dynamic > C
def test_tuple_rvalue_getter()
def test_weakref(create_weakref, create_weakref_with_callback)
def test_non_converting_constructors()
Double_ range(const Point2_ &p, const Point2_ &q)
def test_memoryview_from_buffer_empty_shape()
def test_weakref_err(create_weakref, has_callback)
IndexPair decode(Index ij)
int encode(Index i, Index j)
def test_implicit_casting()
def test_isinstance_string_types()
def test_memoryview(method, args, fmt, expected_view)
size_t len(handle h)
Get the length of a Python object.
def test_simple_namespace()
def test_populate_dict_rvalue()