[Numpy-discussion] Asking for opinions: Priops

Dag Sverre Seljebotn dagss at student.matnat.uio.no
Thu Sep 23 11:14:06 EDT 2010


Dag Sverre Seljebotn wrote:
> Friedrich Romstedt wrote:
>   
>> I just ran across the problem of priorities with ndarrays again and it
>> keeps biting me.  I did once ago a workaround to get my ``undarray``
>> class's methods be called when being the second operand of e.g.
>> <ndarray> + <undarray>.  But since I wrote it, always Python crashes
>> on exit with the message:
>>
>> Python-32(68665) malloc: *** error for object 0x239680: incorrect
>> checksum for freed object - object was probably modified after being
>> freed.
>> *** set a breakpoint in malloc_error_break to debug
>>
>> (Of course only if I imported the module.  Occasionally I also
>> observed Bus errors, and even segfaults.)
>> I overloaded the numpy ops via numpy.set_numeric_ops() with
>> self-written classes, which are *not* derived from numpy.ufunc, and do
>> not resemble numpy ufuncs completely.
>>
>> So I want to do it properly this time.
>>
>> I therefore started with writing a Letter of Intent, and put it online
>> on http://github.com/friedrichromstedt/priops .
>>
>> Opinions?
>>   
>>     
> I haven't had time to go into the details, but I love the fact that 
> somebody is about to deal with this problem, it's been bothering me as well.
>
> Something that is slightly related that one might as well test is the 
> Sage coercion model. If you haven't, you may want to see if you get 
> anything useful out of http://wiki.sagemath.org/coercion.
>
> Essentially, perhaps what you have sketched up + an ability to extend 
> the graph with object conversion routes would be perfect for my own 
> uses. So you can define a function with overloads (A, B) and (A, C), but 
> also that objects of type D can be converted to C (and how). For 
> instance, consider:
>
> np.array([1,2,3]) + [1,2,3]
>
> Here, list-> array could be handled through a defined coercion to array, 
> rather than having to add an overload for list for every method taking 
> an array.
>
>   
Btw, I was just using numPy as an example, not suggesting that NumPy 
adopt priops (we can "eliminate" NumPy through __array_priority__ , as 
long as everyone else use priops?).

MyObject() + [1,2,3],

with MyObject only knowing about np.ndarray, would have been better...

Dag Sverre



More information about the NumPy-Discussion mailing list