Repository: vispy/vispy

Issue:
scene.visuals.Graph is not working with directed = True
I am trying to render an directed graph but I am getting the error.

Code (based on [example from gallery](https://vispy.org/gallery/scene/graph.html#sphx-glr-gallery-scene-graph-py), I just set directed=True):
```py
import sys

import networkx as nx

from vispy import app, scene
from vispy.visuals.graphs import layouts


canvas = scene.SceneCanvas(title='Simple NetworkX Graph', size=(600, 600),
                           bgcolor='white', show=True)
view = canvas.central_widget.add_view('panzoom')

graph = nx.adjacency_matrix(
    nx.fast_gnp_random_graph(500, 0.005, directed=True)
)
layout = layouts.get_layout('force_directed', iterations=100)

visual = scene.visuals.Graph(
    graph, layout=layout, line_color='black', arrow_type="stealth",
    arrow_size=30, node_symbol="disc", node_size=20,
    face_color=(1, 0, 0, 0.2), border_width=0.0, animate=True, directed=True,
    parent=view.scene)


@canvas.events.draw.connect
def on_draw(event):
    if not visual.animate_layout():
        canvas.update()

if __name__ == '__main__':
    if sys.flags.interactive != 1:
        app.run()
```

Error:
```
<< caught exception here: >>
  File "C:\Users\maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\vispy\util\event.py", line 469, in _invoke_callback
    cb(event)
  File "D:\dev\university\UniversityProjects\3\alg_and_struct\2\demo.py", line 27, in on_draw
    if not visual.animate_layout():
  File "C:\Users\maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\vispy\visuals\graphs\graph.py", line 143, in animate_layout
    node_vertices, line_vertices, arrows = next(self._layout_iter)
  File "C:\Users\maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\vispy\visuals\graphs\layouts\force_directed.py", line 95, in __call__
    for result in solver(adjacency_mat, directed):
  File "C:\Users\maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\vispy\visuals\graphs\layouts\force_directed.py", line 162, in _sparse_fruchterman_reingold
    line_vertices, arrows = _straight_line_vertices(adjacency_coo, pos,
  File "C:\Users\maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\vispy\visuals\graphs\util.py", line 92, in _straight_line_vertices
    arrow_vertices = arrow_vertices.reshape((len(arrow_vertices)/2, 4))
TypeError: 'float' object cannot be interpreted as an integer
ERROR: Invoking <function on_draw at 0x000001EB3573EDC0> for DrawEvent
```

May be typecasting or `//` at [this line](https://github.com/vispy/vispy/blob/feeaf8afa99ddbbac86a03e3e611a52c1c89584d/vispy/visuals/graphs/util.py#L92) is needed.



Discussion:
Looks like a bug to me. How would you feel about making a pull request to fix it with a `//`?
I'm a little confused at how we don't have a test that hits this point too. If you are feeling really adventurous you could add a test too.

Resolving patch:
diff --git a/vispy/visuals/graphs/util.py b/vispy/visuals/graphs/util.py
--- a/vispy/visuals/graphs/util.py
+++ b/vispy/visuals/graphs/util.py
@@ -89,7 +89,7 @@ def _straight_line_vertices(adjacency_mat, node_coords, directed=False):
     if directed:
         arrows = np.array(list(_get_directed_edges(adjacency_mat)))
         arrow_vertices = node_coords[arrows.ravel()]
-        arrow_vertices = arrow_vertices.reshape((len(arrow_vertices)/2, 4))
+        arrow_vertices = arrow_vertices.reshape((len(arrow_vertices)//2, 4))
 
     return line_vertices, arrow_vertices
 


Test patch: