[Numpy-discussion] [C++-sig] Overloading sqrt(5.5)*myvector

Bruce Sherwood Bruce_Sherwood at ncsu.edu
Thu Dec 27 10:15:07 EST 2007


I should have added: This structure worked with the older version of 
VPython which used Numeric, but it doesn't work in the beta version 
which uses numpy. Since I don't know enough about either numpy or Boost, 
I'm left guessing which subsystem is the source of my difficulties, and 
clueless about how to remedy them.

Bruce Sherwood

Bruce Sherwood wrote:
> Thanks for the comment, which limits the range of possible solutions. 
> The VPython vector class is implemented in C++, not in Python. I made up 
> the simple test in my previous note to try out the solution that had 
> been offered and which you have usefully ruled out. Here is the relevant 
> part of the vector class, which indeed doesn't look like an ndarray:
>
> inline vector
> operator*( const double s) const throw()
> { return vector( s*x, s*y, s*z); }
>
> and here is the free function for right multiplication:
>
> inline vector
> operator*( const double& s, const vector& v)
> { return vector( s*v.x, s*v.y, s*v.z); }
>
> Maybe the unsolvable problem is in the Boost definitions:
>
> py::class_<vector>("vector", py::init< py::optional<double, double, 
> double> >())
>      .def( self * double())
>      .def( double() * self)
>
> Left multiplication is fine, but right multiplication isn't.
>
> Bruce Sherwood
>
> Robert Kern wrote:
>   
>> Bruce Sherwood wrote:
>>   
>>     
>>> Thanks for the suggestion. It hadn't occurred to me to try to override 
>>> numpy as you suggest. However, when I try the code shown below as the 
>>> start of a test of this scheme, I get the following error:
>>>
>>> Traceback (most recent call last):
>>>   File "C:\Documents and Settings\Bruce\My 
>>> Documents\0VPythonWork\vectors.py", line 24, in <module>
>>>     numpy.float64.__mul__ = new_mul
>>> TypeError: can't set attributes of built-in/extension type 'numpy.float64'
>>>
>>> I'm copying this to the numpy discussion list, as maybe someone there 
>>> will see where to go starting from your suggestion.
>>>     
>>>       
>> Like most (or all) builtin-types, the numpy float scalars do not permit
>> replacing their methods from Python.
>>
>> I'm not familiar with vpython's vector. If you can make it "not look like an
>> ndarray", then you should be able to just implement __rmul__ on vector.
>>
>>   
>>     
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion at scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion
>   



More information about the NumPy-Discussion mailing list