| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| (type == NPY_INT16) ? resample<agg::gray16> : | ||
| (type == NPY_FLOAT32) ? resample<agg::gray32> : | ||
| (type == NPY_FLOAT64) ? resample<agg::gray64> : | ||
| (dtype.is(pybind11::dtype::of<std::uint8_t>())) ? resample<agg::gray8> : |
There was a problem hiding this comment.
This is more verbose than it used to be, but is the recommended way of checking dtypes in pybind11.
Sorry, something went wrong.
There was a problem hiding this comment.
At SciPy Conf 2023, I asked Henry (pybind11 maintainer) if there was a less verbose way to do this type of check and he said this was the best way.
Sorry, something went wrong.
|
I cannot really review it properly, but I am positive to the effort! Are the failing tests somehow related? It seems like they may be, but then they only show up for some Python versions... |
Sorry, something went wrong.
|
The tests are related, but I am away from dev machine at SciPy this week. I'll return to this next week. |
Sorry, something went wrong.
There was a problem hiding this comment.
This PR looks like a fairly straight forward migration!
Sorry, something went wrong.
| if (py_inverse == NULL) { | ||
| return NULL; | ||
| } | ||
| pybind11::ssize_t mesh_dims[2] = {dims[0]*dims[2], 2}; |
There was a problem hiding this comment.
Should this be dims[1]?
| pybind11::ssize_t mesh_dims[2] = {dims[0]*dims[2], 2}; | |
| pybind11::ssize_t mesh_dims[2] = {dims[0]*dims[1], 2}; |
Sorry, something went wrong.
There was a problem hiding this comment.
Yes it should.
Sorry, something went wrong.
There was a problem hiding this comment.
Done.
Sorry, something went wrong.
| if (ndim < 2 || ndim > 3) | ||
| throw std::invalid_argument("Input array must be a 2D or 3D array"); | ||
|
|
||
| if (params.interpolation < 0 || params.interpolation >= _n_interpolation) { |
There was a problem hiding this comment.
Is this _n_interpolation check still required?
Sorry, something went wrong.
There was a problem hiding this comment.
That is a good question. The value is only ever used internally (between the Python and C++ code) and there is no way for a user to get this value as it is not part of the _interpd_ str to enum mapping.
On reflection, I think the correct approach is to remove it completely from the enum.
Sorry, something went wrong.
There was a problem hiding this comment.
Done.
Sorry, something went wrong.
| ¶ms.alpha, &convert_bool, ¶ms.norm, ¶ms.radius)) { | ||
| return NULL; | ||
| } | ||
| if (ndim < 2 || ndim > 3) |
There was a problem hiding this comment.
Very nit:
| if (ndim < 2 || ndim > 3) | |
| if (ndim != 2 || ndim != 3) |
So it's easier to connect the error message with the code.
Sorry, something went wrong.
There was a problem hiding this comment.
OK, but it would need to be ndim != 2 && ndim != 3.
Sorry, something went wrong.
There was a problem hiding this comment.
Done.
Sorry, something went wrong.
There was a problem hiding this comment.
LGTM
Sorry, something went wrong.
| (type == NPY_INT16) ? resample<agg::gray16> : | ||
| (type == NPY_FLOAT32) ? resample<agg::gray32> : | ||
| (type == NPY_FLOAT64) ? resample<agg::gray64> : | ||
| (dtype.is(pybind11::dtype::of<std::uint8_t>())) ? resample<agg::gray8> : |
There was a problem hiding this comment.
At SciPy Conf 2023, I asked Henry (pybind11 maintainer) if there was a less verbose way to do this type of check and he said this was the best way.
Sorry, something went wrong.
|
It looks like pybind11 generates a function signature, so that could be removed from image_resample__doc__. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Closes the fourth item of issue #23846.
This changes the image module to use pybind11 rather than our array_view classes and direct use of the Python/C API. On my Linux dev machine this brings the _image*.so library down from 1.8 MB to 1.0 MB.
I've taken the usual approach of the minimal set of changes to switch to pybind11. This means that in some places we are still passing around pointers to array buffers an integer array dimensions. We could consider improving that in future, but it might be better to leave it as it is using the "if it ain't broke" principle.
The standard approach to using pybind11 is to use the py namespace, i.e.
but I haven't done this as we already have a py namespace in py_adapters.h and we can't keep both separate as importing some of the agg header files, as needed here, inevitably pulls in py_adapters.h. When we have completed the transition to pybind11 we can change this.
There are a number of utility functions in py_converters.h and .cpp which use PyObject and void pointers. I have started a pybind11 equivalent of this in py_converters_11.h and .cpp, and again when the pybind11 transition is completed we can delete the old ones.
With regard to code formatting, I have just done what I would do instinctively without thinking about it much and I am very happy to make changes if anyone has a strong opinion.