[Bf-python] mathutil PyNumberMethods behaving badly

Campbell Barton cbarton at metavr.com
Sat Jul 22 05:19:35 CEST 2006


Eeek!
bar==-1
foo==1
> Agree
>
> foo = 1
> bar =  -foo
> bar==1
>
> Vectors should act the same
>
> Id opt for not depricating -vec , but as you say making -vec the same 
> as vec.negated()
>
> Ill have a shot at this, is there any problem with commiting after 
> 2.42 freeze (a few days) - or do you want to review a patch.?
> - Cam
>
>
> Gilbert, Joseph T. wrote:
>> We don't need -vec no. It is a shorthand operator. However, I thought it
>> would be nicer for the end-user.
>>
>> However, now that we have 2 versions of negate(), it's debatable if we
>> want to deprecate -vec because it may lead to confusion as to what it's
>> doing.
>> If we don't want to deprecate it, my suggestion is to give it the
>> behavior of vector.negated() - i.e. return a modified copy.
>>
>> As for the confusing part:
>> Right now you can get the proposed behavior of vector.negated() by
>> doing:
>>
>> Vector(vec).negate()
>>
>> however, most people will do something like this:
>>
>> Vector(vec.negate())
>>
>> which will modify the original vector as well.
>>
>> There needs to be a way to get python-safe copies of wrapped data.
>>
>> Another option might be to add a method to make the object a safe copy
>> if it is not already. Like Local() or Safe_Copy() or something....
>>
>>
>> -----Original Message-----
>> From: bf-python-bounces at projects.blender.org
>> [mailto:bf-python-bounces at projects.blender.org] On Behalf Of Ken Hughes
>> Sent: Friday, July 21, 2006 3:17 AM
>> To: Blender Foundation Python list
>> Subject: Re: [Bf-python] mathutil PyNumberMethods behaving badly
>>
>> Personally I think having -vec, vec.negate() and veg.negated() is a 
>> bit like flammable, inflammable and non-flammable.  A little 
>> confusing and somewhat redundant.  I like the math operations, but 
>> don't think we need
>>
>> a duplicate method for them (if I understand Joseph's suggestion).
>>
>> Also, I was just pointing out a bug.  It needs to be fixed prior to 
>> 2.43, but that's a long way off.  If any of the API rewrite is going 
>> to be done prior to 2.43, I'd like to see the discussion first before 
>> the implementation.
>>
>> $0.02 -- Ken
>>
>> Campbell Barton wrote:
>>  
>>> Hi Joseph, read through this and It sounds like what we want
>>>
>>> Think I suggested that in the first place but we can take it further.
>>> invert() inverted() - inverted would be realy usefull because at the 
>>> moment You have to copy a matrix and then invert it wich can be a bit
>>>     
>> wordy
>>  
>>> omat_i=Blender.Mathutils.Matrix( ob.matrixLocal )  # (wrapped)
>>> omat_i.invert()
>>>
>>> - could be replaced with
>>>
>>> omat_i= ob.matrixLocal.inverted()
>>>
>>> Do you want help with this or would you rather do yourself?
>>> Id like to have this for 2.43
>>>
>>> - Cam
>>>
>>>
>>> Gilbert, Joseph T. wrote:
>>>    
>>>> This was something we discussed a few months ago.
>>>> The proposal was to have a 2 methods. One which returns a
>>>>       
>> self-modified
>>  
>>>> reference and another that returns a modified-copy.
>>>>
>>>> Example:
>>>> ref_to_orig_vector = vector.negate()
>>>> new_mod_vector = vector.negated()
>>>>
>>>> The -vec are shortcuts in pymath. They should be bound to either of
>>>>       
>> the
>>  
>>>> 2 above methods. It would make sense to have them be bound to the
>>>> version that returns a new_modified_vector for safety.
>>>>
>>>> To keep the current API "negate" would continue to do what it does
>>>>       
>> now.
>>  
>>>> We would need to add "negated", etc. for all the self-modifying
>>>>       
>> methods
>>  
>>>> of all the py math objects that require them.
>>>>
>>>> -----Original Message-----
>>>> From: bf-python-bounces at projects.blender.org
>>>> [mailto:bf-python-bounces at projects.blender.org] On Behalf Of Ken
>>>>       
>> Hughes
>>  
>>>> Sent: Thursday, July 20, 2006 2:29 PM
>>>> To: Blender Foundation Python list
>>>> Subject: [Bf-python] mathutil PyNumberMethods behaving badly
>>>>
>>>> Cam discovered a problem in the mathutils with expressions like this:
>>>>
>>>> me = Mesh.Get('Cube')
>>>> x = -me.verts[0].co
>>>> print x
>>>> print me.verts[0].co
>>>>
>>>> You get this:
>>>>
>>>> [-0.565980, -1.386673, 0.000000](vector)
>>>> [-0.565980, -1.386673, 0.000000](vector)
>>>>
>>>> Joseph put in code which modifies the original object, since script 
>>>> users wanted to concatenate operations, but I don't think we really
>>>>       
>> want
>>  
>>>> to this with math operations (i.e., PyNumberMethods).
>>>>
>>>> Seems to me we need two type of operations in mathutils: one modify 
>>>> the original data and return it and ones that don't (now on three: 1,
>>>>       
>>
>>  
>>>> 2, 3, "Duh").  Obviously the math operations shouldn't do this, but 
>>>> looks like
>>>>
>>>> we need to "un-deprecate" some of the original methods like
>>>> vector.negate()
>>>>
>>>> Ken
>>>> _______________________________________________
>>>> Bf-python mailing list
>>>> Bf-python at projects.blender.org
>>>> http://projects.blender.org/mailman/listinfo/bf-python
>>>> _______________________________________________
>>>> Bf-python mailing list
>>>> Bf-python at projects.blender.org
>>>> http://projects.blender.org/mailman/listinfo/bf-python
>>>>
>>>>         
>>>     
>>
>> _______________________________________________
>> Bf-python mailing list
>> Bf-python at projects.blender.org
>> http://projects.blender.org/mailman/listinfo/bf-python
>> _______________________________________________
>> Bf-python mailing list
>> Bf-python at projects.blender.org
>> http://projects.blender.org/mailman/listinfo/bf-python
>>
>>   
>
>


-- 
Campbell J Barton

133 Hope Street
Geelong West, Victoria 3218 Australia

URL:    http://www.metavr.com
e-mail: cbarton at metavr.com
phone: AU (03) 5229 0241



More information about the Bf-python mailing list