pybind11/tests
Jason Rhinelander b4939fcbfb
Expand std::string_view support to str, bytes, memoryview (#3521)
* Expand string_view support to str, bytes, memoryview

1. Allows constructing a str or bytes implicitly from a string_view;
   this is essentially a small shortcut allowing a caller to write
   `py::bytes{sv}` rather than `py::bytes{sv.data(), sv.size()}`.

2. Allows implicit conversion *to* string_view from py::bytes -- this
   saves a fair bit more as currently there is no simple way to get such
   a view of the bytes without copying it (or resorting to Python API
   calls).

   (This is not done for `str` because when the str contains unicode we
   have to allocate to a temporary and so there might not be some string
   data we can properly view without owning.)

3. Allows `memoryview::from_memory` to accept a string_view.  As with
   the other from_memory calls, it's entirely your responsibility to
   keep it alive.

This also required moving the string_view availability detection into
detail/common.h because this PR needs it in pytypes.h, which is higher
up the include chain than cast.h where it was being detected currently.

* Move string_view include to pytypes.h

* CI-testing a fix for the "ambiguous conversion" issue.

This change is known to fix the `tensorflow::tstring` issue reported under https://github.com/pybind/pybind11/pull/3521#issuecomment-985100965

TODO: Minimal reproducer for the `tensorflow::tstring` issue.

* Make clang-tidy happy (hopefully).

* Adding minimal reproducer for the `tensorflow::tstring` issue.

Error without the enable_if trick:

```
/usr/local/google/home/rwgk/forked/pybind11/tests/test_builtin_casters.cpp:169:16: error: ambiguous conversion for functional-style cast from 'TypeWithBothOperatorStringAndStringView' to 'py::bytes'
        return py::bytes(TypeWithBothOperatorStringAndStringView());
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../pytypes.h:1174:5: note: candidate constructor
    bytes(const std::string &s) : bytes(s.data(), s.size()) { }
    ^
/usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../pytypes.h:1191:5: note: candidate constructor
    bytes(std::string_view s) : bytes(s.data(), s.size()) { }
    ^
```

* Adding missing NOLINTNEXTLINE

* Also apply ambiguous conversion workaround to str()

Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
2021-12-03 13:20:32 -04:00
..
extra_python_package fix: the CMake config in Python package had a hard coded path (#3144) 2021-07-27 17:23:52 -04:00
extra_setuptools fix(setup =_helpers): don't add -g0 CFLAGS sets -g (#3436) 2021-11-08 16:27:32 -05:00
test_cmake_build fix: Set __file__ constant when using eval_file (#1300) (#3233) 2021-09-09 14:06:33 -04:00
test_embed [master] Wrong caching of overrides (#3465) 2021-11-15 13:36:41 -05:00
CMakeLists.txt fix(build): cleaner CMake printouts & IDE folders (#3479) 2021-11-18 10:01:24 -05:00
conftest.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
constructor_stats.h refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
cross_module_gil_utils.cpp Make sure detail::get_internals acquires the GIL before making Python calls. (#1836) 2019-07-15 16:47:02 +02:00
env.py env: Add surrogate for pytest.deprecated_call for ptyest<3.9 (#2923) 2021-04-02 14:34:09 -04:00
local_bindings.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
object.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pybind11_cross_module_tests.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pybind11_tests.cpp refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
pybind11_tests.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pytest.ini Make sure all warnings in pytest get turned into errors (#2838) 2021-02-01 14:52:20 +01:00
requirements.txt ci: support development releases of Python (#3419) 2021-11-17 09:44:19 -05:00
test_async.cpp refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
test_async.py tests: cleanup and ci hardening (#2397) 2020-08-16 16:02:12 -04:00
test_buffers.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_buffers.py Fixing stict vs strict typo. (#3493) 2021-11-22 01:33:03 -08:00
test_builtin_casters.cpp Expand std::string_view support to str, bytes, memoryview (#3521) 2021-12-03 13:20:32 -04:00
test_builtin_casters.py Expand std::string_view support to str, bytes, memoryview (#3521) 2021-12-03 13:20:32 -04:00
test_call_policies.cpp functions: Add doc on incorrect argument index (#2979) 2021-05-06 10:13:30 -04:00
test_call_policies.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_callbacks.cpp fix: memory leak in cpp_function (#3228) (#3229) 2021-08-30 21:48:33 -04:00
test_callbacks.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_chrono.cpp fix: allow assignment of time points of resolutions other than that of a system clock (#2481) 2020-09-13 10:24:00 -04:00
test_chrono.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_class.cpp Fix test case with __new__ (#3285) 2021-09-20 16:03:21 -04:00
test_class.py Enable defining custom __new__ (#3265) 2021-09-20 10:42:14 -04:00
test_constants_and_functions.cpp Removing __INTEL_COMPILER section from pragma block at the top of pybind11.h (#3135) 2021-07-27 15:33:31 -07:00
test_constants_and_functions.py Plug leaking function_records in cpp_function initialization in case of exceptions (found by Valgrind in #2746) (#2756) 2021-01-14 19:34:32 +01:00
test_copy_move.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_copy_move.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_custom_type_casters.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_custom_type_casters.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_custom_type_setup.cpp Add custom_type_setup attribute (#3287) 2021-09-24 12:08:22 -07:00
test_custom_type_setup.py Add custom_type_setup attribute (#3287) 2021-09-24 12:08:22 -07:00
test_docstring_options.cpp fix: do not set docstring for function when empty (#2745) 2020-12-27 22:56:30 -05:00
test_docstring_options.py fix: do not set docstring for function when empty (#2745) 2020-12-27 22:56:30 -05:00
test_eigen.cpp Correct options on Eigen::MappedSparseMatrix & adding MSVC C4127 suppression around Eigen includes. (#3352) 2021-10-11 13:13:01 -07:00
test_eigen.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_enum.cpp Fix enum value's __int__ returning non-int when underlying type is bool or of char type (#1334) 2021-08-26 14:34:24 -07:00
test_enum.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_eval_call.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_eval.cpp test_eval: Show example of working closure (#2743) 2021-08-06 15:51:53 -04:00
test_eval.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_exceptions.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_exceptions.h fix: Mingw64 corrected and add a CI job to test it (#3132) 2021-07-30 13:48:41 -04:00
test_exceptions.py ci: support development releases of Python (#3419) 2021-11-17 09:44:19 -05:00
test_factory_constructors.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_factory_constructors.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_gil_scoped.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_gil_scoped.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_iostream.cpp Adding iostream.h thread-safety documentation. (#2995) 2021-07-12 13:39:06 -07:00
test_iostream.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_kwargs_and_defaults.cpp Fix py::kw_only when used before the first arg of a method (#3488) 2021-11-20 16:01:57 -08:00
test_kwargs_and_defaults.py Fix py::kw_only when used before the first arg of a method (#3488) 2021-11-20 16:01:57 -08:00
test_local_bindings.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_local_bindings.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_methods_and_attributes.cpp fix: add missing std::forward calls (#3443) 2021-11-07 18:35:25 -05:00
test_methods_and_attributes.py fix: add missing std::forward calls (#3443) 2021-11-07 18:35:25 -05:00
test_modules.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_modules.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_multiple_inheritance.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_multiple_inheritance.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_numpy_array.cpp view for numpy arrays (#987) 2021-08-26 14:11:01 -07:00
test_numpy_array.py view for numpy arrays (#987) 2021-08-26 14:11:01 -07:00
test_numpy_dtypes.cpp maint(clang-tidy): Bugprone enable checks (#3166) 2021-08-06 14:30:28 -04:00
test_numpy_dtypes.py ci: extend msys2 mingw CI (#3207) 2021-08-19 14:42:55 -04:00
test_numpy_vectorize.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_numpy_vectorize.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_opaque_types.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_opaque_types.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_operator_overloading.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_operator_overloading.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_pickling.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_pickling.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_pytypes.cpp fix: deprecate make_simple_namespace, fix Python 3.11 (#3374) 2021-10-19 14:39:29 -04:00
test_pytypes.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_sequences_and_iterators.cpp Fix make_key_iterator/make_value_iterator for prvalue iterators (#3348) 2021-10-11 08:35:39 -07:00
test_sequences_and_iterators.py Fix make_key_iterator/make_value_iterator for prvalue iterators (#3348) 2021-10-11 08:35:39 -07:00
test_smart_ptr.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_smart_ptr.py Fix various minor memory leaks in the tests (found by Valgrind in #2746) (#2758) 2021-01-01 17:05:22 +01:00
test_stl_binders.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_stl_binders.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_stl.cpp fix: the types for return_value_policy_override in optional_caster (#3376) 2021-10-25 19:04:45 -07:00
test_stl.py fix: the types for return_value_policy_override in optional_caster (#3376) 2021-10-25 19:04:45 -07:00
test_tagbased_polymorphic.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_tagbased_polymorphic.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_thread.cpp Fix thread safety for pybind11 loader_life_support (#3237) 2021-09-10 12:29:21 -04:00
test_thread.py Fix thread safety for pybind11 loader_life_support (#3237) 2021-09-10 12:29:21 -04:00
test_union.cpp Fix assertion failure for unions (#1685) (#1709) 2019-06-11 23:28:58 +02:00
test_union.py ci: GHA basic format & pre-commit (#2309) 2020-07-20 13:35:21 -04:00
test_virtual_functions.cpp [master] Wrong caching of overrides (#3465) 2021-11-15 13:36:41 -05:00
test_virtual_functions.py [master] Wrong caching of overrides (#3465) 2021-11-15 13:36:41 -05:00
valgrind-numpy-scipy.supp docs: fix various typos (#3075) 2021-07-04 19:58:35 -04:00
valgrind-python.supp chore: get PyPy 3.7 wheels using NumPy 1.20 (#2837) 2021-01-31 17:29:09 -05:00