Since Cython already tries to make division of C integers behave like Python division, I'd expect python-like behavior (mimicking python 2 or 3 as needed) by default and unchanged C integer division when the cdivision directive is set. Best, -Ian Henriksen
On Mon, Sep 7, 2015 at 9:55 PM Robert Bradshaw <rober...@gmail.com> wrote: > On Mon, Sep 7, 2015 at 5:42 PM, Antony Lee <antony....@berkeley.edu> > wrote: > > My 2c (not cc'ed to cython-devel, as I am not registered): > > > > - language_level=3 implies __future__ division. > > - if __future__ division is set: int / int => float (whether variables > are > > untyped (= typed at runtime by python) or typed (including by the > > inferencer)) > > - if __future__ division is not set: int / int => int, with > > opposite-sign-case and zero-divisor-case handled depending on cdivision > > - in both cases, int // int => int, with opposite-sign-case and > > zero-divisor-case handled depending on cdivision (also for % and divmod). > > That's what I'm leaning towards as well, but it is backwards > incompatible. Anyone else have any opinions? > > > 2015-09-07 17:15 GMT-07:00 Robert Bradshaw <rober...@gmail.com>: > >> > >> Or perhaps we should respect float division even with cdivision... > >> Thoughts? > >> > >> On Mon, Sep 7, 2015 at 5:13 PM, Robert Bradshaw <rober...@gmail.com> > >> wrote: > >> > Oh, that's another issue. I'll clarify this in the documentation. > >> > > >> > On Mon, Sep 7, 2015 at 3:59 PM, Antony Lee <antony....@berkeley.edu> > >> > wrote: > >> >> Actually I realized that it's another problem; setting cdivision to > >> >> True (as > >> >> I did in the directive of the example I gave, because I basically > >> >> always set > >> >> this to True) overrides __future__ division and restores the C > division > >> >> semantic that int / int = int. The documentation actually says that > >> >> the > >> >> cdivision directive should only affect the case of operands with > >> >> different > >> >> signs and of division by zero, not whether int / int = int. > >> >> Antony > >> >> > >> >> 2015-09-07 15:50 GMT-07:00 Robert Bradshaw <rober...@gmail.com>: > >> >>> > >> >>> On Mon, Sep 7, 2015 at 3:46 PM, Robert Bradshaw <rober...@gmail.com > > > >> >>> wrote: > >> >>> > On Mon, Sep 7, 2015 at 3:29 PM, Antony Lee < > antony....@berkeley.edu> > >> >>> > wrote: > >> >>> >> Sorry, I intended the entire discussion to apply to the case of > >> >>> >> Python3 > >> >>> >> semantics. Indeed, even with language_level=3 and from > __future__ > >> >>> >> import > >> >>> >> division, foo.decl(3, 3) prints "1, 2, 0, 1" whereas > foo.nodecl(3, > >> >>> >> 3) > >> >>> >> prints > >> >>> >> "1.0, 0.5, 2.0, 1.0". > >> >>> > > >> >>> > from __future__ import division behaves as expected; I just added > >> >>> > some > >> >>> > even more explicit tests: > >> >>> > > >> >>> > > >> >>> > > https://github.com/cython/cython/commit/e61da2eb8a292bc34285c895aade523b6d353414 > >> >>> > > >> >>> > I'm surprised language_level=3 doesn't automatically set this > >> >>> > directive. > >> >>> > >> >>> Are you sure you're setting it correctly? > >> >>> > https://github.com/cython/cython/blob/master/tests/run/cython3.pyx#L30 > >> >>> > >> >>> >> 2015-09-07 15:07 GMT-07:00 Robert Bradshaw <rober...@gmail.com>: > >> >>> >>> > >> >>> >>> On Mon, Sep 7, 2015 at 11:59 AM, Antony Lee > >> >>> >>> <antony....@berkeley.edu> > >> >>> >>> wrote: > >> >>> >>> > I would like to suggest that division of integers with "/" > >> >>> >>> > prints a > >> >>> >>> > warning > >> >>> >>> > at compile time. In my opinion, "/" should be restricted to > >> >>> >>> > float > >> >>> >>> > division, > >> >>> >>> > and "//" should be used when rounding semantics are required. > >> >>> >>> > > >> >>> >>> > Otherwise, we get weird edge cases such as: > >> >>> >>> > > >> >>> >>> > #cython: cdivision=True, infer_types=True > >> >>> >>> > def decl(int m, int n): > >> >>> >>> > for i in range(1, m): > >> >>> >>> > for j in range(1, n): > >> >>> >>> > print(i / j) # integer division > >> >>> >>> > > >> >>> >>> > def nodecl(m, n): > >> >>> >>> > for i in range(1, m): > >> >>> >>> > for j in range(1, n): > >> >>> >>> > print(i / j) # float division > >> >>> >>> > >> >>> >>> Slight correction: int or float division depending on whether > >> >>> >>> you're > >> >>> >>> using Python 2 or Python 3. The runtime type of i/j isn't > >> >>> >>> something we > >> >>> >>> can delegate to the C compiler. > >> >>> >>> > >> >>> >>> > (whose behavior may even change if type inference rules > >> >>> >>> > changes). > >> >>> >>> > > >> >>> >>> > A more extreme choice would be to have "/" always behave like > >> >>> >>> > float > >> >>> >>> > (double) > >> >>> >>> > division even with integer arguments. > >> >>> >>> > >> >>> >>> You mean like putting from __future__ import division at the top > >> >>> >>> of > >> >>> >>> your file? Or compiling with -3 (for Python 3 language > semantics)? > >> >>> >>> > >> >>> >>> -- > >> >>> >>> > >> >>> >>> --- > >> >>> >>> You received this message because you are subscribed to the > Google > >> >>> >>> Groups > >> >>> >>> "cython-users" group. > >> >>> >>> To unsubscribe from this group and stop receiving emails from > it, > >> >>> >>> send > >> >>> >>> an > >> >>> >>> email to cython-users+unsubscr...@googlegroups.com. > >> >>> >>> For more options, visit https://groups.google.com/d/optout. > >> >>> >> > >> >>> >> > >> >>> >> -- > >> >>> >> > >> >>> >> --- > >> >>> >> You received this message because you are subscribed to the > Google > >> >>> >> Groups > >> >>> >> "cython-users" group. > >> >>> >> To unsubscribe from this group and stop receiving emails from it, > >> >>> >> send > >> >>> >> an > >> >>> >> email to cython-users+unsubscr...@googlegroups.com. > >> >>> >> For more options, visit https://groups.google.com/d/optout. > >> >>> > >> >>> -- > >> >>> > >> >>> --- > >> >>> You received this message because you are subscribed to the Google > >> >>> Groups > >> >>> "cython-users" group. > >> >>> To unsubscribe from this group and stop receiving emails from it, > send > >> >>> an > >> >>> email to cython-users+unsubscr...@googlegroups.com. > >> >>> For more options, visit https://groups.google.com/d/optout. > >> >> > >> >> > >> >> -- > >> >> > >> >> --- > >> >> You received this message because you are subscribed to the Google > >> >> Groups > >> >> "cython-users" group. > >> >> To unsubscribe from this group and stop receiving emails from it, > send > >> >> an > >> >> email to cython-users+unsubscr...@googlegroups.com. > >> >> For more options, visit https://groups.google.com/d/optout. > >> > >> -- > >> > >> --- > >> You received this message because you are subscribed to the Google > Groups > >> "cython-users" group. > >> To unsubscribe from this group and stop receiving emails from it, send > an > >> email to cython-users+unsubscr...@googlegroups.com. > >> For more options, visit https://groups.google.com/d/optout. > > > > > > -- > > > > --- > > You received this message because you are subscribed to the Google Groups > > "cython-users" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to cython-users+unsubscr...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > -- > > --- > You received this message because you are subscribed to the Google Groups > "cython-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to cython-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. >
_______________________________________________ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel