Unverified Commit 6bcd220c authored by Henry Schreiner's avatar Henry Schreiner Committed by GitHub
Browse files

refactor: module -> module_ with typedef (#2544)

* WIP: module -> module_ without typedef

* refactor: allow py::module to work again
parent 560ed3e3
...@@ -18,7 +18,7 @@ TEST_SUBMODULE(async_module, m) { ...@@ -18,7 +18,7 @@ TEST_SUBMODULE(async_module, m) {
.def(py::init<>()) .def(py::init<>())
.def("__await__", [](const SupportsAsync& self) -> py::object { .def("__await__", [](const SupportsAsync& self) -> py::object {
static_cast<void>(self); static_cast<void>(self);
py::object loop = py::module::import("asyncio.events").attr("get_event_loop")(); py::object loop = py::module_::import("asyncio.events").attr("get_event_loop")();
py::object f = loop.attr("create_future")(); py::object f = loop.attr("create_future")();
f.attr("set_result")(5); f.attr("set_result")(5);
return f.attr("__await__")(); return f.attr("__await__")();
......
...@@ -172,12 +172,12 @@ TEST_SUBMODULE(class_, m) { ...@@ -172,12 +172,12 @@ TEST_SUBMODULE(class_, m) {
struct MismatchDerived2 : MismatchBase2 { }; struct MismatchDerived2 : MismatchBase2 { };
m.def("mismatched_holder_1", []() { m.def("mismatched_holder_1", []() {
auto mod = py::module::import("__main__"); auto mod = py::module_::import("__main__");
py::class_<MismatchBase1, std::shared_ptr<MismatchBase1>>(mod, "MismatchBase1"); py::class_<MismatchBase1, std::shared_ptr<MismatchBase1>>(mod, "MismatchBase1");
py::class_<MismatchDerived1, MismatchBase1>(mod, "MismatchDerived1"); py::class_<MismatchDerived1, MismatchBase1>(mod, "MismatchDerived1");
}); });
m.def("mismatched_holder_2", []() { m.def("mismatched_holder_2", []() {
auto mod = py::module::import("__main__"); auto mod = py::module_::import("__main__");
py::class_<MismatchBase2>(mod, "MismatchBase2"); py::class_<MismatchBase2>(mod, "MismatchBase2");
py::class_<MismatchDerived2, std::shared_ptr<MismatchDerived2>, py::class_<MismatchDerived2, std::shared_ptr<MismatchDerived2>,
MismatchBase2>(mod, "MismatchDerived2"); MismatchBase2>(mod, "MismatchDerived2");
......
...@@ -12,10 +12,10 @@ int main(int argc, char *argv[]) { ...@@ -12,10 +12,10 @@ int main(int argc, char *argv[]) {
py::scoped_interpreter guard{}; py::scoped_interpreter guard{};
auto m = py::module::import("test_cmake_build"); auto m = py::module_::import("test_cmake_build");
if (m.attr("add")(1, 2).cast<int>() != 3) if (m.attr("add")(1, 2).cast<int>() != 3)
throw std::runtime_error("embed.cpp failed"); throw std::runtime_error("embed.cpp failed");
py::module::import("sys").attr("argv") = py::make_tuple("test.py", "embed.cpp"); py::module_::import("sys").attr("argv") = py::make_tuple("test.py", "embed.cpp");
py::eval_file(test_py_file, py::globals()); py::eval_file(test_py_file, py::globals());
} }
...@@ -317,11 +317,11 @@ TEST_SUBMODULE(eigen, m) { ...@@ -317,11 +317,11 @@ TEST_SUBMODULE(eigen, m) {
// a new array (np.ones(10)) increases the chances that the temp array will be garbage // a new array (np.ones(10)) increases the chances that the temp array will be garbage
// collected and/or that its memory will be overridden with different values. // collected and/or that its memory will be overridden with different values.
m.def("get_elem_direct", [](Eigen::Ref<const Eigen::VectorXd> v) { m.def("get_elem_direct", [](Eigen::Ref<const Eigen::VectorXd> v) {
py::module::import("numpy").attr("ones")(10); py::module_::import("numpy").attr("ones")(10);
return v(5); return v(5);
}); });
m.def("get_elem_indirect", [](std::vector<Eigen::Ref<const Eigen::VectorXd>> v) { m.def("get_elem_indirect", [](std::vector<Eigen::Ref<const Eigen::VectorXd>> v) {
py::module::import("numpy").attr("ones")(10); py::module_::import("numpy").attr("ones")(10);
return v[0](5); return v[0](5);
}); });
} }
...@@ -51,17 +51,17 @@ PYBIND11_EMBEDDED_MODULE(throw_error_already_set, ) { ...@@ -51,17 +51,17 @@ PYBIND11_EMBEDDED_MODULE(throw_error_already_set, ) {
} }
TEST_CASE("Pass classes and data between modules defined in C++ and Python") { TEST_CASE("Pass classes and data between modules defined in C++ and Python") {
auto module = py::module::import("test_interpreter"); auto module_ = py::module_::import("test_interpreter");
REQUIRE(py::hasattr(module, "DerivedWidget")); REQUIRE(py::hasattr(module_, "DerivedWidget"));
auto locals = py::dict("hello"_a="Hello, World!", "x"_a=5, **module.attr("__dict__")); auto locals = py::dict("hello"_a="Hello, World!", "x"_a=5, **module_.attr("__dict__"));
py::exec(R"( py::exec(R"(
widget = DerivedWidget("{} - {}".format(hello, x)) widget = DerivedWidget("{} - {}".format(hello, x))
message = widget.the_message message = widget.the_message
)", py::globals(), locals); )", py::globals(), locals);
REQUIRE(locals["message"].cast<std::string>() == "Hello, World! - 5"); REQUIRE(locals["message"].cast<std::string>() == "Hello, World! - 5");
auto py_widget = module.attr("DerivedWidget")("The question"); auto py_widget = module_.attr("DerivedWidget")("The question");
auto message = py_widget.attr("the_message"); auto message = py_widget.attr("the_message");
REQUIRE(message.cast<std::string>() == "The question"); REQUIRE(message.cast<std::string>() == "The question");
...@@ -70,10 +70,10 @@ TEST_CASE("Pass classes and data between modules defined in C++ and Python") { ...@@ -70,10 +70,10 @@ TEST_CASE("Pass classes and data between modules defined in C++ and Python") {
} }
TEST_CASE("Import error handling") { TEST_CASE("Import error handling") {
REQUIRE_NOTHROW(py::module::import("widget_module")); REQUIRE_NOTHROW(py::module_::import("widget_module"));
REQUIRE_THROWS_WITH(py::module::import("throw_exception"), REQUIRE_THROWS_WITH(py::module_::import("throw_exception"),
"ImportError: C++ Error"); "ImportError: C++ Error");
REQUIRE_THROWS_WITH(py::module::import("throw_error_already_set"), REQUIRE_THROWS_WITH(py::module_::import("throw_error_already_set"),
Catch::Contains("ImportError: KeyError")); Catch::Contains("ImportError: KeyError"));
} }
...@@ -107,14 +107,14 @@ bool has_pybind11_internals_static() { ...@@ -107,14 +107,14 @@ bool has_pybind11_internals_static() {
TEST_CASE("Restart the interpreter") { TEST_CASE("Restart the interpreter") {
// Verify pre-restart state. // Verify pre-restart state.
REQUIRE(py::module::import("widget_module").attr("add")(1, 2).cast<int>() == 3); REQUIRE(py::module_::import("widget_module").attr("add")(1, 2).cast<int>() == 3);
REQUIRE(has_pybind11_internals_builtin()); REQUIRE(has_pybind11_internals_builtin());
REQUIRE(has_pybind11_internals_static()); REQUIRE(has_pybind11_internals_static());
REQUIRE(py::module::import("external_module").attr("A")(123).attr("value").cast<int>() == 123); REQUIRE(py::module_::import("external_module").attr("A")(123).attr("value").cast<int>() == 123);
// local and foreign module internals should point to the same internals: // local and foreign module internals should point to the same internals:
REQUIRE(reinterpret_cast<uintptr_t>(*py::detail::get_internals_pp()) == REQUIRE(reinterpret_cast<uintptr_t>(*py::detail::get_internals_pp()) ==
py::module::import("external_module").attr("internals_at")().cast<uintptr_t>()); py::module_::import("external_module").attr("internals_at")().cast<uintptr_t>());
// Restart the interpreter. // Restart the interpreter.
py::finalize_interpreter(); py::finalize_interpreter();
...@@ -130,14 +130,14 @@ TEST_CASE("Restart the interpreter") { ...@@ -130,14 +130,14 @@ TEST_CASE("Restart the interpreter") {
REQUIRE(has_pybind11_internals_builtin()); REQUIRE(has_pybind11_internals_builtin());
REQUIRE(has_pybind11_internals_static()); REQUIRE(has_pybind11_internals_static());
REQUIRE(reinterpret_cast<uintptr_t>(*py::detail::get_internals_pp()) == REQUIRE(reinterpret_cast<uintptr_t>(*py::detail::get_internals_pp()) ==
py::module::import("external_module").attr("internals_at")().cast<uintptr_t>()); py::module_::import("external_module").attr("internals_at")().cast<uintptr_t>());
// Make sure that an interpreter with no get_internals() created until finalize still gets the // Make sure that an interpreter with no get_internals() created until finalize still gets the
// internals destroyed // internals destroyed
py::finalize_interpreter(); py::finalize_interpreter();
py::initialize_interpreter(); py::initialize_interpreter();
bool ran = false; bool ran = false;
py::module::import("__main__").attr("internals_destroy_test") = py::module_::import("__main__").attr("internals_destroy_test") =
py::capsule(&ran, [](void *ran) { py::detail::get_internals(); *static_cast<bool *>(ran) = true; }); py::capsule(&ran, [](void *ran) { py::detail::get_internals(); *static_cast<bool *>(ran) = true; });
REQUIRE_FALSE(has_pybind11_internals_builtin()); REQUIRE_FALSE(has_pybind11_internals_builtin());
REQUIRE_FALSE(has_pybind11_internals_static()); REQUIRE_FALSE(has_pybind11_internals_static());
...@@ -149,20 +149,20 @@ TEST_CASE("Restart the interpreter") { ...@@ -149,20 +149,20 @@ TEST_CASE("Restart the interpreter") {
REQUIRE_FALSE(has_pybind11_internals_static()); REQUIRE_FALSE(has_pybind11_internals_static());
// C++ modules can be reloaded. // C++ modules can be reloaded.
auto cpp_module = py::module::import("widget_module"); auto cpp_module = py::module_::import("widget_module");
REQUIRE(cpp_module.attr("add")(1, 2).cast<int>() == 3); REQUIRE(cpp_module.attr("add")(1, 2).cast<int>() == 3);
// C++ type information is reloaded and can be used in python modules. // C++ type information is reloaded and can be used in python modules.
auto py_module = py::module::import("test_interpreter"); auto py_module = py::module_::import("test_interpreter");
auto py_widget = py_module.attr("DerivedWidget")("Hello after restart"); auto py_widget = py_module.attr("DerivedWidget")("Hello after restart");
REQUIRE(py_widget.attr("the_message").cast<std::string>() == "Hello after restart"); REQUIRE(py_widget.attr("the_message").cast<std::string>() == "Hello after restart");
} }
TEST_CASE("Subinterpreter") { TEST_CASE("Subinterpreter") {
// Add tags to the modules in the main interpreter and test the basics. // Add tags to the modules in the main interpreter and test the basics.
py::module::import("__main__").attr("main_tag") = "main interpreter"; py::module_::import("__main__").attr("main_tag") = "main interpreter";
{ {
auto m = py::module::import("widget_module"); auto m = py::module_::import("widget_module");
m.attr("extension_module_tag") = "added to module in main interpreter"; m.attr("extension_module_tag") = "added to module in main interpreter";
REQUIRE(m.attr("add")(1, 2).cast<int>() == 3); REQUIRE(m.attr("add")(1, 2).cast<int>() == 3);
...@@ -181,9 +181,9 @@ TEST_CASE("Subinterpreter") { ...@@ -181,9 +181,9 @@ TEST_CASE("Subinterpreter") {
REQUIRE(has_pybind11_internals_static()); REQUIRE(has_pybind11_internals_static());
// Modules tags should be gone. // Modules tags should be gone.
REQUIRE_FALSE(py::hasattr(py::module::import("__main__"), "tag")); REQUIRE_FALSE(py::hasattr(py::module_::import("__main__"), "tag"));
{ {
auto m = py::module::import("widget_module"); auto m = py::module_::import("widget_module");
REQUIRE_FALSE(py::hasattr(m, "extension_module_tag")); REQUIRE_FALSE(py::hasattr(m, "extension_module_tag"));
// Function bindings should still work. // Function bindings should still work.
...@@ -194,8 +194,8 @@ TEST_CASE("Subinterpreter") { ...@@ -194,8 +194,8 @@ TEST_CASE("Subinterpreter") {
Py_EndInterpreter(sub_tstate); Py_EndInterpreter(sub_tstate);
PyThreadState_Swap(main_tstate); PyThreadState_Swap(main_tstate);
REQUIRE(py::hasattr(py::module::import("__main__"), "main_tag")); REQUIRE(py::hasattr(py::module_::import("__main__"), "main_tag"));
REQUIRE(py::hasattr(py::module::import("widget_module"), "extension_module_tag")); REQUIRE(py::hasattr(py::module_::import("widget_module"), "extension_module_tag"));
} }
TEST_CASE("Execution frame") { TEST_CASE("Execution frame") {
...@@ -245,7 +245,7 @@ TEST_CASE("Reload module from file") { ...@@ -245,7 +245,7 @@ TEST_CASE("Reload module from file") {
// Disable generation of cached bytecode (.pyc files) for this test, otherwise // Disable generation of cached bytecode (.pyc files) for this test, otherwise
// Python might pick up an old version from the cache instead of the new versions // Python might pick up an old version from the cache instead of the new versions
// of the .py files generated below // of the .py files generated below
auto sys = py::module::import("sys"); auto sys = py::module_::import("sys");
bool dont_write_bytecode = sys.attr("dont_write_bytecode").cast<bool>(); bool dont_write_bytecode = sys.attr("dont_write_bytecode").cast<bool>();
sys.attr("dont_write_bytecode") = true; sys.attr("dont_write_bytecode") = true;
// Reset the value at scope exit // Reset the value at scope exit
...@@ -267,8 +267,8 @@ TEST_CASE("Reload module from file") { ...@@ -267,8 +267,8 @@ TEST_CASE("Reload module from file") {
}); });
// Import the module from file // Import the module from file
auto module = py::module::import(module_name.c_str()); auto module_ = py::module_::import(module_name.c_str());
int result = module.attr("test")().cast<int>(); int result = module_.attr("test")().cast<int>();
REQUIRE(result == 1); REQUIRE(result == 1);
// Update the module .py file with a small change // Update the module .py file with a small change
...@@ -278,7 +278,7 @@ TEST_CASE("Reload module from file") { ...@@ -278,7 +278,7 @@ TEST_CASE("Reload module from file") {
test_module.close(); test_module.close();
// Reload the module // Reload the module
module.reload(); module_.reload();
result = module.attr("test")().cast<int>(); result = module_.attr("test")().cast<int>();
REQUIRE(result == 2); REQUIRE(result == 2);
} }
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
TEST_SUBMODULE(eval_, m) { TEST_SUBMODULE(eval_, m) {
// test_evals // test_evals
auto global = py::dict(py::module::import("__main__").attr("__dict__")); auto global = py::dict(py::module_::import("__main__").attr("__dict__"));
m.def("test_eval_statements", [global]() { m.def("test_eval_statements", [global]() {
auto local = py::dict(); auto local = py::dict();
......
...@@ -163,7 +163,7 @@ TEST_SUBMODULE(exceptions, m) { ...@@ -163,7 +163,7 @@ TEST_SUBMODULE(exceptions, m) {
m.def("modulenotfound_exception_matches_base", []() { m.def("modulenotfound_exception_matches_base", []() {
try { try {
// On Python >= 3.6, this raises a ModuleNotFoundError, a subclass of ImportError // On Python >= 3.6, this raises a ModuleNotFoundError, a subclass of ImportError
py::module::import("nonexistent"); py::module_::import("nonexistent");
} }
catch (py::error_already_set &ex) { catch (py::error_already_set &ex) {
if (!ex.matches(PyExc_ImportError)) throw; if (!ex.matches(PyExc_ImportError)) throw;
......
...@@ -142,7 +142,7 @@ public: ...@@ -142,7 +142,7 @@ public:
TEST_SUBMODULE(factory_constructors, m) { TEST_SUBMODULE(factory_constructors, m) {
// Define various trivial types to allow simpler overload resolution: // Define various trivial types to allow simpler overload resolution:
py::module m_tag = m.def_submodule("tag"); py::module_ m_tag = m.def_submodule("tag");
#define MAKE_TAG_TYPE(Name) \ #define MAKE_TAG_TYPE(Name) \
struct Name##_tag {}; \ struct Name##_tag {}; \
py::class_<Name##_tag>(m_tag, #Name "_tag").def(py::init<>()); \ py::class_<Name##_tag>(m_tag, #Name "_tag").def(py::init<>()); \
......
...@@ -45,7 +45,7 @@ TEST_SUBMODULE(gil_scoped, m) { ...@@ -45,7 +45,7 @@ TEST_SUBMODULE(gil_scoped, m) {
[](VirtClass &virt) { virt.pure_virtual_func(); }); [](VirtClass &virt) { virt.pure_virtual_func(); });
m.def("test_cross_module_gil", m.def("test_cross_module_gil",
[]() { []() {
auto cm = py::module::import("cross_module_gil_utils"); auto cm = py::module_::import("cross_module_gil_utils");
auto gil_acquire = reinterpret_cast<void (*)()>( auto gil_acquire = reinterpret_cast<void (*)()>(
PyLong_AsVoidPtr(cm.attr("gil_acquire_funcaddr").ptr())); PyLong_AsVoidPtr(cm.attr("gil_acquire_funcaddr").ptr()));
py::gil_scoped_release gil_release; py::gil_scoped_release gil_release;
......
...@@ -37,7 +37,7 @@ TEST_SUBMODULE(iostream, m) { ...@@ -37,7 +37,7 @@ TEST_SUBMODULE(iostream, m) {
}); });
m.def("captured_output", [](std::string msg) { m.def("captured_output", [](std::string msg) {
py::scoped_ostream_redirect redir(std::cout, py::module::import("sys").attr("stdout")); py::scoped_ostream_redirect redir(std::cout, py::module_::import("sys").attr("stdout"));
std::cout << msg << std::flush; std::cout << msg << std::flush;
}); });
...@@ -46,7 +46,7 @@ TEST_SUBMODULE(iostream, m) { ...@@ -46,7 +46,7 @@ TEST_SUBMODULE(iostream, m) {
py::arg("msg"), py::arg("flush")=true); py::arg("msg"), py::arg("flush")=true);
m.def("captured_err", [](std::string msg) { m.def("captured_err", [](std::string msg) {
py::scoped_ostream_redirect redir(std::cerr, py::module::import("sys").attr("stderr")); py::scoped_ostream_redirect redir(std::cerr, py::module_::import("sys").attr("stderr"));
std::cerr << msg << std::flush; std::cerr << msg << std::flush;
}); });
...@@ -65,8 +65,8 @@ TEST_SUBMODULE(iostream, m) { ...@@ -65,8 +65,8 @@ TEST_SUBMODULE(iostream, m) {
}); });
m.def("captured_dual", [](std::string msg, std::string emsg) { m.def("captured_dual", [](std::string msg, std::string emsg) {
py::scoped_ostream_redirect redirout(std::cout, py::module::import("sys").attr("stdout")); py::scoped_ostream_redirect redirout(std::cout, py::module_::import("sys").attr("stdout"));
py::scoped_ostream_redirect redirerr(std::cerr, py::module::import("sys").attr("stderr")); py::scoped_ostream_redirect redirerr(std::cerr, py::module_::import("sys").attr("stderr"));
std::cout << msg << std::flush; std::cout << msg << std::flush;
std::cerr << emsg << std::flush; std::cerr << emsg << std::flush;
}); });
......
...@@ -107,7 +107,7 @@ TEST_SUBMODULE(kwargs_and_defaults, m) { ...@@ -107,7 +107,7 @@ TEST_SUBMODULE(kwargs_and_defaults, m) {
return py::make_tuple(i, j, k, kwargs); }, return py::make_tuple(i, j, k, kwargs); },
py::arg() /* positional */, py::arg("j") = -1 /* both */, py::kw_only(), py::arg("k") /* kw-only */); py::arg() /* positional */, py::arg("j") = -1 /* both */, py::kw_only(), py::arg("k") /* kw-only */);
m.def("register_invalid_kw_only", [](py::module m) { m.def("register_invalid_kw_only", [](py::module_ m) {
m.def("bad_kw_only", [](int i, int j) { return py::make_tuple(i, j); }, m.def("bad_kw_only", [](int i, int j) { return py::make_tuple(i, j); },
py::kw_only(), py::arg() /* invalid unnamed argument */, "j"_a); py::kw_only(), py::arg() /* invalid unnamed argument */, "j"_a);
}); });
...@@ -138,5 +138,5 @@ TEST_SUBMODULE(kwargs_and_defaults, m) { ...@@ -138,5 +138,5 @@ TEST_SUBMODULE(kwargs_and_defaults, m) {
// Make sure a class (not an instance) can be used as a default argument. // Make sure a class (not an instance) can be used as a default argument.
// The return value doesn't matter, only that the module is importable. // The return value doesn't matter, only that the module is importable.
m.def("class_default_argument", [](py::object a) { return py::repr(a); }, m.def("class_default_argument", [](py::object a) { return py::repr(a); },
"a"_a = py::module::import("decimal").attr("Decimal")); "a"_a = py::module_::import("decimal").attr("Decimal"));
} }
...@@ -41,7 +41,7 @@ TEST_SUBMODULE(local_bindings, m) { ...@@ -41,7 +41,7 @@ TEST_SUBMODULE(local_bindings, m) {
// should raise a runtime error from the duplicate definition attempt. If test_class isn't // should raise a runtime error from the duplicate definition attempt. If test_class isn't
// available it *also* throws a runtime error (with "test_class not enabled" as value). // available it *also* throws a runtime error (with "test_class not enabled" as value).
m.def("register_local_external", [m]() { m.def("register_local_external", [m]() {
auto main = py::module::import("pybind11_tests"); auto main = py::module_::import("pybind11_tests");
if (py::hasattr(main, "class_")) { if (py::hasattr(main, "class_")) {
bind_local<LocalExternal, 7>(m, "LocalExternal", py::module_local()); bind_local<LocalExternal, 7>(m, "LocalExternal", py::module_local());
} }
......
...@@ -207,12 +207,12 @@ TEST_SUBMODULE(methods_and_attributes, m) { ...@@ -207,12 +207,12 @@ TEST_SUBMODULE(methods_and_attributes, m) {
// test_no_mixed_overloads // test_no_mixed_overloads
// Raise error if trying to mix static/non-static overloads on the same name: // Raise error if trying to mix static/non-static overloads on the same name:
.def_static("add_mixed_overloads1", []() { .def_static("add_mixed_overloads1", []() {
auto emna = py::reinterpret_borrow<py::class_<ExampleMandA>>(py::module::import("pybind11_tests.methods_and_attributes").attr("ExampleMandA")); auto emna = py::reinterpret_borrow<py::class_<ExampleMandA>>(py::module_::import("pybind11_tests.methods_and_attributes").attr("ExampleMandA"));
emna.def ("overload_mixed1", static_cast<py::str (ExampleMandA::*)(int, int)>(&ExampleMandA::overloaded)) emna.def ("overload_mixed1", static_cast<py::str (ExampleMandA::*)(int, int)>(&ExampleMandA::overloaded))
.def_static("overload_mixed1", static_cast<py::str ( *)(float )>(&ExampleMandA::overloaded)); .def_static("overload_mixed1", static_cast<py::str ( *)(float )>(&ExampleMandA::overloaded));
}) })
.def_static("add_mixed_overloads2", []() { .def_static("add_mixed_overloads2", []() {
auto emna = py::reinterpret_borrow<py::class_<ExampleMandA>>(py::module::import("pybind11_tests.methods_and_attributes").attr("ExampleMandA")); auto emna = py::reinterpret_borrow<py::class_<ExampleMandA>>(py::module_::import("pybind11_tests.methods_and_attributes").attr("ExampleMandA"));
emna.def_static("overload_mixed2", static_cast<py::str ( *)(float )>(&ExampleMandA::overloaded)) emna.def_static("overload_mixed2", static_cast<py::str ( *)(float )>(&ExampleMandA::overloaded))
.def ("overload_mixed2", static_cast<py::str (ExampleMandA::*)(int, int)>(&ExampleMandA::overloaded)); .def ("overload_mixed2", static_cast<py::str (ExampleMandA::*)(int, int)>(&ExampleMandA::overloaded));
}) })
...@@ -308,11 +308,11 @@ TEST_SUBMODULE(methods_and_attributes, m) { ...@@ -308,11 +308,11 @@ TEST_SUBMODULE(methods_and_attributes, m) {
m.attr("debug_enabled") = false; m.attr("debug_enabled") = false;
#endif #endif
m.def("bad_arg_def_named", []{ m.def("bad_arg_def_named", []{
auto m = py::module::import("pybind11_tests"); auto m = py::module_::import("pybind11_tests");
m.def("should_fail", [](int, UnregisteredType) {}, py::arg(), py::arg("a") = UnregisteredType()); m.def("should_fail", [](int, UnregisteredType) {}, py::arg(), py::arg("a") = UnregisteredType());
}); });
m.def("bad_arg_def_unnamed", []{ m.def("bad_arg_def_unnamed", []{
auto m = py::module::import("pybind11_tests"); auto m = py::module_::import("pybind11_tests");
m.def("should_fail", [](int, UnregisteredType) {}, py::arg(), py::arg() = UnregisteredType()); m.def("should_fail", [](int, UnregisteredType) {}, py::arg(), py::arg() = UnregisteredType());
}); });
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
TEST_SUBMODULE(modules, m) { TEST_SUBMODULE(modules, m) {
// test_nested_modules // test_nested_modules
// This is intentionally "py::module" to verify it still can be used in place of "py::module_"
py::module m_sub = m.def_submodule("subsubmodule"); py::module m_sub = m.def_submodule("subsubmodule");
m_sub.def("submodule_func", []() { return "submodule_func()"; }); m_sub.def("submodule_func", []() { return "submodule_func()"; });
...@@ -50,6 +51,7 @@ TEST_SUBMODULE(modules, m) { ...@@ -50,6 +51,7 @@ TEST_SUBMODULE(modules, m) {
.def_readwrite("a1", &B::a1) // def_readonly uses an internal reference return policy by default .def_readwrite("a1", &B::a1) // def_readonly uses an internal reference return policy by default
.def_readwrite("a2", &B::a2); .def_readwrite("a2", &B::a2);
// This is intentionally "py::module" to verify it still can be used in place of "py::module_"
m.attr("OD") = py::module::import("collections").attr("OrderedDict"); m.attr("OD") = py::module::import("collections").attr("OrderedDict");
// test_duplicate_registration // test_duplicate_registration
...@@ -60,7 +62,7 @@ TEST_SUBMODULE(modules, m) { ...@@ -60,7 +62,7 @@ TEST_SUBMODULE(modules, m) {
class Dupe3 { }; class Dupe3 { };
class DupeException { }; class DupeException { };
auto dm = py::module("dummy"); auto dm = py::module_("dummy");
auto failures = py::list(); auto failures = py::list();
py::class_<Dupe1>(dm, "Dupe1"); py::class_<Dupe1>(dm, "Dupe1");
......
...@@ -22,7 +22,7 @@ struct DtypeCheck { ...@@ -22,7 +22,7 @@ struct DtypeCheck {
template <typename T> template <typename T>
DtypeCheck get_dtype_check(const char* name) { DtypeCheck get_dtype_check(const char* name) {
py::module np = py::module::import("numpy"); py::module_ np = py::module_::import("numpy");
DtypeCheck check{}; DtypeCheck check{};
check.numpy = np.attr("dtype")(np.attr(name)); check.numpy = np.attr("dtype")(np.attr(name));
check.pybind11 = py::dtype::of<T>(); check.pybind11 = py::dtype::of<T>();
...@@ -133,7 +133,7 @@ template <typename T, typename T2> py::handle auxiliaries(T &&r, T2 &&r2) { ...@@ -133,7 +133,7 @@ template <typename T, typename T2> py::handle auxiliaries(T &&r, T2 &&r2) {
static int data_i = 42; static int data_i = 42;
TEST_SUBMODULE(numpy_array, sm) { TEST_SUBMODULE(numpy_array, sm) {
try { py::module::import("numpy"); } try { py::module_::import("numpy"); }
catch (...) { return; } catch (...) { return; }
// test_dtypes // test_dtypes
......
...@@ -255,7 +255,7 @@ struct A {}; ...@@ -255,7 +255,7 @@ struct A {};
struct B {}; struct B {};
TEST_SUBMODULE(numpy_dtypes, m) { TEST_SUBMODULE(numpy_dtypes, m) {
try { py::module::import("numpy"); } try { py::module_::import("numpy"); }
catch (...) { return; } catch (...) { return; }
// typeinfo may be registered before the dtype descriptor for scalar casts to work... // typeinfo may be registered before the dtype descriptor for scalar casts to work...
......
...@@ -17,7 +17,7 @@ double my_func(int x, float y, double z) { ...@@ -17,7 +17,7 @@ double my_func(int x, float y, double z) {
} }
TEST_SUBMODULE(numpy_vectorize, m) { TEST_SUBMODULE(numpy_vectorize, m) {
try { py::module::import("numpy"); } try { py::module_::import("numpy"); }
catch (...) { return; } catch (...) { return; }
// test_vectorize, test_docs, test_array_collapse // test_vectorize, test_docs, test_array_collapse
......
...@@ -289,7 +289,7 @@ TEST_SUBMODULE(pytypes, m) { ...@@ -289,7 +289,7 @@ TEST_SUBMODULE(pytypes, m) {
py::print("no new line here", "end"_a=" -- "); py::print("no new line here", "end"_a=" -- ");
py::print("next print"); py::print("next print");
auto py_stderr = py::module::import("sys").attr("stderr"); auto py_stderr = py::module_::import("sys").attr("stderr");
py::print("this goes to stderr", "file"_a=py_stderr); py::print("this goes to stderr", "file"_a=py_stderr);
py::print("flush", "flush"_a=true); py::print("flush", "flush"_a=true);
......
...@@ -117,7 +117,7 @@ TEST_SUBMODULE(stl_binders, m) { ...@@ -117,7 +117,7 @@ TEST_SUBMODULE(stl_binders, m) {
}); });
// The rest depends on numpy: // The rest depends on numpy:
try { py::module::import("numpy"); } try { py::module_::import("numpy"); }
catch (...) { return; } catch (...) { return; }
// test_vector_buffer_numpy // test_vector_buffer_numpy
......
...@@ -187,7 +187,7 @@ static void test_gil_from_thread() { ...@@ -187,7 +187,7 @@ static void test_gil_from_thread() {
// Forward declaration (so that we can put the main tests here; the inherited virtual approaches are // Forward declaration (so that we can put the main tests here; the inherited virtual approaches are
// rather long). // rather long).
void initialize_inherited_virtuals(py::module &m); void initialize_inherited_virtuals(py::module_ &m);
TEST_SUBMODULE(virtual_functions, m) { TEST_SUBMODULE(virtual_functions, m) {
// test_override // test_override
...@@ -459,7 +459,7 @@ public: ...@@ -459,7 +459,7 @@ public:
}; };
*/ */
void initialize_inherited_virtuals(py::module &m) { void initialize_inherited_virtuals(py::module_ &m) {
// test_inherited_virtuals // test_inherited_virtuals
// Method 1: repeat // Method 1: repeat
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment