Hello David!

On Wednesday, November 16, 2016 at 5:19:18 PM UTC-5, David Roe wrote:
>
> It's certainly doable, though an initial attempt needs a bit more work (I 
> have to go teach now, so taking a break).
>
> What scope do we want to support?  Running doctests on an object that has 
> a __doc__ attribute is certainly possible, though getting line numbers to 
> match what's expected will take some work.  Supporting testing a single 
> function or class through the command line should also be possible, but 
> would go through a different code path.  The key files to look at are 
> sage.doctest.sources, especially the classes StringDocTestSource and 
> FileDocTestSource, and sage.doctest.control, especially 
> DocTestController.expand_files_into_sources and run_doctests.
>

Thanks for this information.

As for the scope:

- As a first step, it would be great to be able to have run_doctests(obj) run 
all the doctests in obj.__doc__. I agree that matching line numbers would 
be really tricky; in fact, I'm not even sure what I would expect for the 
line numbers (relative to the docstring, or relative to the file containing 
the function).

- Then we need a decision about what happens when one executes 
run_doctests(cls): either just run the doctests in cls.__doc__; or run all 
those doctests as well as the doctests from the class's methods. I think 
the second option would be a best, since one can run the doctests of a 
specific method with run_doctests(cls.method).

- Thinking about doctests, it would also be great to be able to run all the 
doctests in a Sage notebook. And maybe add a "Run Doctests" button to the 
notebook interface. This functionality can be built on top of the previous 
functions, and should be saved for a different patch.

Hope you had a good class.

Franco

 

> On Wed, Nov 16, 2016 at 2:18 PM, Franco Saliola <sal...@gmail.com 
> <javascript:>> wrote:
>
>>
>>
>> On Wednesday, November 16, 2016 at 8:47:04 AM UTC-5, Erik Bray wrote:
>>>
>>> On Wed, Nov 16, 2016 at 1:47 PM, Jan Groenewald <j...@aims.ac.za> 
>>> wrote: 
>>> > Hi 
>>> > 
>>> > On 16 November 2016 at 14:35, Simon King <simon...@uni-jena.de> 
>>> wrote: 
>>> >> 
>>> >> Hi Franco, 
>>> >> 
>>> >> On 2016-11-15, Franco Saliola <sal...@gmail.com> wrote: 
>>> >> > I'm wondering whether there is a way to run the doctests of a 
>>> single 
>>> >> > function. 
>>> >> 
>>> >> Would indeed be nice to have. And thank you for pointing out 
>>> >> run_doctests() --- I haven't been aware of it. 
>>> > 
>>> > 
>>> > Looks like you could manually do this 
>>> > 
>>> > 
>>> https://stackoverflow.com/questions/10080157/python-is-it-possible-to-only-test-specific-functions-with-doctest-in-a-module
>>>  
>>>
>>>
>>> Yes, it's certainly doable in principle.  I'm surprised (though I 
>>> never tried it) that Sage's doctest runner doesn't provide a 
>>> straightforward way to do this. 
>>> I would suggest a syntax like ./sage -t <filename>:<function>, where 
>>> <function> could also be something like <classname.method>, etc. 
>>>
>>
>> I agree with Erik, it certainly is doable in principle: Python's doctest 
>> module can do this for Python doctests. But it does not recognize Sage 
>> doctests.
>>
>> Continuing with my previous example, the obvious thing does nothing 
>> because it does not recognize the Sage doctests:
>>
>> sage: import doctest
>> sage: doctest.run_docstring_examples(f.__doc__, globals())
>>
>>
>> However, if we replace "sage:" to ">>>", then it recognizes the tests and 
>> executes them:
>>
>>
>> sage: x = f.__doc__.replace("sage:", ">>>")
>> sage: doctest.run_docstring_examples(x, globals())
>> **********************************************************************
>> Line 2, in NoName
>> Failed example:
>>     f()
>> Expected:
>>     42
>> Got:
>>     41
>>
>>
>> This is almost reasonable for simple examples, but it is far from 
>> sufficient since the Sage doctest framework is fancier than the default 
>> doctest module (for example, there is preparsing and much more).
>>
>> I was hoping that someone familiar with the Sage doctest runner and the 
>> run_doctestss() function would know how to do this quickly and painlessly.
>>
>> Franco
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "sage-devel" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sage-devel+...@googlegroups.com <javascript:>.
>> To post to this group, send email to sage-...@googlegroups.com 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/sage-devel.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to