diff --git a/dune/python/istl/bvector.hh b/dune/python/istl/bvector.hh index 9ac0eb2c5e480590e91538d3735d329c6f2cd6b0..26bc499af3137a542ac7e8c303ce5620ba6e6ca0 100644 --- a/dune/python/istl/bvector.hh +++ b/dune/python/istl/bvector.hh @@ -156,24 +156,11 @@ namespace Dune cls.def( "__len__", [] ( const BlockVector &self ) { return self.N(); } ); - cls.def( pybind11::self += pybind11::self ); - -// silence a warning (false positive) emitted by clang -// https://bugs.llvm.org/show_bug.cgi?id=43124 -#ifdef __clang__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wself-assign-overloaded" -#endif - - cls.def( pybind11::self -= pybind11::self ); - -#ifdef __clang__ -#pragma GCC diagnostic pop -#endif - detail::registerOneTensorInterface( cls ); detail::registerISTLIterators( cls ); + cls.def( "__iadd__", [] ( BlockVector &self, const BlockVector& x ) -> BlockVector & { self += x; return self; } ); + cls.def( "__isub__", [] ( BlockVector &self, const BlockVector& x ) -> BlockVector & { self -= x; return self; } ); cls.def( "__imul__", [] ( BlockVector &self, field_type x ) -> BlockVector & { self *= x; return self; } ); cls.def( "__idiv__", [] ( BlockVector &self, field_type x ) -> BlockVector & { self /= x; return self; } ); cls.def( "__itruediv__", [] ( BlockVector &self, field_type x ) -> BlockVector & { self /= x; return self; } ); diff --git a/dune/python/test/bcrsmatrix.py b/dune/python/test/bcrsmatrix.py index a074af433498840234a2371bba0592f23f9da467..9da76ff52d5b1e551e7c67a2c888a383063f3dca 100644 --- a/dune/python/test/bcrsmatrix.py +++ b/dune/python/test/bcrsmatrix.py @@ -132,3 +132,12 @@ str_x = str_x +")" if str_x != s: raise Exception(str(x) + " = str(x) != " + s) + +q=x.copy() +q+=q +for i in range(0,5): + assert(q[i][0] == 2*x[i][0]) + +q-=x +for i in range(0,5): + assert(q[i][0] == x[i][0]) \ No newline at end of file