From pykde Sat Jul 25 16:24:51 2009 From: Phil Thompson Date: Sat, 25 Jul 2009 16:24:51 +0000 To: pykde Subject: Re: [PyQt] SIP 4.8: regression in div/truediv Message-Id: X-MARC-Message: https://marc.info/?l=pykde&m=124853941408800 On Sat, 25 Jul 2009 03:34:38 +0200, Giovanni Bajo wrote: > On Fri, 24 Jul 2009 22:53:23 +0100, Phil Thompson > wrote: >> On Fri, 24 Jul 2009 20:43:10 +0200, Giovanni Bajo >> wrote: >>> Hello, >>> >>> I'm wrapping with SIP a global C++ operator/() overload, whose first >>> argument is a SIP-wrapped class (within the same module). >>> >>> With SIP 4.7, this function is called when I use "/" in Python, both >>> with standard division behaviour and within modules using "from >>> __future__ import division". >>> >>> With SIP 4.8, this function is called only within modules with standard >>> division behaviour. If a module uses the future directive, using "/" in >>> Python raises an exception saying that there is no valid operand types. >>> >>> I believe that the problem is that the truediv_slot of the object is not > >>> being filled. Is this a wanted change in behaviour? And if so, how am I >>> supposed to fix it? >> >> "/" is the same as __div__. Define __truediv__ for true division. > > I'm not sure that's a good choice for a default. "/" in Python maps to > __div__ in 2.x and __truediv__ in 3.x by default, but the future statement > is meant as an aid for the transition. So it's weird in SIP that simply > declaring something like: > > Foo operator/(Foo f, int x); > > works with Python's "/" in 2.x and 3.x, but *not* when using the transition > aid. > > I believe that "operator/" should map to both the __div__ and the > __truediv__ slot in Python 2.x. People that want to export a finer > granularity to Python (and I believe that it is highly unlikely, given that > C++ itself does not have it in the first place) could do with a > /ClassicDivOnly/ annotation, or by simply manually defining __div__ and > __truediv__ instead of using "operator/". > > Plus, it's a a change in behaviour from SIP 4.7 :) Actually "operator/" is completely broken for Python v3. Should all be fixed in tonight's snapshot - with the 4.7 behavior for Python v2. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt