William Stein wrote:
> On Fri, Apr 11, 2008 at 3:49 PM, Jason Grout
> <[EMAIL PROTECTED]> wrote:
>>  William Stein wrote:
>>  > 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.
>>  >
>>
>>
>>  Ryan,
>>
>>  If you use Sage's round command:
>>
>>  from sage.all import round
>>
>>  or
>>
>>  from sage.misc.functional import round
>>
>>  then the example seems to work just fine:
>>
>>  sage: vector([round(frac*length) for frac in fracs_list])
>>  (5, 3, 2)
>>
>>
>>  If I wanted to be sure that I had an integer vector, I could specify the
>>  parent explicitly, just like with matrices:
>>
>>  sage: vector(ZZ,[round(frac*length) for frac in fracs_list])
>>  (5, 3, 2)
>>
>>
>>  That said, William, is there a reason why this doesn't work?  This is
>>  what is necessitating the two type conversions above.
>>
>>  sage: Integer(float(2))
>>
>> ---------------------------------------------------------------------------
>>  <type 'exceptions.TypeError'>             Traceback (most recent call last)
>>
>>  /home/grout/<ipython console> in <module>()
>>
>>  /home/grout/integer.pyx in sage.rings.integer.Integer.__init__()
>>
>>  <type 'exceptions.TypeError'>: unable to coerce element to an integer
>>
>>
>>  sage: Integer(RDF(2))
>>
>> ---------------------------------------------------------------------------
>>  <type 'exceptions.TypeError'>             Traceback (most recent call last)
>>
>>  /home/grout/<ipython console> in <module>()
>>
>>  /home/grout/integer.pyx in sage.rings.integer.Integer.__init__()
>>
>>  <type 'exceptions.TypeError'>: unable to coerce element to an integer
>>
>>
>>  I guess I would think it was a design decision to not convert floating
>>  points to ints automatically.  However, the following does work:
>>
>>  sage: Integer(RR(2))
>>  2
>>
>>
>>  This seems inconsistent.
> 
> Yep.  I think it's just a NotImplementedError.  Please implement it
> and post a patch.  Make sure that it only succeeds if
> 
>    Integer(k(a)) == a
> 
> and otherwise fails.  I.e., Integer(k(a)) should *not* truncate k(a).
>

Is making an _integer_ method in the RDF class the right method to write?


Also, round(RR(3.0)) returns an Integer...should RDF behave the same 
way? (currently round(RDF(3.0)) returns an RDF).

Jason


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to