[Numpy-discussion] Proposed X.flat solution

Travis Oliphant oliphant at ee.byu.edu
Fri Feb 18 13:25:22 CST 2005


David M. Cooke wrote:

>>In fact, it probably stands to reason that whenever, UPDATEIFCOPY is
>>used on the C-level, the to-be-copied-to array is flagged readonly for
>>the duration of existence of the "reference."
>>    
>>
>
>Ugh. I realize I'm going to have to sit down and think on this first,
>and look at code. My gut feeling is UPDATEIFCOPY and read-write-locks
>(which is essentially what you're proposing) will make for some odd,
>hard-to-track down, errors.
>  
>
The problem is with this idea of UPDATEIFCOPY which is borrowed from 
numarray and which users over there seem to like.   It just seems to
me that if an array is going to be "automatically" copied back to 
another array (this is currently done in numarray), then the 
array-to-be-copied to
needs to be flagged read-only until the copy is complete.  Then, an 
error will be raised whenever the users tries to do something that would
cause "hard-to-track-down" bugs (like write to an array that is going to 
be clobbered by a copy-back).  

If the UPDATEIFCOPY is only used for C-extensions where you need to get 
a nice array from a potentially "bad" one (e.g. contiguous from 
discontiguous) and the thinking is that you would not be using the 
original one while you played with the copy.  But, if the C-extension 
calls arbitrary code (as is sometimes done), then this is not 
guaranteed.  So, I think, if you are going to have UPDATEIFCOPY, you 
need to set the original array readonly until the copy is complete.


>  
>
>>     b) having X.flat return an update-if-copy array (with X flagged
>>as readonly while a reference to X.flat exists)
>>    
>>
>
>  
>
Yeah, I don't like this anymore either. 


I like X.flatten() better than X.ravel() too. 

-Travis






More information about the Numpy-discussion mailing list