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.

Reply via email to