Opened 9 months ago

Closed 5 months ago

#27435 closed enhancement (fixed)

py3: failing doctest in graph_database.py with interactive_query

Reported by: dcoudert Owned by:
Priority: major Milestone: sage-8.9
Component: graph theory Keywords: py3, graph
Cc: dimpase, jdemeyer Merged in:
Authors: Ewan Davies, David Coudert Reviewers: Frédéric Chapoton, John Palmieri
Report Upstream: N/A Work issues:
Branch: 10fd0e8 (Commits) Commit: 10fd0e835c2a89f5e89b283c691d7a10abb99a70
Dependencies: Stopgaps:

Description

sage -t --long src/sage/graphs/graph_database.py
**********************************************************************
File "src/sage/graphs/graph_database.py", line 1081, in sage.graphs.graph_database.GraphDatabase.interactive_query
Failed example:
    D.interactive_query(display_cols=['graph6', 'num_vertices', 'degree_sequence'], num_edges=5, max_degree=3)
Exception raised:
    Traceback (most recent call last):
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/inspect.py", line 1119, in getfullargspec
        sigcls=Signature)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/inspect.py", line 2186, in _signature_from_callable
        raise TypeError('{!r} is not a callable object'.format(obj))
    TypeError: 0 is not a callable object

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/site-packages/sage/doctest/forker.py", line 671, in _run
        self.compile_and_execute(example, compiler, test.globs)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/site-packages/sage/doctest/forker.py", line 1095, in compile_and_execute
        exec(compiled, globs)
      File "<doctest sage.graphs.graph_database.GraphDatabase.interactive_query[1]>", line 1, in <module>
        D.interactive_query(display_cols=['graph6', 'num_vertices', 'degree_sequence'], num_edges=Integer(5), max_degree=Integer(3))
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/site-packages/sage/graphs/graph_database.py", line 1087, in interactive_query
        interact(f)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/site-packages/sage/misc/decorators.py", line 343, in my_wrap
        return func(*args)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/site-packages/sagenb/notebook/interact.py", line 2636, in interact
        (args, varargs, varkw, defaults) = inspect.getargspec(f)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/inspect.py", line 1073, in getargspec
        getfullargspec(func)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.6/inspect.py", line 1125, in getfullargspec
        raise TypeError('unsupported callable') from ex
    TypeError: unsupported callable

Change History (20)

comment:1 Changed 9 months ago by dcoudert

I don't know how to fix it.

comment:2 Changed 9 months ago by gh-sheldoncooper07

Hi, I am Piyush, I am new to sage, I was wondering if I could be of some help here.

I am not able to replicate this test. Is there something that I am missing? I am using Ubuntu 16.04

$ ./sage -t --long src/sage/graphs/graph_database.py
Running doctests with ID 2019-03-08-11-03-04-40b4d48a.
Git branch: develop
Using --optional=dochtml,memlimit,mpir,python2,sage
Doctesting 1 file.
sage -t --long src/sage/graphs/graph_database.py
    [50 tests, 0.49 s]
----------------------------------------------------------------------
All tests passed!
----------------------------------------------------------------------
Total time for all tests: 0.6 seconds
    cpu time: 0.5 seconds
    cumulative wall time: 0.5 seconds

comment:3 Changed 9 months ago by dcoudert

The problem is with Python 3. We are working hard on the transition from Python 2 to Python 3.

comment:4 Changed 9 months ago by embray

  • Milestone changed from sage-8.7 to sage-8.8

Ticket retargeted after milestone closed (if you don't believe this ticket is appropriate for the Sage 8.8 release please retarget manually)

comment:5 follow-up: Changed 7 months ago by gh-ed359

I may have managed to fix this error. I don't know anything about the origins of the code but the error arises in in graph_database._gen_interact_func where it seems a string defining a function called _ is run with exec.

I tried changing the name of the function that gets defined and ran into a different python3-related bug in the sagenb python package (maintained out of the main sage tree): it still uses xrange in sagenb.notebook.interact at line 1185.

I downloaded the source for that package, changed the uses of xrange, and now the doctest passes on my machine, but the bar for passing is simply emitting a string starting and finishing with <html> and </html>.

I'm not sure what to suggest for this ticket, the doctest in question has something to do with the old sage notebook (sagenb). The function interactive_query returns some html that doesn't appear do anything in jupyter, and I can't use the old notebook on python3 (an error related to Twisted). Is the old notebook formally deprecated? See #22431 and in particular the 'side remark' about the graph database explorer.

If my changes to _gen_interact_func and the sagenb package are wanted I can send patches, but as I can't run the notebook myself on python3 I can't even verify that it's a proper fix.

comment:6 Changed 7 months ago by dcoudert

  • Cc dimpase added

Let's ask the author of #22431 if anything was said about graph_editor and interactive queries in graph_database.

Also I don't know if these tools have users. If not, we may simply deprecate the parts involving sagenb. Otherwise, someone with enough knowledge in notebooks should try to solve the issues.

comment:7 in reply to: ↑ 5 Changed 7 months ago by dimpase

Replying to gh-ed359:

I may have managed to fix this error. I don't know anything about the origins of the code but the error arises in in graph_database._gen_interact_func where it seems a string defining a function called _ is run with exec.

I tried changing the name of the function that gets defined and ran into a different python3-related bug in the sagenb python package (maintained out of the main sage tree): it still uses xrange in sagenb.notebook.interact at line 1185.

I downloaded the source for that package, changed the uses of xrange, and now the doctest passes on my machine, but the bar for passing is simply emitting a string starting and finishing with <html> and </html>.

I'm not sure what to suggest for this ticket, the doctest in question has something to do with the old sage notebook (sagenb). The function interactive_query returns some html that doesn't appear do anything in jupyter, and I can't use the old notebook on python3 (an error related to Twisted). Is the old notebook formally deprecated? See #22431 and in particular the 'side remark' about the graph database explorer.

If my changes to _gen_interact_func and the sagenb package are wanted I can send patches, but as I can't run the notebook myself on python3 I can't even verify that it's a proper fix.

As long as these changes don't break sagenb on python2, it is fine. Please send a PR on https://github.com/sagemath/sagenb (perhaps they are already fixed in the 4 most recent open PRs there.)

As to functionality to be removed, I don't know.

comment:8 Changed 7 months ago by gh-ed359

  • Branch set to u/gh-ed359/py3__failing_doctest_in_graph_database_py_with_interactive_query

comment:9 Changed 7 months ago by kcrisman

  • Cc jdemeyer added
  • Commit set to 2d05ce8822d9fd403ccd56dbffa90db9f1285367

Thanks. We may need to think about how to deal with this in the eventual removal of sagenb, as the interact should in principle still be able to work in e.g. Jupyter notebooks, but would have to import from elsewhere. Cc:ing Jeroen as he knows a lot about how that is implemented in Jupyter and where things might need to import from now.


New commits:

2d05ce8graph_database.py: fix doctest on python3

comment:10 Changed 7 months ago by dcoudert

Now the error is in sagenb (tested over 8.8.beta6).

sage -t --long src/sage/graphs/graph_database.py
**********************************************************************
File "src/sage/graphs/graph_database.py", line 1082, in sage.graphs.graph_database.GraphDatabase.interactive_query
Failed example:
    D.interactive_query(display_cols=['graph6', 'num_vertices', 'degree_sequence'], num_edges=5, max_degree=3)
Exception raised:
    Traceback (most recent call last):
      File "/Users/dcoudert/sage3/sage/local/lib/python3.7/site-packages/sage/doctest/forker.py", line 681, in _run
        self.compile_and_execute(example, compiler, test.globs)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.7/site-packages/sage/doctest/forker.py", line 1105, in compile_and_execute
        exec(compiled, globs)
      File "<doctest sage.graphs.graph_database.GraphDatabase.interactive_query[1]>", line 1, in <module>
        D.interactive_query(display_cols=['graph6', 'num_vertices', 'degree_sequence'], num_edges=Integer(5), max_degree=Integer(3))
      File "/Users/dcoudert/sage3/sage/local/lib/python3.7/site-packages/sage/graphs/graph_database.py", line 1088, in interactive_query
        interact(f)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.7/site-packages/sage/misc/decorators.py", line 343, in my_wrap
        return func(*args)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.7/site-packages/sagenb/notebook/interact.py", line 2643, in interact
        for i, arg in enumerate(args)]
      File "/Users/dcoudert/sage3/sage/local/lib/python3.7/site-packages/sagenb/notebook/interact.py", line 2643, in <listcomp>
        for i, arg in enumerate(args)]
      File "/Users/dcoudert/sage3/sage/local/lib/python3.7/site-packages/sagenb/notebook/interact.py", line 3093, in render
        to_value=self.__to_value, width=self.__width)
      File "/Users/dcoudert/sage3/sage/local/lib/python3.7/site-packages/sagenb/notebook/interact.py", line 1185, in __init__
        default_value = [[default_value[i * columns + j] for j in xrange(columns)] for i in xrange(rows)]
    NameError: name 'xrange' is not defined
**********************************************************************

comment:11 Changed 6 months ago by embray

  • Milestone sage-8.8 deleted

As the Sage-8.8 release milestone is pending, we should delete the sage-8.8 milestone for tickets that are not actively being worked on or that still require significant work to move forward. If you feel that this ticket should be included in the next Sage release at the soonest please set its milestone to the next release milestone (sage-8.9).

comment:12 Changed 6 months ago by dcoudert

  • Milestone set to sage-8.9

comment:13 Changed 5 months ago by jhpalmieri

If the problem is with sagenb, then can we mark the doctest as "# py2", since my understanding is that sagenb is not compatible with Python 3? That is, keep the proposed changes here, but also tag the doctest as py2 only.

comment:14 Changed 5 months ago by dimpase

can't we just skip installing sagenb on Python3?

comment:15 Changed 5 months ago by jhpalmieri

I think that sagenb as a whole does not work with Python 3, but parts of it do, and parts are imported into the Sage library in various places. If we don't install it, some things may break. Some of the imports:

src/sage/graphs/graph_editor.py:    import sagenb.notebook.interact
src/sage/interacts/library.py:        import sagenb.notebook.interact
src/sage/interacts/debugger.py:        from sagenb.notebook.interact import slider, input_box, selector
Last edited 5 months ago by jhpalmieri (previous) (diff)

comment:16 Changed 5 months ago by dcoudert

I agree with the proposal of marking this doctest as # py2, but we should also add that there is known issue with py3, no ? This way, we don't await for a decision about sagenb.

comment:17 Changed 5 months ago by dcoudert

  • Authors set to Ewan Davies, David Coudert
  • Branch changed from u/gh-ed359/py3__failing_doctest_in_graph_database_py_with_interactive_query to public/graphs/27435_doctest_in_graph_database
  • Commit changed from 2d05ce8822d9fd403ccd56dbffa90db9f1285367 to 10fd0e835c2a89f5e89b283c691d7a10abb99a70
  • Status changed from new to needs_review

I added proposed modification and pushed the code to a new branch in public. Feel free to modify it if needed.


New commits:

d5074f9trac #27435: Merged with 8.9.beta2
10fd0e8trac #27435: mark doctest as py2 only and add warning block

comment:18 Changed 5 months ago by jhpalmieri

This is fine with me. Anyone else have any comments? Objections to setting to positive review?

comment:19 Changed 5 months ago by chapoton

  • Reviewers set to Frédéric Chapoton, John Palmieri
  • Status changed from needs_review to positive_review

ok..

comment:20 Changed 5 months ago by vbraun

  • Branch changed from public/graphs/27435_doctest_in_graph_database to 10fd0e835c2a89f5e89b283c691d7a10abb99a70
  • Resolution set to fixed
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.