xtensor-stack / xtensor-python

Python bindings for xtensor
BSD 3-Clause "New" or "Revised" License
347 stars 58 forks source link

Doc: add a section for code exposed to both C++ and python #158

Open JohanMabille opened 6 years ago

JohanMabille commented 6 years ago

This section should describe the best practices when functions need to be exposed to both C++ (operating on xtensor / xarray) and Python (operating on pytensor / pyarray)

pelson commented 6 years ago

Are there any examples of doing this anywhere I could take a look at?

JohanMabille commented 6 years ago

You can find an example here. The idea is to put the code in dedicated headers and cpp files that can be compiled in C++ mode only, and to expose them to the python in a single cpp module file.

zhujun98 commented 5 years ago

I am a new xtensor-python user and I found the above example code is nice. However, most of them are related to pyvectorize.

It would be nice if more use cases could be included. For example, I want to modify an numpy.array in-place and I have the following piece of code:

template<typename T>
inline void movingAverage(xt::pyarray<T>& ma, const xt::pyarray<T>& data, size_t count) {
  ma = ma + (data - ma) / T(count);
}

However, on the Python side, I cannot see the change. If I change xt::pyarray to xt::xarray and run the function only in C++, it works. Could you please let me know how to make the Python binding work? Thank you!

SylvainCorlay commented 5 years ago

However, on the Python side, I cannot see the change

This appears to be a legitimate bug. Will be getting back to you shortly with a fix.

OUCyf commented 1 year ago

I have the same problem. Have we solved this question? How to change pyarray from numpy, then see the changes in python