Errors when setting initial Vertex positions / layout won't update pressing "s"
I've encountered 2 errors on handling vertex-positions. First one is when setting initial position to (0, 0) for all new vertices.
Error when left-klicking in window:
/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py:54: RuntimeWarning: invalid value encountered in double_scalars
return (int(round(p[0] / self.m_res)),
Traceback (most recent call last):
File "/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py", line 612, in button_press_event
self.init_picked()
File "/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py", line 594, in init_picked
self.vertex_matrix = VertexMatrix(self.g, self.pos)
File "/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py", line 50, in __init__
self.update()
File "/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py", line 75, in update
i, j = self.get_box(self.pos[v])
File "/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py", line 54, in get_box
return (int(round(p[0] / self.m_res)),
ValueError: cannot convert float NaN to integer
Error when pressing "s" in window:
Traceback (most recent call last):
File "/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py", line 324, in layout_callback
self.regenerate_surface(lazy=False)
File "/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py", line 401, in regenerate_surface
self.vorder, self.eorder, self.nodesfirst, **self.kwargs)
File "/usr/lib/python3.3/site-packages/graph_tool/draw/cairo_draw.py", line 500, in cairo_draw
nodesfirst, vattrs, eattrs, vdefs, edefs, cr)
RuntimeError: invalid matrix (not invertible)
Traceback (most recent call last):
File "graphtool_example.py", line 35, in update_state
win.graph.regenerate_surface(lazy=False)
File "/usr/lib/python3.3/site-packages/graph_tool/draw/gtk_draw.py", line 401, in regenerate_surface
self.vorder, self.eorder, self.nodesfirst, **self.kwargs)
File "/usr/lib/python3.3/site-packages/graph_tool/draw/cairo_draw.py", line 500, in cairo_draw
nodesfirst, vattrs, eattrs, vdefs, edefs, cr)
RuntimeError: invalid matrix (not invertible)
The second is when setting random initial positions: Pressing "s" won't let vertices distribute equally but rather "join" to a specific point. After joining pressing "a" will lead the the desired effect..which is expected after initially pressing "s". Code used to test this was:
from graph_tool.all import *
from gi.repository import Gtk, GObject
import time
import random
g = Graph(prune=True, directed=True)
positions = g.new_vertex_property("vector<float>")
v1 = g.add_vertex()
positions[v1] = (0, 0)
def _add_vertex(graph):
global positions, v1
v = graph.add_vertex()
random.seed(time.time())
x = random.randint(0, 400)
random.seed(time.time())
y = random.randint(0, 300)
# this wil cause NaN and non-invertible matrix errors
positions[v] = (0, 0)
# this will cause vertices not to "distribute" pressing s
#positions[v] = (x, y)
graph.add_edge(v1, v)
for x in range(0, 10):
_add_vertex(g)
win = graph_tool.draw.GraphWindow(g,
pos=positions,
geometry=(400, 300),
vertex_pen_width=1,
vertex_font_size=10,
vertex_size=10,
)
def update_state():
global g
win.graph.regenerate_surface(lazy=False)
win.graph.queue_draw()
time.sleep(0.01)
return True
cid = GObject.idle_add(update_state)
win.connect("delete_event", Gtk.main_quit)
win.show_all()
Gtk.main()
´´´