#71: Preparsing causes confusing error messages
-------------------------------------------+------------------------
       Reporter:  Justin Walker (justin@…  |        Owner:  cwitty
           Type:  enhancement              |       Status:  new
       Priority:  minor                    |    Milestone:  sage-6.5
      Component:  misc                     |   Resolution:
       Keywords:                           |    Merged in:
        Authors:  Jeroen Demeyer           |    Reviewers:
Report Upstream:  N/A                      |  Work issues:
         Branch:                           |       Commit:
   Dependencies:                           |     Stopgaps:
-------------------------------------------+------------------------
Changes (by jdemeyer):

 * milestone:  sage-feature => sage-6.5


Old description:

> When a .sage file is "load"ed or "attach"ed, it gets translated to a .py
> file before being processed; the result is a file with different
> structure than the original.  Any errors are described in terms of the
> .py file, not the .sage file.
>
> One working solution is to monkey-patch `traceback.extract_tb()` to undo
> preparsing.

New description:

 When a .sage file is "load"ed or "attach"ed, it gets translated to a .py
 file before being processed; the result is a file with different structure
 than the original.  Any errors are described in terms of the .py file, not
 the .sage file.

 One working solution is to monkey-patch `traceback.extract_tb()` to undo
 preparsing.

 Since we're messing with tracebacks anyway, this patch will also fix
 tracebacks for Cython files.

 The traceback below was generated with this patch. It shows the
 unpreparsed {{{1/0}}} and it also shows the Cython source:
 {{{
 sage: 1/0
 ---------------------------------------------------------------------------
 ZeroDivisionError                         Traceback (most recent call
 last)
 <ipython-input-1-3cdd7c9e2324> in <module>()
 ----> 1 1/0

 /usr/local/src/sage-config/sage/structure/element.pyx in
 sage.structure.element.RingElement.__div__
 (build/cythonized/sage/structure/element.c:17829)()
    1891                 return
 (<RingElement>self)._idiv_(<RingElement>right)
    1892             else:
 -> 1893                 return
 (<RingElement>self)._div_(<RingElement>right)
    1894         global coercion_model
    1895         return coercion_model.bin_op(self, right, div)

 /usr/local/src/sage-config/sage/rings/integer.pyx in
 sage.rings.integer.Integer._div_
 (build/cythonized/sage/rings/integer.c:12964)()
    1795         # This is vastly faster than doing it here, since here
    1796         # we can't cimport rationals.
 -> 1797         return the_integer_ring._div(self, right)
    1798
    1799     def __floordiv__(x, y):

 /usr/local/src/sage-config/sage/rings/integer_ring.pyx in
 sage.rings.integer_ring.IntegerRing_class._div
 (build/cythonized/sage/rings/integer_ring.c:4578)()
     443         cdef rational.Rational x = PY_NEW(rational.Rational)
     444         if mpz_sgn(right.value) == 0:
 --> 445             raise ZeroDivisionError, 'Rational division by zero'
     446         mpz_set(mpq_numref(x.value), left.value)
     447         mpz_set(mpq_denref(x.value), right.value)

 ZeroDivisionError: Rational division by zero
 }}}

--

--
Ticket URL: <http://trac.sagemath.org/ticket/71#comment:11>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to