Browse Source

Now working without fancy.py.

master
Pete Shadbolt 7 years ago
parent
commit
89b603e00c
4 changed files with 46 additions and 7 deletions
  1. +1
    -0
      abp/__init__.py
  2. +2
    -7
      abp/nxgraphstate.py
  3. +35
    -0
      abp/vizclient.py
  4. +8
    -0
      examples/visualization/new.py

+ 1
- 0
abp/__init__.py View File

@@ -1,6 +1,7 @@
# Alias some stuff to make imports cleaner # Alias some stuff to make imports cleaner
from abp.graphstate import GraphState from abp.graphstate import GraphState
from abp.nxgraphstate import NXGraphState from abp.nxgraphstate import NXGraphState
from abp.vizclient import VizClient
from abp.qi import CircuitModel from abp.qi import CircuitModel


DETERMINISTIC = False DETERMINISTIC = False

+ 2
- 7
abp/nxgraphstate.py View File

@@ -1,6 +1,8 @@
import networkx as nx import networkx as nx
import numpy as np
import graphstate import graphstate
import clifford import clifford
import util


class NXGraphState(graphstate.GraphState, nx.Graph): class NXGraphState(graphstate.GraphState, nx.Graph):
""" This is GraphState with NetworkX-like abilities """ """ This is GraphState with NetworkX-like abilities """
@@ -15,10 +17,3 @@ class NXGraphState(graphstate.GraphState, nx.Graph):
for key, (x, y, z) in pos.items(): for key, (x, y, z) in pos.items():
self.node[key]["position"] = util.xyz(x, y, z) self.node[key]["position"] = util.xyz(x, y, z)


def add_vops(self):
""" Automatically add vops if they're not present """
for key in self.node:
if not "vop" in self.node[key]:
self.node[key]["vop"] = clifford.identity


+ 35
- 0
abp/vizclient.py View File

@@ -0,0 +1,35 @@
import time, atexit, json
import networkx as nx
import numpy as np
import websocket
from socket import error as socket_error
import clifford
import util
import nxgraphstate

class VizClient(object):
def __init__(self, uri = "ws://localhost:5000"):
self.ws = websocket.create_connection(uri, timeout=0.1)
atexit.register(self.shutdown)

def shutdown(self):
""" Close the connection to the websocket """
self.ws.close()

def update(self, graph, delay = 0.5):
""" Call this function when you are ready to send data to the browser """
g = nxgraphstate.NXGraphState(graph)

# Automatically perform layout if position is not provided
if not all(("position" in node) for node in g.node.values()):
g.layout()

# Send data to browser and rate-limit
try:
self.ws.send(json.dumps(g.to_json(stringify=True)))
self.ws.recv()
except websocket._exceptions.WebSocketTimeoutException:
print "Timed out ... you might be pushing a bit hard"
time.sleep(delay)



+ 8
- 0
examples/visualization/new.py View File

@@ -0,0 +1,8 @@
from abp import GraphState, VizClient
from abp.util import xyz

v = VizClient()
g = GraphState(5)
for i in range(5):
g.node[i]["position"] = xyz(i, 0, 0)
v.update(g)

Loading…
Cancel
Save