diff --git a/abp/qi.py b/abp/qi.py index 49a5228..825992e 100644 --- a/abp/qi.py +++ b/abp/qi.py @@ -8,7 +8,7 @@ And a circuit-model simulator import numpy as np import itertools as it - +from fractions import Fraction def hermitian_conjugate(u): """ Shortcut to the Hermitian conjugate """ @@ -128,5 +128,11 @@ class CircuitModel(object): for i in range(self.d): label = bin(i)[2:].rjust(self.nqubits, "0") if abs(self.state[i, 0]) > 0.00001: - s += "|{}>: {:.2f}\n".format(label, self.state[i, 0]) + term = self.state[i, 0] + real_sign = " " if term.real>=0 else "-" + real_frac = Fraction(str(term.real**2)).limit_denominator() + imag_sign = "+" if term.imag>=0 else "-" + imag_frac = Fraction(str(term.imag**2)).limit_denominator() + s += "|{}>: \t{}√{}\t{} i √{}\n".format( + label, real_sign, real_frac, imag_sign, imag_frac) return s diff --git a/tests/test_qi.py b/tests/test_qi.py index 5f167c2..84dc909 100644 --- a/tests/test_qi.py +++ b/tests/test_qi.py @@ -1,6 +1,7 @@ import numpy as np from abp import qi, GraphState from tqdm import tqdm +import mock DEPTH = 1000 @@ -161,3 +162,11 @@ def test_against_chp(n=5): chp.act_cnot(a, b) psi.act_cnot(a, b) assert psi == get_chp_state() + +def test_sqrt_notation(n=2): + """ Test that SQRT notation looks nice """ + c = mock.random_stabilizer_circuit(n) + g = GraphState(range(n)) + g.act_circuit(c) + print g.to_state_vector() +