##// END OF EJS Templates
try to fix tbcode (#14010)...
try to fix tbcode (#14010) Instead of using the heuristic of where the function is defined we will now try to count the number of line in the files where the function are defined. Unfortunately the way stackdata parses things, the time depends on the size of the file as it does not do partial highlighting. So if the functions we are using are defined before the threshold we still go through the slow path. Now we try to : 1) not look at the IPython stacks 2) for files we can, open and count the number of lines as a proxy (and cache it). 3) if any of those _files_ are too long, go through fast code.

File last commit:

r27640:96aefe4c
r28212:033c38e4 merge
Show More
dtexample.py
167 lines | 2.9 KiB | text/x-python | PythonLexer
"""Simple example using doctests.
This file just contains doctests both using plain python and IPython prompts.
All tests should be loaded by nose.
"""
import os
def pyfunc():
"""Some pure python tests...
>>> pyfunc()
'pyfunc'
>>> import os
>>> 2+3
5
>>> for i in range(3):
... print(i, end=' ')
... print(i+1, end=' ')
...
0 1 1 2 2 3
"""
return 'pyfunc'
def ipfunc():
"""Some ipython tests...
In [1]: import os
In [3]: 2+3
Out[3]: 5
In [26]: for i in range(3):
....: print(i, end=' ')
....: print(i+1, end=' ')
....:
0 1 1 2 2 3
It's OK to use '_' for the last result, but do NOT try to use IPython's
numbered history of _NN outputs, since those won't exist under the
doctest environment:
In [7]: 'hi'
Out[7]: 'hi'
In [8]: print(repr(_))
'hi'
In [7]: 3+4
Out[7]: 7
In [8]: _+3
Out[8]: 10
In [9]: ipfunc()
Out[9]: 'ipfunc'
"""
return "ipfunc"
def ipos():
"""Examples that access the operating system work:
In [1]: !echo hello
hello
In [2]: !echo hello > /tmp/foo_iptest
In [3]: !cat /tmp/foo_iptest
hello
In [4]: rm -f /tmp/foo_iptest
"""
pass
ipos.__skip_doctest__ = os.name == "nt"
def ranfunc():
"""A function with some random output.
Normal examples are verified as usual:
>>> 1+3
4
But if you put '# random' in the output, it is ignored:
>>> 1+3
junk goes here... # random
>>> 1+2
again, anything goes #random
if multiline, the random mark is only needed once.
>>> 1+2
You can also put the random marker at the end:
# random
>>> 1+2
# random
.. or at the beginning.
More correct input is properly verified:
>>> ranfunc()
'ranfunc'
"""
return 'ranfunc'
def random_all():
"""A function where we ignore the output of ALL examples.
Examples:
# all-random
This mark tells the testing machinery that all subsequent examples should
be treated as random (ignoring their output). They are still executed,
so if a they raise an error, it will be detected as such, but their
output is completely ignored.
>>> 1+3
junk goes here...
>>> 1+3
klasdfj;
>>> 1+2
again, anything goes
blah...
"""
pass
def iprand():
"""Some ipython tests with random output.
In [7]: 3+4
Out[7]: 7
In [8]: print('hello')
world # random
In [9]: iprand()
Out[9]: 'iprand'
"""
return 'iprand'
def iprand_all():
"""Some ipython tests with fully random output.
# all-random
In [7]: 1
Out[7]: 99
In [8]: print('hello')
world
In [9]: iprand_all()
Out[9]: 'junk'
"""
return 'iprand_all'