On Sat, Aug 20, 2011 at 7:34 PM, Luke <hazelnu...@gmail.com> wrote: > On Sat, Aug 20, 2011 at 3:37 PM, Aaron Meurer <asmeu...@gmail.com> wrote: >> I don't know of any doctests in SymPy that do this. Why can't you put >> imports in each doctest? I'd highly recommend it. > > The reason for not wanting to do the imports is as follows. We have a > class (Kane) that implements an algorithm, and there are many steps to > that algorithm. Setting up the proper execution context for each > doctest requires that each docstring replicate a lot of import > statements and code that are done in previous docstrings. Looking at > the docstrings for this gets cumbersome pretty quickly because of all > the "setup" code that is required to be in each and every docstring.
Maybe create a helper function that does it all for you and import that. > >> >> To see if this can be done, you'll probably have to do what I would >> end up doing, which is to read the source. Look at >> sympy/utilities/runtests.py and also the source for Python's >> doctest.py ("import doctest; doctest??" in IPython will tell you where >> it is locally). I can tell you that how our doctest runner works is >> that it subclasses the Python doctest, over writting stuff that is >> broken there in at least one Python version. >> > > Ok. Something in testmod() must be different from the default doctest > module, I'll give it a look. > >> By the way, when you say "running Python on this file," do you mean >> running "python -m doctest myfile.py"? >> > > I mean "python myfile.py". Running a file and running the doctests in the file are different things. What does python -m doctest myfile.py give? Aaron Meurer > > ~Luke > >> Aaron Meurer >> >> On Sat, Aug 20, 2011 at 3:54 PM, Luke <hazelnu...@gmail.com> wrote: >>> Hello, >>> I would like to alter the execution context of some doctests so that >>> I don't have redundant import statements in every doctest. Python's >>> doctest.testmod() function allows one to do all the common import >>> statements in one place (at the bottom of your module), and pass those >>> names so that all doctests have those names available when they are >>> run. >>> >>> A simple example of this is: >>> #!/usr/bin/env python >>> def foo(bar): >>> """ >>> >>> x = Symbol('x') >>> >>> print(x) >>> x >>> >>> """ >>> pass >>> >>> if __name__ == "__main__": >>> import doctest >>> from sympy import Symbol >>> doctest.testmod(globs={'Symbol' : Symbol}) >>> >>> >>> Running python on this file works (the tests pass even though Symbol >>> isn't explicitly imported within the foo function's doctest). >>> However, sympy's doctest fails with these errors: >>> >>> ../../bin/doctest doctest_globaldict.py >>> ==================================================================================== >>> test process starts >>> ===================================================================================== >>> executable: /usr/bin/python (2.7.1-final-0) >>> architecture: 64-bit >>> cache: yes >>> ground types: python >>> >>> sympy/physics/doctest_globaldict.py[1] F >>> >>> [FAIL] >>> >>> ______________________________________________________________________________________________________________________________________________________________________________________________ >>> ____________________________________________________________________________ >>> sympy.physics.doctest_globaldict.foo >>> ____________________________________________________________________________ >>> File "/home/luke/repos/sympy/sympy/physics/doctest_globaldict.py", >>> line 4, in sympy.physics.doctest_globaldict.foo >>> Failed example: >>> x = Symbol('x') >>> Exception raised: >>> Traceback (most recent call last): >>> File "/usr/lib/python2.7/doctest.py", line 1254, in __run >>> compileflags, 1) in test.globs >>> File "<doctest sympy.physics.doctest_globaldict.foo[0]>", line >>> 1, in <module> >>> x = Symbol('x') >>> NameError: name 'Symbol' is not defined >>> ********************************************************************** >>> File "/home/luke/repos/sympy/sympy/physics/doctest_globaldict.py", >>> line 5, in sympy.physics.doctest_globaldict.foo >>> Failed example: >>> print(x) >>> Exception raised: >>> Traceback (most recent call last): >>> File "/usr/lib/python2.7/doctest.py", line 1254, in __run >>> compileflags, 1) in test.globs >>> File "<doctest sympy.physics.doctest_globaldict.foo[1]>", line >>> 1, in <module> >>> print(x) >>> NameError: name 'x' is not defined >>> >>> ==================================================================== >>> tests finished: 0 passed, 1 failed, in 0.04 seconds >>> ===================================================================== >>> DO *NOT* COMMIT! >>> >>> >>> Is there way to achieve this same functionality using sympy's doctest? >>> >>> ~Luke >>> >>> >>> -- >>> "Those who would give up essential liberty to purchase a little >>> temporary safety deserve neither liberty nor safety." >>> >>> -- Benjamin Franklin, Historical Review of Pennsylvania, 1759 >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "sympy" group. >>> To post to this group, send email to sympy@googlegroups.com. >>> To unsubscribe from this group, send email to >>> sympy+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/sympy?hl=en. >>> >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sympy" group. >> To post to this group, send email to sympy@googlegroups.com. >> To unsubscribe from this group, send email to >> sympy+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/sympy?hl=en. >> >> > > > > -- > "Those who would give up essential liberty to purchase a little > temporary safety deserve neither liberty nor safety." > > -- Benjamin Franklin, Historical Review of Pennsylvania, 1759 > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To post to this group, send email to sympy@googlegroups.com. > To unsubscribe from this group, send email to > sympy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > > -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com. To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.