#10458: Doctest framework fails to parse multiline input pasted from sage
interactive prompt
-----------------------+----------------------------------------------------
   Reporter:  kini     |       Owner:  mvngu                                    
                 
       Type:  defect   |      Status:  new                                      
                 
   Priority:  major    |   Milestone:                                           
                 
  Component:  doctest  |    Keywords:  doctest, continuation, multiline input, 
interactive prompt
     Author:           |    Upstream:  N/A                                      
                 
   Reviewer:           |      Merged:                                           
                 
Work_issues:           |  
-----------------------+----------------------------------------------------
 After some confusion trying to get a docstring to pass doctesting, I think
 input line continuations are "not working", in that lines directly pasted
 from the sage interpreter prompt do not pass doctests when single inputs
 span multiple lines. Pasted below is some terminal output (analysis
 continued afterwards):

 {{{
 kes...@esterhazy /opt/sage/devel $ cat test.rst
 EXAMPLE::

     sage: [1,2,3]
     [1, 2, 3]
     sage: [1,
     ....: 2,3
     ....: ]
     [1, 2, 3]
     sage: x=3;\
     ....: x
     3

 kes...@esterhazy /opt/sage/devel $ sage -t -verbose test.rst
 sage -t -verbose "4.6/devel/test.rst"
 Traceback (most recent call last):
   File "/home/keshav/.sage//tmp/.doctest_test.py", line 60, in <module>
     runner=runner)
   File "/opt/sage/local/bin/sagedoctest.py", line 54, in
 testmod_returning_runner
     runner=runner)
   File "/opt/sage/local/bin/ncadoctest.py", line 1819, in
 testmod_returning_runner
     for test in finder.find(m, name, globs=globs, extraglobs=extraglobs):
   File "/opt/sage/local/bin/ncadoctest.py", line 839, in find
     self._find(tests, obj, name, module, source_lines, globs, {})
   File "/opt/sage/local/bin/ncadoctest.py", line 893, in _find
     globs, seen)
   File "/opt/sage/local/bin/ncadoctest.py", line 881, in _find
     test = self._get_test(obj, name, module, globs, source_lines)
   File "/opt/sage/local/bin/ncadoctest.py", line 965, in _get_test
     filename, lineno)
   File "/opt/sage/local/bin/ncadoctest.py", line 594, in get_doctest
     return DocTest(self.get_examples(string, name), globs,
   File "/opt/sage/local/bin/ncadoctest.py", line 608, in get_examples
     return [x for x in self.parse(string, name)
   File "/opt/sage/local/bin/ncadoctest.py", line 570, in parse
     self._parse_example(m, name, lineno)
   File "/opt/sage/local/bin/ncadoctest.py", line 628, in _parse_example
     self._check_prompt_blank(source_lines, indent, name, lineno)
   File "/opt/sage/local/bin/ncadoctest.py", line 715, in
 _check_prompt_blank
     line[indent:indent+3], line))
 ValueError: line 10 of the docstring for __main__.example_0 lacks blank
 after ...: '    ....: Integer(2),Integer(3)'
          [3.1 s]

 ----------------------------------------------------------------------
 The following tests failed:


         sage -t -verbose "4.6/devel/test.rst" # Exception from doctest
 framework
 Total time for all tests: 3.1 seconds
 kes...@esterhazy /opt/sage/devel $ sed "s/\.\.\.:/\.\./" test.rst >
 test2.rst
 kes...@esterhazy /opt/sage/devel $ sage -t -verbose test2.rst
 sage -t -verbose "4.6/devel/test2.rst"
 Trying:
     set_random_seed(0L)
 Expecting nothing
 ok
 Trying:
     change_warning_output(sys.stdout)
 Expecting nothing
 ok
 Trying:
     [Integer(1),Integer(2),Integer(3)]###line 3:_sage_    >>> [1,2,3]
 Expecting:
     [1, 2, 3]
 ok
 Trying:
     [Integer(1),###line 5:_sage_    >>> [1,
     Integer(2),Integer(3)
     ]
 Expecting:
     [1, 2, 3]
 ok
 Trying:
     x=Integer(3); x###line 10:_sage_    >>> x=3; x
 Expecting:
     3
 ok
 3 items had no tests:
     __main__
     __main__.change_warning_output
     __main__.warning_function
 1 items passed all tests:
    5 tests in __main__.example_0
 5 tests in 4 items.
 5 passed and 0 failed.
 Test passed.
          [3.0 s]

 ----------------------------------------------------------------------
 All tests passed!
 Total time for all tests: 3.0 seconds
 kes...@esterhazy /opt/sage/devel $
 }}}


 After I replace all "....: " with "... " using `sed`, everything seems to
 work fine.

 It seems to me that the problem is that sage is not converting "....: " to
 "... ", which is what the standard python interactive prompt uses as a
 prefix for continued input lines. However, the sage prompt uses "....: ",
 so IMHO the doctesting framework should allow for this, so that lines from
 sage sessions can really be just dumped into a docstring without any
 further editing.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10458>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to