AcademySoftwareFoundation / AcademySoftwareFoundation/OpenTimelineIO
otio_imath.cpp fails to compile with the latest Imath/pybind11
- Dominant language
- C++
- Stars
- 2k
- Forks
- 351
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 1
Description
There is a patch for 0.18.1 but it fails to apply to master due to other changes.
---errors---
```
[ 96%] Building CXX object src/py-opentimelineio/opentimelineio-bindings/CMakeFiles/_otio.dir/otio_tests.cpp.o
/wrkdirs/usr/ports/multimedia/py-opentimelineio/work-py312/OpenTimelineIO-0.18.1/src/py-opentimelineio/opentime-bindings/opentime_rationalTime.cpp:109:62: warning: 'is_valid_timecode_rate' is deprecated: Use is_smpte_timecode_rate() instead [-Wdeprecated-declarations]
109 | .def_static("is_valid_timecode_rate", &RationalTime::is_valid_timecode_rate, "rate"_a,
| ^
/wrkdirs/usr/ports/multimedia/py-opentimelineio/work-py312/OpenTimelineIO-0.18.1/src/opentime/rationalTime.h:169:7: note: 'is_valid_timecode_rate' has been explicitly marked deprecated here
169 | [[deprecated("Use is_smpte_timecode_rate() instead")]]
| ^
/wrkdirs/usr/ports/multimedia/py-opentimelineio/work-py312/OpenTimelineIO-0.18.1/src/py-opentimelineio/opentime-bindings/opentime_rationalTime.cpp:113:67: warning: 'nearest_valid_timecode_rate' is deprecated: Use nearest_smpte_timecode_rate() instead [-Wdeprecated-declarations]
113 | .def_static("nearest_valid_timecode_rate", &RationalTime::nearest_valid_timecode_rate, "rate"_a,
| ^
/wrkdirs/usr/ports/multimedia/py-opentimelineio/work-py312/OpenTimelineIO-0.18.1/src/opentime/rationalTime.h:176:7: note: 'nearest_valid_timecode_rate' has been explicitly marked deprecated here
176 | [[deprecated("Use nearest_smpte_timecode_rate() instead")]]
| ^
2 warnings generated.
[ 98%] Linking CXX shared module _opentime.cpython-312.so
[ 98%] Built target _opentime
/wrkdirs/usr/ports/multimedia/py-opentimelineio/work-py312/OpenTimelineIO-0.18.1/src/py-opentimelineio/opentimelineio-bindings/otio_imath.cpp:79:10: error: no matching member function for call to 'def'
30 | .def(py::self + py::self)
| ~~~~~~~~~~~~~~~~~~~~~~~~~
31 | .def(py::self * py::self)
| ~~~~~~~~~~~~~~~~~~~~~~~~~
32 | .def(py::self / py::self)
| ~~~~~~~~~~~~~~~~~~~~~~~~~
33 | .def("equalWithAbsError", [](IMATH_NAMESPACE::V2d* v, IMATH_NAMESPACE::V2d const & v2, double e) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34 | return v->equalWithAbsError(v2, e);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 | })
| ~~
36 | .def("equalWithRelError", [](IMATH_NAMESPACE::V2d* v, IMATH_NAMESPACE::V2d const & v2, double e) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 | return v->equalWithRelError(v2, e);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38 | })
| ~~
39 | .def("dot", [](IMATH_NAMESPACE::V2d* v, IMATH_NAMESPACE::V2d const & v2) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 | return v->dot(v2);
| ~~~~~~~~~~~~~~~~~~
41 | })
| ~~
42 | .def("cross", [](IMATH_NAMESPACE::V2d* v, IMATH_NAMESPACE::V2d const & v2) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 | return v->cross(v2);
| ~~~~~~~~~~~~~~~~~~~~
44 | })
| ~~
45 | .def("length", &IMATH_NAMESPACE::V2d::length)
| ~^~~
/wrkdirs/usr/ports/multimedia/py-opentimelineio/work-py312/OpenTimelineIO-0.18.1/src/deps/pybind11/include/pybind11/pybind11.h:1620:13: note: candidate template ignored: couldn't infer template argument 'Func'
1620 | class_ &def(const char *name_, Func &&f, const Extra &...extra) {
| ^
/wrkdirs/usr/ports/multimedia/py-opentimelineio/work-py312/OpenTimelineIO-0.18.1/src/deps/pybind11/include/pybind11/pybind11.h:1645:13: note: candidate template ignored: substitution failure [with T = char[7]]: deduced incomplete pack <(no value)> for template parameter 'Extra'
1644 | template = 0>
```
----patch----
```
$ cat files/patch-src_py-opentimelineio_opentimelineio-bindings_otio_imath.cpp
-- Fix build with newer pybind11/Imath by avoiding member function pointer
-- bindings that trigger template deduction failures due to IMATH_HOSTDEVICE
-- attributes on the member functions.
-- Reference: local poudriere build failure for 0.18.1 on FreeBSD 15-amd64.
--- src/py-opentimelineio/opentimelineio-bindings/otio_imath.cpp.orig
+++ src/py-opentimelineio/opentimelineio-bindings/otio_imath.cpp
@@ -76,14 +76,30 @@
.def("cross", [](IMATH_NAMESPACE::V2d* v, IMATH_NAMESPACE::V2d const & v2) {
return v->cross(v2);
})
- .def("length", &IMATH_NAMESPACE::V2d::length)
- .def("length2", &IMATH_NAMESPACE::V2d::length2)
- .def("normalize", &IMATH_NAMESPACE::V2d::normalize)
- .def("normalizeExc", &IMATH_NAMESPACE::V2d::normalizeExc)
- .def("normalizeNonNull", &IMATH_NAMESPACE::V2d::normalizeNonNull)
- .def("normalized", &IMATH_NAMESPACE::V2d::normalized)
- .def("normalizedExc", &IMATH_NAMESPACE::V2d::normalizedExc)
- .def("normalizedNonNull", &IMATH_NAMESPACE::V2d::normalizedNonNull)
+ .def("length", [](IMATH_NAMESPACE::V2d const& v) {
+ return v.length();
+ })
+ .def("length2", [](IMATH_NAMESPACE::V2d const& v) {
+ return v.length2();
+ })
+ .def("normalize", [](IMATH_NAMESPACE::V2d& v) {
+ return v.normalize();
+ })
+ .def("normalizeExc", [](IMATH_NAMESPACE::V2d& v) {
+ return v.normalizeExc();
+ })
+ .def("normalizeNonNull", [](IMATH_NAMESPACE::V2d& v) {
+ return v.normalizeNonNull();
+ })
+ .def("normalized", [](IMATH_NAMESPACE::V2d const& v) {
+ return v.normalized();
+ })
+ .def("normalizedExc", [](IMATH_NAMESPACE::V2d const& v) {
+ return v.normalizedExc();
+ })
+ .def("normalizedNonNull", [](IMATH_NAMESPACE::V2d const& v) {
+ return v.normalizedNonNull();
+ })
.def_static("baseTypeLowest", []() {
return IMATH_NAMESPACE::V2d::baseTypeLowest();
})
@@ -112,7 +128,9 @@
.def("__ne__", [](IMATH_NAMESPACE::Box2d lhs, py::object const& rhs) {
return lhs != _type_checked(rhs, "!=");
})
- .def("center", &IMATH_NAMESPACE::Box2d::center)
+ .def("center", [](IMATH_NAMESPACE::Box2d const& box) {
+ return box.center();
+ })
.def("extendBy", [](IMATH_NAMESPACE::Box2d* box, IMATH_NAMESPACE::V2d const& point ) {
return box->extendBy(point);
})
```
Contributor guide
Research direction
Start with src/py-opentimelineio/opentimelineio-bindings/otio_imath.cpp and reproduce the reported build using current Imath and pybind11. Review the existing patch and verify that the OpenTimelineIO bindings compile successfully, including the V2d and Box2d methods shown in the issue.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 84/100