#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.