Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dot2tex breaks Poset.show() #15225

Closed
jm58660 mannequin opened this issue Sep 24, 2013 · 18 comments
Closed

dot2tex breaks Poset.show() #15225

jm58660 mannequin opened this issue Sep 24, 2013 · 18 comments

Comments

@jm58660
Copy link
Mannequin

jm58660 mannequin commented Sep 24, 2013

var('a,b,c,d,e,f,g,h')

THISFAILS=Poset( (
[h, g*h, f*h, e*h, d*e*h, c*e*h, b*e*h, a*b*c*d*e*f*g*h],
[[h, g*h], [h, f*h], [h, e*h], [g*h, a*b*c*d*e*f*g*h],
[f*h, a*b*c*d*e*f*g*h], [e*h, d*e*h], [e*h, c*e*h], [e*h, b*e*h],
[d*e*h, a*b*c*d*e*f*g*h], [c*e*h, a*b*c*d*e*f*g*h], [b*e*h, a*b*c*d*e*f*g*h]]),
cover_relations = True, facade = False)

THISFAILS.show()

gives

AttributeError: 'str' object has no attribute 'iteritems'

CC: @strogdon

Component: packages: optional

Keywords: poset, dot2tex

Reviewer: Travis Scrimshaw

Issue created by migration from https://trac.sagemath.org/ticket/15225

@jm58660 jm58660 mannequin added this to the sage-6.1 milestone Sep 24, 2013
@jm58660 jm58660 mannequin added c: graphics labels Sep 24, 2013
@jm58660
Copy link
Mannequin Author

jm58660 mannequin commented Oct 22, 2013

comment:1

Another one, gives same error:

Poset([range(0,11), [[0, 1], [0, 3], [0, 6], [1, 2], [1, 5], [2, 7],
[3, 4], [3, 8], [4, 5], [5, 9], [6, 7], [6, 8], [7, 9], [8, 9]]]).show()

@ppurka
Copy link
Member

ppurka commented Oct 26, 2013

comment:2

I can not confirm this bug. Both the plots work in sage-5.10, sage-5.11.rc0 and sage-5.13.beta1.

What version of sage are you using? Can you try some recent versions?

@jm58660
Copy link
Mannequin Author

jm58660 mannequin commented Oct 28, 2013

comment:4

Last example was tested with 5.12. For example

Poset([ [1,2,3], [[1,2],[2,3]] ]).show()

works, so system itself seems to work. sage.misc.package.optional_packages() says

(['autotools-20121217', 'beautifulsoup-3.2.1', 'benzene-20130630',
'biopython-1.61', 'buckygen-1.0', 'cbc-2.8.1.p0', 'ccache-3.1.9',
'chomp-20130518.p1', 'cluster_seed-1.0', 'coxeter3-1.1',
'cryptominisat-2.9.6', 'cunningham_tables-1.0',
'database_cremona_ellcurve-20121022', 'database_gap-4.6.4',
'database_jones_numfield-v4', 'database_kohel-20060803',
'database_odlyzko_zeta', 'database_pari-20130516',
'database_sloane_oeis-2005-12', 'database_stein_watkins_mini.p0',
'database_symbolic_data-20070206', 'dot2tex-2.8.7.p2',
'extra_docs-20070208', 'gap_packages-4.6.4.p1', 'gcc-4.6.4',
'gdbm-1.8.3', 'ginv-1.9-20080723', 'git-1.7.12.2.p0', 'gnuplotpy-1.8',
'guppy-0.1.8', 'java3d-20070901', 'kash3-2008-07-31.p0',
'knoboo-20080411', 'libogg-1.1.4', 'lie-2.2.2.p5', 'lrs-4.2b.p1',
'mpi4py-1.2.2', 'nauty-25', 'normaliz-2.8.p0', 'nose-1.1.2',
'nzmath-1.1.0', 'openmpi-1.4.3', 'openssl-1.0.1c.p0',
'p_group_cohomology-2.1.4', 'phc-2.3.65.p0', 'pybtex-20120618',
'pycryptoplus-20100809-git', 'pyopenssl-0.13.p0', 'PyQt_x11-4.9.1.p0',
'pyx-0.10', 'pyzmq-2.1.11.p1', 'qhull-2010.1', 'sage_mode-0.9.1',
'sip-4.13.2.p0', 'TOPCOM-0.17.4', 'trac-0.11.5.p0', 'valgrind-3.8.1.p0',
'zeromq-3.2.0.p0'], ['4ti2-1.6', 'brian-1.4.1.p0', 'fricas-1.0.9',
'fricasaldor-1.0.9', 'jsmath_image_fonts-1.4.p3', 'libcocoa-0.9930',
'libtheora-1.1.1', 'patchbot-2.0'])

There is also ldap installed on system, but I guess that it doesn't make any differense.

I will compile plain sage-5.12 to see if this happens without packages.

@jm58660
Copy link
Mannequin Author

jm58660 mannequin commented Oct 29, 2013

comment:5

I downloaded sage-5.12-linux-64bit-fedora_release_16_verne-x86_64-Linux.tar.lzma and show() command works. Then I installed gnuplotpy-1.8 and it still works. But after sage.misc.package.optional_packages() if fails. Any ideas about what package to test?

@jm58660
Copy link
Mannequin Author

jm58660 mannequin commented Oct 29, 2013

comment:6

Found it. dot2tex-2.8.7.p2 breaks this.

@ppurka ppurka changed the title Poset.show gives error 'str' object has no attribute 'iteritems' dot2tex breaks Poset.show() Oct 29, 2013
@ppurka
Copy link
Member

ppurka commented Oct 29, 2013

Changed keywords from poset to poset, dot2tex

@jm58660
Copy link
Mannequin Author

jm58660 mannequin commented Oct 30, 2013

comment:9

Same happens with 5.13.beta1 and dot2tex-2.8.7.p2.spkg. Does this still needs more info?

@ppurka
Copy link
Member

ppurka commented Oct 30, 2013

comment:10

Replying to @jm58660:

Same happens with 5.13.beta1 and dot2tex-2.8.7.p2.spkg. Does this still needs more info?

Of course not! Thanks for tracking it down. I have still kept it at needs info because there is no other better status to set it to.

@ppurka
Copy link
Member

ppurka commented Oct 30, 2013

comment:11

Ok. Let's set it to needs work. dot2tex needs to be fixed.

@ppurka
Copy link
Member

ppurka commented Oct 30, 2013

Work Issues: fix dot2tex

@tscrim
Copy link
Collaborator

tscrim commented Nov 3, 2013

comment:12

Do you have graphviz installed on your system?

The (the optional package) dot2tex stuff [typically] needs graphviz installed as well, but there's no check for that in Sage AFAIK. So if you have dot2tex installed but not graphviz, you can get things breaking because things that check for dot2tex pass and it expects graphviz to be there as well..

@jm58660
Copy link
Mannequin Author

jm58660 mannequin commented Nov 3, 2013

comment:13

At least on one system with this problem dpkg says "ii graphviz 2.26.3-10ubuntu1 rich set of graph drawing tools".

And anyways, how could missing package break just one or two special poset?

@tscrim
Copy link
Collaborator

tscrim commented Nov 3, 2013

comment:14

True. Although I do get this error message:

ERROR    Failed to process input
Traceback (most recent call last):
  File "/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/dot2tex/dot2tex.py", line 2928, in main
    s =  conv.convert(dotdata)
  File "/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/dot2tex/dot2tex.py", line 848, in convert
    return self.output()
  File "/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/dot2tex/dot2tex.py", line 2566, in output
    positions[node.name] = map(int, pos.split(','))
ValueError: invalid literal for int() with base 10: '185.4'

I'm not convinced it is a dot2tex error. If you run view(P) it works, but P._hasse_diagram.plot() does not. I've uncovered another minor issue; the hasse_diagram() method only returns a DiGraph, not a HasseDiagram, but that probably won't fix this problem. The error gets triggered when I create the corresponding DiGraph object and tell it to plot with layout='acyclic'.

Also for reference, here's the remaining part of the error message:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-52-ba27df962a36> in <module>()
----> 1 P.hasse_diagram().plot(layout='acyclic')

/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/sage/misc/decorators.pyc in wrapper(*args, **kwds)
    535                 options['__original_opts'] = kwds
    536             options.update(kwds)
--> 537             return func(*args, **options)
    538 
    539         #Add the options specified by @options to the signature of the wrapped

/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/sage/graphs/generic_graph.pyc in plot(self, **options)
  14924             ['black', 'purple', 'yellow', 'yellow']
  14925         """
> 14926         return self.graphplot(**options).plot()
  14927 
  14928     def show(self, **kwds):

/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/sage/graphs/generic_graph.pyc in graphplot(self, **options)
  14636         """
  14637         from sage.graphs.graph_plot import GraphPlot
> 14638         return GraphPlot(graph=self, options=options)
  14639 
  14640     @options()

/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/sage/graphs/graph_plot.pyc in __init__(self, graph, options)
    236         self._graph = graph
    237         self._options = options # contains both plot and show options
--> 238         self.set_pos()
    239         self._arcs = self._graph.has_multiple_edges(to_undirected=True)
    240         self._loops = self._graph.has_loops()

/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/sage/graphs/graph_plot.pyc in set_pos(self)
    306 
    307         """
--> 308         self._pos = self._graph.layout(**self._options)
    309         # make sure the positions are floats (trac #10124)
    310         self._pos = dict((k,(float(v[0]), float(v[1]))) for k,v in self._pos.iteritems())

/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/sage/graphs/generic_graph.pyc in layout(self, layout, pos, dim, save_pos, **options)
  14167 
  14168         if hasattr(self, "layout_%s"%layout):
> 14169             pos = getattr(self, "layout_%s"%layout)(dim = dim, **options)
  14170         elif layout is not None:
  14171             raise ValueError("unknown layout algorithm: %s"%layout)

/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/sage/graphs/digraph.pyc in layout_acyclic(self, **options)
   2937         """
   2938         if have_dot2tex():
-> 2939             return self.layout_graphviz(**options)
   2940         else:
   2941             return self.layout_acyclic_dummy(**options)

/home/travis/sage-5.13.beta2/local/lib/python2.7/site-packages/sage/graphs/generic_graph.pyc in layout_graphviz(self, dim, prog, **options)
  14571         positions = dot2tex.dot2tex(self.graphviz_string(**options), format = "positions", prog = prog)
  14572 
> 14573         return dict( (key_to_vertex[key], pos) for (key, pos) in positions.iteritems() )
  14574 
  14575     def _layout_bounding_box(self, pos):

AttributeError: 'str' object has no attribute 'iteritems'

@strogdon
Copy link

comment:16

The ValueError/AttributeError disappears for me if I include the dot2tex patch which seems to be present in the spkg(s) at ticket #14408. However, perhaps the real issue is that prog='dot' returns sometimes ints and sometimes floats for the positions. For example, with the patch:

sage: import dot2tex
sage: AA = 'digraph {\n  "0" [label="0"];\n  "1" [label="1"];\n  "2" [label="2"];\n  "3" [label="3"];\n  "4" [label="4"];\n  "5" [label="5"];\n  "6" [label="6"];\n  "7" [label="7"];\n  "8" [label="8"];\n  "9" [label="9"];\n  "10" [label="10"];\n\nedge [color="black"];\n  "0" -> "1";\n  "0" -> "3";\n  "0" -> "6";\n  "1" -> "2";\n  "1" -> "5";\n  "2" -> "7";\n  "3" -> "4";\n  "3" -> "8";\n  "4" -> "5";\n  "5" -> "9";\n  "6" -> "7";\n  "6" -> "8";\n  "7" -> "9";\n  "8" -> "9";\n}'
sage: dot2tex.dot2tex(AA, format="positions", prog="dot")
{'0': [113.39, 315.0],
 '1': [41.39, 241.0],
 '10': [185.39, 315.0],
 '2': [41.39, 167.0],
 '3': [113.39, 241.0],
 '4': [113.39, 167.0],
 '5': [113.39, 93.0],
 '6': [185.39, 241.0],
 '7': [231.39, 93.0],
 '8': [185.39, 167.0],
 '9': [176.39, 19.0]}
sage: BB = 'digraph {\n  "0" [label="0"];\n  "1" [label="1"];\n  "2" [label="2"];\n  "3" [label="3"];\n  "4" [label="4"];\n  "5" [label="5"];\n  "6" [label="6"];\n  "7" [label="7"];\n  "8" [label="8"];\n  "9" [label="9"];\n  "10" [label="10"];\n\nedge [color="black"];\n  "0" -> "1";\n  "0" -> "3";\n  "0" -> "6";\n  "1" -> "2";\n  "1" -> "5";\n  "2" -> "7";\n  "3" -> "4";\n  "3" -> "8";\n  "4" -> "5";\n  "5" -> "9";\n  "6" -> "7";\n  "6" -> "8";\n  "7" -> "9";\n}'
sage: dot2tex.dot2tex(BB, format="positions", prog="dot")
{'0': [137, 315],
 '1': [209, 241],
 '10': [209, 315],
 '2': [247, 167],
 '3': [65, 241],
 '4': [27, 167],
 '5': [128, 93],
 '6': [137, 241],
 '7': [200, 93],
 '8': [99, 167],
 '9': [164, 19]}

The first example gives a ValueError without the patch. This can be reproduced from python, so it's not Sage-specific. I suppose what's returned by prog='dot' should either be always ints or always floats for the positions, but I'm not sure whether the present situation is a bug or a feature, nor is it clear to me which calls in dot2tex produce these values.

@sagetrac-vbraun-spam sagetrac-vbraun-spam mannequin modified the milestones: sage-6.1, sage-6.2 Jan 30, 2014
@strogdon
Copy link

strogdon commented Apr 3, 2014

comment:18

From what I've tested it appears that ticket #16026 solves the dot2tex breakage here. In any event the patch dot2tex patch appears in the upstream tarball

@tscrim
Copy link
Collaborator

tscrim commented Apr 6, 2014

comment:19

I also get that #16026 fixes this.

@tscrim
Copy link
Collaborator

tscrim commented Apr 6, 2014

Reviewer: Travis Scrimshaw

@tscrim
Copy link
Collaborator

tscrim commented Apr 6, 2014

Changed work issues from fix dot2tex to none

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants