On Thu, Nov 17, 2016 at 4:10 PM, Dima Pasechnik <dimp...@gmail.com> wrote:
>
>
> On Thursday, November 17, 2016 at 2:04:10 PM UTC, Franco Saliola wrote:
>>
>>
>> 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).
>>
> One can have an optional parameter doing this choice for the user.
>
>>
>> - 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.
>
>
> It does not look we have manpower to maintain sagenb properly, leave alone
> adding new features.
> On the other hand perhaps jupyter notebook is sufficiently flexible for this
> purpose, I don't know.
> This looks like a reasonable feature, be it Sage or plain Python.

I would be highly unsurprised if there is already a Jupyter magic for
running all the doctests in a notebook.  I know there are other
testing-related magics.  Years ago I wrote a nosetest magic for
IPython that ran nosetest over a notebook.

If there already is such a magic it would be mostly a matter of
adapting it to use sage's doctest runner.


>>>
>>> On Wed, Nov 16, 2016 at 2:18 PM, Franco Saliola <sal...@gmail.com> 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.
>>>> To post to this group, send email to sage-...@googlegroups.com.
>>>> 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.

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