#include "prtree/core/prtree.h" #include #include #include namespace py = pybind11; using T = int64_t; // is a temporary type of template. You can change it and // recompile this. const int B = 8; // the number of children of tree. PYBIND11_MODULE(PRTree, m) { m.doc() = R"pbdoc( Priority R-Tree with native float32 and float64 precision support )pbdoc"; // ========== 2D float32 version ========== py::class_>(m, "_PRTree2D_float32") .def(py::init, py::array_t>(), R"pbdoc( Construct PRTree with float32 input (native float32 precision). )pbdoc") .def(py::init<>(), R"pbdoc( Construct empty PRTree. )pbdoc") .def(py::init(), R"pbdoc( Construct PRTree from saved file. )pbdoc") .def("query", &PRTree::find_one, R"pbdoc( Find all indexes which intersect with given bounding box. )pbdoc") .def("batch_query", &PRTree::find_all, R"pbdoc( Parallel query with multi-thread. )pbdoc") .def("batch_query_array", &PRTree::find_all_array, R"pbdoc( Parallel query with multi-thread with array output. )pbdoc") .def("erase", &PRTree::erase, R"pbdoc( Delete from prtree. )pbdoc") .def("set_obj", &PRTree::set_obj, R"pbdoc( Set string by index. )pbdoc") .def("get_obj", &PRTree::get_obj, R"pbdoc( Get string by index. )pbdoc") .def("insert", &PRTree::insert, py::arg("idx"), py::arg("bb"), py::arg("obj") = py::none(), R"pbdoc( Insert one to prtree (float32). )pbdoc") .def("save", &PRTree::save, R"pbdoc( Save prtree to file. )pbdoc") .def("load", &PRTree::load, R"pbdoc( Load prtree from file. )pbdoc") .def("rebuild", &PRTree::rebuild, R"pbdoc( Rebuild prtree. )pbdoc") .def("size", &PRTree::size, R"pbdoc( Get number of elements. )pbdoc") .def("query_intersections", &PRTree::query_intersections, R"pbdoc( Find all pairs of intersecting AABBs. )pbdoc") .def("set_relative_epsilon", &PRTree::set_relative_epsilon, py::arg("epsilon"), R"pbdoc( Set relative epsilon for adaptive precision calculation. )pbdoc") .def("set_absolute_epsilon", &PRTree::set_absolute_epsilon, py::arg("epsilon"), R"pbdoc( Set absolute epsilon for precision calculation. )pbdoc") .def("set_adaptive_epsilon", &PRTree::set_adaptive_epsilon, py::arg("enabled"), R"pbdoc( Enable or disable adaptive epsilon calculation. )pbdoc") .def("set_subnormal_detection", &PRTree::set_subnormal_detection, py::arg("enabled"), R"pbdoc( Enable or disable subnormal number detection. )pbdoc") .def("get_relative_epsilon", &PRTree::get_relative_epsilon, R"pbdoc( Get current relative epsilon value. )pbdoc") .def("get_absolute_epsilon", &PRTree::get_absolute_epsilon, R"pbdoc( Get current absolute epsilon value. )pbdoc") .def("get_adaptive_epsilon", &PRTree::get_adaptive_epsilon, R"pbdoc( Check if adaptive epsilon is enabled. )pbdoc") .def("get_subnormal_detection", &PRTree::get_subnormal_detection, R"pbdoc( Check if subnormal detection is enabled. )pbdoc"); // ========== 2D float64 version ========== py::class_>(m, "_PRTree2D_float64") .def(py::init, py::array_t>(), R"pbdoc( Construct PRTree with float64 input (native double precision). )pbdoc") .def(py::init<>(), R"pbdoc( Construct empty PRTree. )pbdoc") .def(py::init(), R"pbdoc( Construct PRTree from saved file. )pbdoc") .def("query", &PRTree::find_one, R"pbdoc( Find all indexes which intersect with given bounding box. )pbdoc") .def("batch_query", &PRTree::find_all, R"pbdoc( Parallel query with multi-thread. )pbdoc") .def("batch_query_array", &PRTree::find_all_array, R"pbdoc( Parallel query with multi-thread with array output. )pbdoc") .def("erase", &PRTree::erase, R"pbdoc( Delete from prtree. )pbdoc") .def("set_obj", &PRTree::set_obj, R"pbdoc( Set string by index. )pbdoc") .def("get_obj", &PRTree::get_obj, R"pbdoc( Get string by index. )pbdoc") .def("insert", &PRTree::insert, py::arg("idx"), py::arg("bb"), py::arg("obj") = py::none(), R"pbdoc( Insert one to prtree (float64). )pbdoc") .def("save", &PRTree::save, R"pbdoc( Save prtree to file. )pbdoc") .def("load", &PRTree::load, R"pbdoc( Load prtree from file. )pbdoc") .def("rebuild", &PRTree::rebuild, R"pbdoc( Rebuild prtree. )pbdoc") .def("size", &PRTree::size, R"pbdoc( Get number of elements. )pbdoc") .def("query_intersections", &PRTree::query_intersections, R"pbdoc( Find all pairs of intersecting AABBs. )pbdoc") .def("set_relative_epsilon", &PRTree::set_relative_epsilon, py::arg("epsilon"), R"pbdoc( Set relative epsilon for adaptive precision calculation. )pbdoc") .def("set_absolute_epsilon", &PRTree::set_absolute_epsilon, py::arg("epsilon"), R"pbdoc( Set absolute epsilon for precision calculation. )pbdoc") .def("set_adaptive_epsilon", &PRTree::set_adaptive_epsilon, py::arg("enabled"), R"pbdoc( Enable or disable adaptive epsilon calculation. )pbdoc") .def("set_subnormal_detection", &PRTree::set_subnormal_detection, py::arg("enabled"), R"pbdoc( Enable or disable subnormal number detection. )pbdoc") .def("get_relative_epsilon", &PRTree::get_relative_epsilon, R"pbdoc( Get current relative epsilon value. )pbdoc") .def("get_absolute_epsilon", &PRTree::get_absolute_epsilon, R"pbdoc( Get current absolute epsilon value. )pbdoc") .def("get_adaptive_epsilon", &PRTree::get_adaptive_epsilon, R"pbdoc( Check if adaptive epsilon is enabled. )pbdoc") .def("get_subnormal_detection", &PRTree::get_subnormal_detection, R"pbdoc( Check if subnormal detection is enabled. )pbdoc"); // ========== 3D float32 version ========== py::class_>(m, "_PRTree3D_float32") .def(py::init, py::array_t>(), R"pbdoc( Construct PRTree with float32 input (native float32 precision). )pbdoc") .def(py::init<>(), R"pbdoc( Construct empty PRTree. )pbdoc") .def(py::init(), R"pbdoc( Construct PRTree from saved file. )pbdoc") .def("query", &PRTree::find_one, R"pbdoc( Find all indexes which intersect with given bounding box. )pbdoc") .def("batch_query", &PRTree::find_all, R"pbdoc( Parallel query with multi-thread. )pbdoc") .def("batch_query_array", &PRTree::find_all_array, R"pbdoc( Parallel query with multi-thread with array output. )pbdoc") .def("erase", &PRTree::erase, R"pbdoc( Delete from prtree. )pbdoc") .def("set_obj", &PRTree::set_obj, R"pbdoc( Set string by index. )pbdoc") .def("get_obj", &PRTree::get_obj, R"pbdoc( Get string by index. )pbdoc") .def("insert", &PRTree::insert, py::arg("idx"), py::arg("bb"), py::arg("obj") = py::none(), R"pbdoc( Insert one to prtree (float32). )pbdoc") .def("save", &PRTree::save, R"pbdoc( Save prtree to file. )pbdoc") .def("load", &PRTree::load, R"pbdoc( Load prtree from file. )pbdoc") .def("rebuild", &PRTree::rebuild, R"pbdoc( Rebuild prtree. )pbdoc") .def("size", &PRTree::size, R"pbdoc( Get number of elements. )pbdoc") .def("query_intersections", &PRTree::query_intersections, R"pbdoc( Find all pairs of intersecting AABBs. )pbdoc") .def("set_relative_epsilon", &PRTree::set_relative_epsilon, py::arg("epsilon"), R"pbdoc( Set relative epsilon for adaptive precision calculation. )pbdoc") .def("set_absolute_epsilon", &PRTree::set_absolute_epsilon, py::arg("epsilon"), R"pbdoc( Set absolute epsilon for precision calculation. )pbdoc") .def("set_adaptive_epsilon", &PRTree::set_adaptive_epsilon, py::arg("enabled"), R"pbdoc( Enable or disable adaptive epsilon calculation. )pbdoc") .def("set_subnormal_detection", &PRTree::set_subnormal_detection, py::arg("enabled"), R"pbdoc( Enable or disable subnormal number detection. )pbdoc") .def("get_relative_epsilon", &PRTree::get_relative_epsilon, R"pbdoc( Get current relative epsilon value. )pbdoc") .def("get_absolute_epsilon", &PRTree::get_absolute_epsilon, R"pbdoc( Get current absolute epsilon value. )pbdoc") .def("get_adaptive_epsilon", &PRTree::get_adaptive_epsilon, R"pbdoc( Check if adaptive epsilon is enabled. )pbdoc") .def("get_subnormal_detection", &PRTree::get_subnormal_detection, R"pbdoc( Check if subnormal detection is enabled. )pbdoc"); // ========== 3D float64 version ========== py::class_>(m, "_PRTree3D_float64") .def(py::init, py::array_t>(), R"pbdoc( Construct PRTree with float64 input (native double precision). )pbdoc") .def(py::init<>(), R"pbdoc( Construct empty PRTree. )pbdoc") .def(py::init(), R"pbdoc( Construct PRTree from saved file. )pbdoc") .def("query", &PRTree::find_one, R"pbdoc( Find all indexes which intersect with given bounding box. )pbdoc") .def("batch_query", &PRTree::find_all, R"pbdoc( Parallel query with multi-thread. )pbdoc") .def("batch_query_array", &PRTree::find_all_array, R"pbdoc( Parallel query with multi-thread with array output. )pbdoc") .def("erase", &PRTree::erase, R"pbdoc( Delete from prtree. )pbdoc") .def("set_obj", &PRTree::set_obj, R"pbdoc( Set string by index. )pbdoc") .def("get_obj", &PRTree::get_obj, R"pbdoc( Get string by index. )pbdoc") .def("insert", &PRTree::insert, py::arg("idx"), py::arg("bb"), py::arg("obj") = py::none(), R"pbdoc( Insert one to prtree (float64). )pbdoc") .def("save", &PRTree::save, R"pbdoc( Save prtree to file. )pbdoc") .def("load", &PRTree::load, R"pbdoc( Load prtree from file. )pbdoc") .def("rebuild", &PRTree::rebuild, R"pbdoc( Rebuild prtree. )pbdoc") .def("size", &PRTree::size, R"pbdoc( Get number of elements. )pbdoc") .def("query_intersections", &PRTree::query_intersections, R"pbdoc( Find all pairs of intersecting AABBs. )pbdoc") .def("set_relative_epsilon", &PRTree::set_relative_epsilon, py::arg("epsilon"), R"pbdoc( Set relative epsilon for adaptive precision calculation. )pbdoc") .def("set_absolute_epsilon", &PRTree::set_absolute_epsilon, py::arg("epsilon"), R"pbdoc( Set absolute epsilon for precision calculation. )pbdoc") .def("set_adaptive_epsilon", &PRTree::set_adaptive_epsilon, py::arg("enabled"), R"pbdoc( Enable or disable adaptive epsilon calculation. )pbdoc") .def("set_subnormal_detection", &PRTree::set_subnormal_detection, py::arg("enabled"), R"pbdoc( Enable or disable subnormal number detection. )pbdoc") .def("get_relative_epsilon", &PRTree::get_relative_epsilon, R"pbdoc( Get current relative epsilon value. )pbdoc") .def("get_absolute_epsilon", &PRTree::get_absolute_epsilon, R"pbdoc( Get current absolute epsilon value. )pbdoc") .def("get_adaptive_epsilon", &PRTree::get_adaptive_epsilon, R"pbdoc( Check if adaptive epsilon is enabled. )pbdoc") .def("get_subnormal_detection", &PRTree::get_subnormal_detection, R"pbdoc( Check if subnormal detection is enabled. )pbdoc"); // ========== 4D float32 version ========== py::class_>(m, "_PRTree4D_float32") .def(py::init, py::array_t>(), R"pbdoc( Construct PRTree with float32 input (native float32 precision). )pbdoc") .def(py::init<>(), R"pbdoc( Construct empty PRTree. )pbdoc") .def(py::init(), R"pbdoc( Construct PRTree from saved file. )pbdoc") .def("query", &PRTree::find_one, R"pbdoc( Find all indexes which intersect with given bounding box. )pbdoc") .def("batch_query", &PRTree::find_all, R"pbdoc( Parallel query with multi-thread. )pbdoc") .def("batch_query_array", &PRTree::find_all_array, R"pbdoc( Parallel query with multi-thread with array output. )pbdoc") .def("erase", &PRTree::erase, R"pbdoc( Delete from prtree. )pbdoc") .def("set_obj", &PRTree::set_obj, R"pbdoc( Set string by index. )pbdoc") .def("get_obj", &PRTree::get_obj, R"pbdoc( Get string by index. )pbdoc") .def("insert", &PRTree::insert, py::arg("idx"), py::arg("bb"), py::arg("obj") = py::none(), R"pbdoc( Insert one to prtree (float32). )pbdoc") .def("save", &PRTree::save, R"pbdoc( Save prtree to file. )pbdoc") .def("load", &PRTree::load, R"pbdoc( Load prtree from file. )pbdoc") .def("rebuild", &PRTree::rebuild, R"pbdoc( Rebuild prtree. )pbdoc") .def("size", &PRTree::size, R"pbdoc( Get number of elements. )pbdoc") .def("query_intersections", &PRTree::query_intersections, R"pbdoc( Find all pairs of intersecting AABBs. )pbdoc") .def("set_relative_epsilon", &PRTree::set_relative_epsilon, py::arg("epsilon"), R"pbdoc( Set relative epsilon for adaptive precision calculation. )pbdoc") .def("set_absolute_epsilon", &PRTree::set_absolute_epsilon, py::arg("epsilon"), R"pbdoc( Set absolute epsilon for precision calculation. )pbdoc") .def("set_adaptive_epsilon", &PRTree::set_adaptive_epsilon, py::arg("enabled"), R"pbdoc( Enable or disable adaptive epsilon calculation. )pbdoc") .def("set_subnormal_detection", &PRTree::set_subnormal_detection, py::arg("enabled"), R"pbdoc( Enable or disable subnormal number detection. )pbdoc") .def("get_relative_epsilon", &PRTree::get_relative_epsilon, R"pbdoc( Get current relative epsilon value. )pbdoc") .def("get_absolute_epsilon", &PRTree::get_absolute_epsilon, R"pbdoc( Get current absolute epsilon value. )pbdoc") .def("get_adaptive_epsilon", &PRTree::get_adaptive_epsilon, R"pbdoc( Check if adaptive epsilon is enabled. )pbdoc") .def("get_subnormal_detection", &PRTree::get_subnormal_detection, R"pbdoc( Check if subnormal detection is enabled. )pbdoc"); // ========== 4D float64 version ========== py::class_>(m, "_PRTree4D_float64") .def(py::init, py::array_t>(), R"pbdoc( Construct PRTree with float64 input (native double precision). )pbdoc") .def(py::init<>(), R"pbdoc( Construct empty PRTree. )pbdoc") .def(py::init(), R"pbdoc( Construct PRTree from saved file. )pbdoc") .def("query", &PRTree::find_one, R"pbdoc( Find all indexes which intersect with given bounding box. )pbdoc") .def("batch_query", &PRTree::find_all, R"pbdoc( Parallel query with multi-thread. )pbdoc") .def("batch_query_array", &PRTree::find_all_array, R"pbdoc( Parallel query with multi-thread with array output. )pbdoc") .def("erase", &PRTree::erase, R"pbdoc( Delete from prtree. )pbdoc") .def("set_obj", &PRTree::set_obj, R"pbdoc( Set string by index. )pbdoc") .def("get_obj", &PRTree::get_obj, R"pbdoc( Get string by index. )pbdoc") .def("insert", &PRTree::insert, py::arg("idx"), py::arg("bb"), py::arg("obj") = py::none(), R"pbdoc( Insert one to prtree (float64). )pbdoc") .def("save", &PRTree::save, R"pbdoc( Save prtree to file. )pbdoc") .def("load", &PRTree::load, R"pbdoc( Load prtree from file. )pbdoc") .def("rebuild", &PRTree::rebuild, R"pbdoc( Rebuild prtree. )pbdoc") .def("size", &PRTree::size, R"pbdoc( Get number of elements. )pbdoc") .def("query_intersections", &PRTree::query_intersections, R"pbdoc( Find all pairs of intersecting AABBs. )pbdoc") .def("set_relative_epsilon", &PRTree::set_relative_epsilon, py::arg("epsilon"), R"pbdoc( Set relative epsilon for adaptive precision calculation. )pbdoc") .def("set_absolute_epsilon", &PRTree::set_absolute_epsilon, py::arg("epsilon"), R"pbdoc( Set absolute epsilon for precision calculation. )pbdoc") .def("set_adaptive_epsilon", &PRTree::set_adaptive_epsilon, py::arg("enabled"), R"pbdoc( Enable or disable adaptive epsilon calculation. )pbdoc") .def("set_subnormal_detection", &PRTree::set_subnormal_detection, py::arg("enabled"), R"pbdoc( Enable or disable subnormal number detection. )pbdoc") .def("get_relative_epsilon", &PRTree::get_relative_epsilon, R"pbdoc( Get current relative epsilon value. )pbdoc") .def("get_absolute_epsilon", &PRTree::get_absolute_epsilon, R"pbdoc( Get current absolute epsilon value. )pbdoc") .def("get_adaptive_epsilon", &PRTree::get_adaptive_epsilon, R"pbdoc( Check if adaptive epsilon is enabled. )pbdoc") .def("get_subnormal_detection", &PRTree::get_subnormal_detection, R"pbdoc( Check if subnormal detection is enabled. )pbdoc"); #ifdef VERSION_INFO m.attr("__version__") = VERSION_INFO; #else m.attr("__version__") = "dev"; #endif }