Opened 4 years ago

Closed 4 years ago

#22950 closed defect (fixed)

combinat/posets/posets.py fails when the optional package dot2tex is installed

Reported by: strogdon Owned by:
Priority: major Milestone: sage-8.0
Component: graphics Keywords:
Cc: chapoton, jmantysalo, kdilks, tscrim Merged in:
Authors: Travis Scrimshaw Reviewers: Jori Mäntysalo
Report Upstream: N/A Work issues:
Branch: 12dc47d (Commits, GitHub, GitLab) Commit: 12dc47d5c9f58264e9c3f02dcc108bf7758e0dd8
Dependencies: Stopgaps:

Status badges

Description (last modified by tscrim)

As reported at https://groups.google.com/d/msg/sage-release/UdllnAJFufA/-e8ArqwFBAAJ there is often a failure when testing combinat/posets/posets.py

sage -t --long src/sage/combinat/posets/posets.py
**********************************************************************
File "src/sage/combinat/posets/posets.py", line 1742, in sage.combinat.posets.posets.FinitePoset.?
Failed example:
    L.plot(figsize=12, border=True, element_shape='s',
           element_size=400, element_color='white',
           element_colors={'blue': F, 'green': L.double_irreducibles()},
           cover_color='lightgray', cover_colors={'black': F_internal},
           title='The Frattini\nsublattice in blue', fontsize=10)
Exception raised:

    Traceback (most recent call last):
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/doctest/forker.py", line 509, in _run
        self.compile_and_execute(example, compiler, test.globs)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/doctest/forker.py", line 872, in compile_and_execute
        exec(compiled, globs)
      File "<doctest sage.combinat.posets.posets.FinitePoset.?[12]>", line 5, in <module>
        title='The Frattini\nsublattice in blue', fontsize=Integer(10))
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/combinat/posets/posets.py", line 1834, in plot
        **kwds)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/misc/decorators.py", line 564, in wrapper
        return func(*args, **options)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 18733, in plot
        return self.graphplot(**options).plot()
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 18384, in graphplot
        return GraphPlot(graph=self, options=options)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/graphs/graph_plot.py", line 262, in __init__
        self.set_pos()
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/graphs/graph_plot.py", line 346, in set_pos
        self._pos = self._graph.layout(**self._options)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 17847, in layout
        pos = getattr(self, "layout_%s"%layout)(dim = dim, **options)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/graphs/digraph.py", line 2915, in layout_acyclic
        return self.layout_graphviz(rankdir=rankdir, **options)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 18315, in layout_graphviz
        positions = dot2tex.dot2tex(self.graphviz_string(**options), format = "positions", prog = prog)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/misc/decorators.py", line 564, in wrapper
        return func(*args, **options)
      File "/usr/local/sage-8/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 19532, in graphviz_string
        "%s is not a valid format for edge"%(edge)
    AssertionError: [0, 4] is not a valid format for edge

The failure occurs because graphviz_string does not allow edges to be given as lists (exposed by #18545).

Change History (11)

comment:1 follow-up: Changed 4 years ago by tscrim

This was not caused by #18545 but instead simply exposed.

comment:2 in reply to: ↑ 1 Changed 4 years ago by strogdon

Replying to tscrim:

This was not caused by #18545 but instead simply exposed.

Yes, you are correct.

comment:3 Changed 4 years ago by strogdon

  • Description modified (diff)

comment:4 Changed 4 years ago by strogdon

That portion of the L.plot(...) call that appears to be the problem is cover_colors={'black': F_internal}. If it is removed then the posets.py test passes even with dot2tex installed.

Last edited 4 years ago by strogdon (previous) (diff)

comment:5 Changed 4 years ago by tscrim

  • Description modified (diff)

Okay, it might not be as simple as exposing a bug but bad input. If I use

F_internal = [(c[0],c[1],None) for c in F.cover_relations() if c in L.cover_relations()]

then I can see the plot.

comment:6 Changed 4 years ago by tscrim

<self-hatred>It's amazing how useful error messages are...</self-hatred>

comment:7 Changed 4 years ago by tscrim

Actually, this even works:

sage: F_internal = [tuple(c) for c in F.cover_relations() if c in L.cover_relations()]

Which makes sense considering the assertion is checking assert isinstance(edge, tuple). What I suggest is making it also allow list.

comment:8 Changed 4 years ago by tscrim

  • Authors set to Travis Scrimshaw
  • Branch set to public/graphviz_edges_lists-22950
  • Commit set to 12dc47d5c9f58264e9c3f02dcc108bf7758e0dd8
  • Description modified (diff)
  • Status changed from new to needs_review

Here's a branch with a MWE as a doctest.


New commits:

12dc47dAllow graphviz_string to take edges that are lists.

comment:9 Changed 4 years ago by jmantysalo

  • Reviewers set to Jori Mäntysalo

I can check this.

comment:10 Changed 4 years ago by jmantysalo

  • Status changed from needs_review to positive_review

Works. Thanks!

comment:11 Changed 4 years ago by vbraun

  • Branch changed from public/graphviz_edges_lists-22950 to 12dc47d5c9f58264e9c3f02dcc108bf7758e0dd8
  • Resolution set to fixed
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.