mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-25 14:45:12 +00:00
Add unchecked_reference::operator() and operator[] to overload resolution of unchecked_mutable_reference (#2514)
This commit is contained in:
parent
2b6b98e28f
commit
56784c4f42
@ -419,6 +419,10 @@ class unchecked_mutable_reference : public unchecked_reference<T, Dims> {
|
||||
using ConstBase::ConstBase;
|
||||
using ConstBase::Dynamic;
|
||||
public:
|
||||
// Bring in const-qualified versions from base class
|
||||
using ConstBase::operator();
|
||||
using ConstBase::operator[];
|
||||
|
||||
/// Mutable, unchecked access to data at the given indices.
|
||||
template <typename... Ix> T& operator()(Ix... index) {
|
||||
static_assert(ssize_t{sizeof...(Ix)} == Dims || Dynamic,
|
||||
|
@ -318,6 +318,18 @@ TEST_SUBMODULE(numpy_array, sm) {
|
||||
return auxiliaries(r, r2);
|
||||
});
|
||||
|
||||
sm.def("proxy_auxiliaries1_const_ref", [](py::array_t<double> a) {
|
||||
const auto &r = a.unchecked<1>();
|
||||
const auto &r2 = a.mutable_unchecked<1>();
|
||||
return r(0) == r2(0) && r[0] == r2[0];
|
||||
});
|
||||
|
||||
sm.def("proxy_auxiliaries2_const_ref", [](py::array_t<double> a) {
|
||||
const auto &r = a.unchecked<2>();
|
||||
const auto &r2 = a.mutable_unchecked<2>();
|
||||
return r(0, 0) == r2(0, 0);
|
||||
});
|
||||
|
||||
// test_array_unchecked_dyn_dims
|
||||
// Same as the above, but without a compile-time dimensions specification:
|
||||
sm.def("proxy_add2_dyn", [](py::array_t<double> a, double v) {
|
||||
|
@ -364,6 +364,9 @@ def test_array_unchecked_fixed_dims(msg):
|
||||
assert m.proxy_auxiliaries2(z1) == [11, 11, True, 2, 8, 2, 2, 4, 32]
|
||||
assert m.proxy_auxiliaries2(z1) == m.array_auxiliaries2(z1)
|
||||
|
||||
assert m.proxy_auxiliaries1_const_ref(z1[0, :])
|
||||
assert m.proxy_auxiliaries2_const_ref(z1)
|
||||
|
||||
|
||||
def test_array_unchecked_dyn_dims(msg):
|
||||
z1 = np.array([[1, 2], [3, 4]], dtype='float64')
|
||||
|
Loading…
Reference in New Issue
Block a user