Browse Source

Aliasing imports

master
Pete Shadbolt 8 years ago
parent
commit
7d90052833
20 changed files with 15 additions and 42001 deletions
  1. +4
    -0
      abp/__init__.py
  2. +3
    -2
      examples/visualize.py
  3. +0
    -24
      static/curve.js
  4. +0
    -20
      static/graph.js
  5. +0
    -24
      static/grid.js
  6. +0
    -25
      static/index.html
  7. +0
    -46
      static/interaction.js
  8. +0
    -1002
      static/libs.js
  9. +0
    -20
      static/main.css
  10. +0
    -82
      static/main.js
  11. +0
    -34
      static/materials.js
  12. +0
    -46
      static/poll.js
  13. +0
    -40668
      static/three.js
  14. +1
    -1
      tests/demograph.py
  15. +1
    -1
      tests/test_against_anders_and_briegel.py
  16. +2
    -2
      tests/test_against_circuit_model.py
  17. +1
    -1
      tests/test_get_state_vector.py
  18. +1
    -1
      tests/test_graph.py
  19. +1
    -1
      tests/test_json.py
  20. +1
    -1
      tests/test_measurement.py

+ 4
- 0
abp/__init__.py View File

@@ -0,0 +1,4 @@
# Alias some stuff to make imports cleaner
from abp.graphstate import GraphState
from abp.server import Server
from abp.qi import CircuitModel

+ 3
- 2
examples/visualize.py View File

@@ -1,4 +1,5 @@
from abp.server import Server
from abp import GraphState
from abp import Server
import time

server = Server()
@@ -10,4 +11,4 @@ while True:
i += 1
time.sleep(1)

server.shutdown()
server.shutdown

+ 0
- 24
static/curve.js View File

@@ -1,24 +0,0 @@
// Curve settings
var curveProperties = {
splineDensity: 10,
curvature: 100
};

// Add a curved edge between two points
function makeEdge(start, end) {
// Make the geometry of the curve
var a = new THREE.Vector3(start.x, start.y, start.z);
var b = new THREE.Vector3(end.x, end.y, end.z);
var length = new THREE.Vector3().subVectors(a, b).length();
var bend = new THREE.Vector3(length / curveProperties.curvature, length / curveProperties.curvature, 0);
var mid = new THREE.Vector3().add(a).add(b).multiplyScalar(0.5).add(bend);
var spline = new THREE.CatmullRomCurve3([a, mid, b]);
var geometry = new THREE.Geometry();
var splinePoints = spline.getPoints(curveProperties.splineDensity);
Array.prototype.push.apply(geometry.vertices, splinePoints);

// Make the actual Object3d thing
var line = new THREE.Line(geometry, materials.edge);
return line;
}


+ 0
- 20
static/graph.js View File

@@ -1,20 +0,0 @@
function buildGraph(json) {
// Add all the qubits
var geometry = new THREE.Geometry();
var vertex = new THREE.Vector3(0, 0, 0);
geometry.vertices.push(vertex);
var nodes = new THREE.Points(geometry, materials.node);

// Add all the edges
var edges = new THREE.Object3D();
edges.add(makeEdge({
"start": [0, 0, 0],
"end": [1, 1, 1]
}));
// Construct and return
var graph = new THREE.Object3D();
graph.add(nodes);
graph.add(edges);
return graph;
}

+ 0
- 24
static/grid.js View File

@@ -1,24 +0,0 @@
//TODO Move to THREE.gridhelper
// Make a grid
function makeGrid(side, n, color) {
var markers = new THREE.Object3D();
var gridStyle = {
color: color,
transparent: true,
linewidth: 1,
opacity: 0.5
};
var material = new THREE.LineBasicMaterial(gridStyle);
for (var i = -n / 2; i <= n / 2; ++i) {
var geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(side * i / n, -side / 2, 0));
geometry.vertices.push(new THREE.Vector3(side * i / n, side / 2, 0));
var line = new THREE.Line(geometry, material);
var line90 = line.clone();
line90.rotation.z = Math.PI / 2;
markers.add(line);
markers.add(line90);
}
markers.name = "grid";
return markers;
}

+ 0
- 25
static/index.html View File

@@ -1,25 +0,0 @@
<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8">
<title>abp</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1" />
<link rel="stylesheet" href="main.css">
</head>

<body>
<script type="text/javascript" src="three.js"></script>
<script type="text/javascript" src="libs.js"></script>
<script type="text/javascript" src="materials.js"></script>
<script type="text/javascript" src="poll.js"></script>
<script type="text/javascript" src="grid.js"></script>
<script type="text/javascript" src="curve.js"></script>
<script type="text/javascript" src="main.js"></script>
<img id="ball" src="data:image/png;base64,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"/
style=display:none;>

<div id=infoholder class=hidden>
</div>
</body>
</html>

+ 0
- 46
static/interaction.js View File

@@ -1,46 +0,0 @@
// Gets a reference to the node nearest to the mouse cursor
function nearestNode() {
raycaster.setFromCamera(mouse, camera);
for (var i = 0; i < nodeGeometry.vertices.length; ++i) {
if (raycaster.ray.distanceSqToPoint(nodeGeometry.vertices[i]) < 0.01) {
return i;
}
}
return undefined;
}


// Find out: what is the mouse pointing at?
function checkIntersections() {
var new_selection = nearestNode();
if (new_selection != selection) {
selection = new_selection;
info.className = selection ? "visible" : "hidden";
info.innerHTML = selection ? nodeGeometry.labels[new_selection] : info.innerHTML;
render();
}
}

// Update the mouse position tracker
function onMouseMove(event) {
mouse.wasClick = false;
mouse.absx = event.clientX;
mouse.absy = event.clientY;
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
w = 200;
h = 15;
info.style.top = mouse.absy - h - 40 + "px";
info.style.left = mouse.absx - w / 2 + "px";
checkIntersections();
}

// Add qubits or whatever
function onClick(event){
if (!selection){return;}
console.log(nodeGeometry.vertices[selection]);
qubits.geometry.dynamic = true;
qubits.geometry.vertices.push(nodeGeometry.vertices[selection].clone());
qubits.geometry.verticesNeedUpdate = true;
}


+ 0
- 1002
static/libs.js
File diff suppressed because it is too large
View File


+ 0
- 20
static/main.css View File

@@ -1,20 +0,0 @@
html, body { margin: 0; padding: 0; overflow: hidden; font-size: 10pt; font-family: "courier new"; }
#infoholder {
background: black; color:white; padding: 5px; margin:0px; position: absolute; top:5px; left:5px; font-family:"courier new"; text-align: center; font-size:10pt;
height:15px;
border-radius:3px;
}

.visible {
visibility: visible;
opacity: 1;
transform: scale(1);
transition: opacity .08s linear, transform .08s linear;
}

.hidden {
visibility: hidden;
opacity: 0;
transform: scale(.5);
transition: visibility .08s, opacity .08s linear, transform .08s linear;
}

+ 0
- 82
static/main.js View File

@@ -1,82 +0,0 @@
// IE9
if (typeof console === "undefined") {
var console = {
log: function(logMsg) {}
};
}

var controls, renderer, raycaster, scene, selection, camera;

// Run on startup
window.onload = init;

// Clear the whole scene
function makeScene() {
var myScene = new THREE.Scene();
var grid1 = makeGrid(10, 10, "lightgray");
grid1.position.z = -5;
myScene.add(grid1);

var grid2 = makeGrid(10, 10, "lightgray");
grid2.rotation.x = Math.PI/2;
grid2.position.y = -5;
myScene.add(grid2);
var grid3 = makeGrid(10, 10, "lightgray");
grid3.rotation.y = Math.PI/2;
grid3.position.x = -5;
myScene.add(grid3);
return myScene;
}


// Render the current frame to the screen
function render() {
renderer.render(scene, camera);
}

// This is the main control loop
function loopForever() {
controls.update();
requestAnimationFrame(loopForever);
}


// This just organises kickoff
function startMainLoop() {
scene = makeScene();
controls.addEventListener("change", render);
//poll();
loopForever();
}


// Called on startup
function init() {
// Measure things, get references
var width = window.innerWidth;
var height = window.innerHeight;

// Renderer
renderer = new THREE.WebGLRenderer({"antialias":true});
renderer.setSize(width, height);
renderer.setClearColor(0xffffff, 1);
document.querySelector("body").appendChild(renderer.domElement);

// Time to load the materials
loadMaterials();

// Camera, controls, raycaster
camera = new THREE.PerspectiveCamera(45, width / height, 0.3, 100);
controls = new THREE.OrbitControls(camera);

// Center the camera
controls.center.set(0, 0, 0);
controls.rotateSpeed = 0.2;
camera.position.set(0, 0, 20);

// Start polling
//setInterval(poll, 1000);

// Run
startMainLoop();
}

+ 0
- 34
static/materials.js View File

@@ -1,34 +0,0 @@
var textures = {};
var materials = {};

// Load the site texture from the data URI
function loadMaterials(argument) {
textures.sprite = new THREE.Texture(document.getElementById("ball"));
textures.sprite.needsUpdate = true;

var lineStyle = {
color: "gray",
transparent: false,
linewidth: 1
};
materials.edge = new THREE.LineBasicMaterial(lineStyle);

var pointStyle = {
color: 0xcccccc,
size: 0.1,
map: textures.sprite,
alphaTest: 0.5,
transparent: true,
};
materials.point = new THREE.PointsMaterial(pointStyle);

var qubitStyle = {
size: 0.8,
map: textures.sprite,
alphaTest: 0.5,
transparent: true,
color: "red"
};

materials.qubit = new THREE.PointsMaterial(qubitStyle);
}

+ 0
- 46
static/poll.js View File

@@ -1,46 +0,0 @@
var url = "ws://localhost:8000/";

function doConnect() {
websocket = new WebSocket(url);
websocket.onopen = onOpen;
websocket.onclose = onClose;
websocket.onmessage = onMessage;
websocket.onerror = onError;
}

function onOpen(evt) {
writeToScreen("connected\n");
doSend("Hello from the browser");
}

function onClose(evt) {
writeToScreen("disconnected\n");
}

function onMessage(evt) {
writeToScreen("response: " + evt.data + '\n');
}

function onError(evt) {
writeToScreen('error: ' + evt.data + '\n');
websocket.close();
}

function doSend(message) {
writeToScreen("sent: " + message + '\n');
websocket.send(message);
}

function writeToScreen(message) {
console.log(message);
}

function init() {
doConnect();
}

function doDisconnect() {
websocket.close();
}

window.addEventListener("load", init, false);

+ 0
- 40668
static/three.js
File diff suppressed because it is too large
View File


+ 1
- 1
tests/demograph.py View File

@@ -1,4 +1,4 @@
from abp.graphstate import GraphState
from abp import GraphState

def demograph():
""" A graph for testing with """


+ 1
- 1
tests/test_against_anders_and_briegel.py View File

@@ -1,4 +1,4 @@
from abp.graphstate import GraphState
from abp import GraphState
from anders_briegel import graphsim
from abp import clifford
import random


+ 2
- 2
tests/test_against_circuit_model.py View File

@@ -1,5 +1,5 @@
from abp.graphstate import GraphState
from abp.qi import CircuitModel
from abp import GraphState
from abp import CircuitModel
from abp import clifford
import numpy as np
import random


+ 1
- 1
tests/test_get_state_vector.py View File

@@ -1,4 +1,4 @@
from abp.graphstate import GraphState
from abp import GraphState
from abp import qi
import numpy as np



+ 1
- 1
tests/test_graph.py View File

@@ -1,4 +1,4 @@
from abp.graphstate import GraphState
from abp import GraphState
from abp import clifford
from demograph import demograph
import time


+ 1
- 1
tests/test_json.py View File

@@ -1,4 +1,4 @@
from abp.graphstate import GraphState
from abp import GraphState
from abp import clifford
from demograph import demograph
import time


+ 1
- 1
tests/test_measurement.py View File

@@ -1,4 +1,4 @@
from abp.graphstate import GraphState
from abp import GraphState

def test_z_measurement():
#TODO


Loading…
Cancel
Save