On Fri, Apr 11, 2008 at 10:43 AM, Ryan Hinton <[EMAIL PROTECTED]> wrote: > > Sorry, I meant to. One problem is that the Sage pre-parsing results > in different behavior than I am seeing, so pasting code into a Sage > session will not exhibit the problem I am seeing.
Include sage: preparse(False) at the top of the example to turn off the Sage preparser. Alternatively, you can do Integer=int; RealNumber=float to turn off just bits of it. It looks like below the issue is that you want to use the Python builtin round instead of Sage's round. That Sage uses it's round instead the builtin one by default has nothing to do with the preparse. It's just because we import our own round in from sage.all import * We do that because the semantics of Python's builtin round aren't optimal for Sage. > > Let me see if I can cajole Sage into giving similar behavior from the > prompt. > > sage: import __builtin__ > sage: fracs_list = [RealNumber(0.5), RealNumber(0.3), RealNumber(0.2)] > sage: length = 10 > > sage: vector([__builtin__.round(frac*length) for frac in fracs_list]) > --------------------------------------------------------------------------- > <type 'exceptions.TypeError'> Traceback (most recent call > last) > ... > <type 'exceptions.TypeError'>: unable to find a common ring for all > elements > > sage: vector([int(__builtin__.round(frac*length)) for frac in > fracs_list]) > --------------------------------------------------------------------------- > <type 'exceptions.TypeError'> Traceback (most recent call > last) > ... > <type 'exceptions.TypeError'>: unable to find a common ring for all > elements > > sage: vector([Integer(int(__builtin__.round(frac*length))) for frac in > fracs_list]) > (5, 3, 2) > > The last answer is what I want. It seems like two type casts is a > little excessive. Maybe I should import the round() method from Sage > instead of importing Integer. > > On Apr 11, 5:01 pm, "William Stein" <[EMAIL PROTECTED]> wrote: > > > > On Fri, Apr 11, 2008 at 9:58 AM, Ryan Hinton <[EMAIL PROTECTED]> wrote: > > > > > There must be an easier way to do this. In a Python class I have a list > > > of RealNumber elements, "fracs_list". I want to multiply them by a > > > common scalar "length" and round them to get a vector of integers. I > > > have tried many permutations of the following code, most of which fail. > > > This works, but it's ugly! > > > > You'll likely get a much better response from sage-support if you post > > some example session that works so people can start from that and > > know that they are looking at the right problem. E.g., define fracs_list > > and length below so that people can just paste in three lines and have > > something work. Thanks! > > > > > > > > > > > > > answer = vector([Integer(int(round(frac*length))) for frac in > fracs_list]) > > > > > ipdb> type(self.var_fracs[0]) > > > <type 'sage.rings.real_mpfr.RealNumber'> > > > > > ipdb> type(length) > > > <type 'sage.rings.integer.Integer'> > > > > > ipdb> type(length * fracs_list[0]) > > > <type 'sage.rings.real_mpfr.RealNumber'> > > > > > ipdb> type(round(length * fracs_list[0])) > > > <type 'float'> > > > > > ipdb> Integer(round(length * fracs_list[0])) > > > > > ipdb> answer = vector([round(frac*length) for frac in fracs_list]) > > > *** TypeError: unable to find a common ring for all elements > > > > > ipdb> answer = vector([int(round(frac*length)) for frac in fracs_list]) > > > *** TypeError: unable to find a common ring for all elements > > > > > ipdb> answer = vector([Integer(round(frac*length)) for frac in > fracs_list]) > > > *** TypeError: unable to coerce element to an integer > > > > > ipdb> answer = vector(IntegerRing(), [round(frac*length) for frac in > > > fracs_list]) > > > *** TypeError: unable to coerce element to an integer > > > > > Any suggestions on how to get this computation without less than the > > > round and two type conversions? > > > > > Thanks! > > > > > --- > > > Ryan Hinton > > > [EMAIL PROTECTED] > > > > -- > > > William Stein > > Associate Professor of Mathematics > > University of Washingtonhttp://wstein.org > > > > > -- William Stein Associate Professor of Mathematics University of Washington http://wstein.org --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-support@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-support URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---