TQSim
TQSim stands for Topological Quantum Simulator. It is an open-source library for simulating topological quantum computers based on Fibonacci anyons.
Installation
You can install TQSim from pip using
pip install --upgrade tqsim
Documentation
Usage
1. Basic Example
In this example, we create a circuit with 2 qudits, made of 3 anyons each. We then braid the anyons manually.
from tqsim import AnyonicCircuit
circuit = AnyonicCircuit(2, 3) # Create a circuit having 2 qudits and 3 anyons per qudits
circuit.braid(1, 2) # Braids the first with the second anyon
circuit.braid(3, 4) # Braids the first with the second anyon
circuit.braid(2, 1)
circuit.measure() # Measure the system by fusing the anyons
circuit.draw() # Draw the circuit
Here is the output of the draw() method:
Simulating the circuit:
circuit.run(shots = 50)
Output:
{'counts': {'0': 16, '2': 20, '4': 14}, 'memory': array([4, 2, 2, 2, 2, 2, 2, 4, 2, 4, 2, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4,
2, 4, 0, 2, 0, 0, 0, 0, 4, 4, 2, 2, 2, 4, 2, 2, 0, 0, 2, 4, 2, 2,
4, 2, 4, 4, 0, 2])}
2. Simulating a Hadamard gate
Here we simulate the application of a Hadamard gate on a single qudit with 3 anyons. Unlike the previous example, we will use a braiding sequence of braiding operators and their corresponding powers.
from tqsim import AnyonicCircuit
circuit = AnyonicCircuit(nb_qudits=1, nb_anyons_per_qudit=3) # Create a circuit with 1 qudit composed of 3 anyons
circuit.initialize([0,0,1]) # We initialize the circuit in the last state (state 2).
# For this circuit, we have 3 basis states: [0, 1, 2].
# The Hadamard gate braiding sequence in terms of braiding operators
had_sequence = [[1, 2], [2, 2], [1, -2], [2, -2], [1, 2], [2, 4], [1, -2], [2, 2],
[1, 2], [2, -2], [1, 2], [2, -2], [1, 4]]
circuit.braid_sequence(had_sequence) # We apply the braiding sequence.
# This should put our qudit in a superposition of the states 2 and 1.
circuit.measure() # Measure the system by fusing the anyons
circuit.draw() # Draw the circuit
The Hadamard braid looks like this
Simulating the circuit:
result = circuit.run(shots = 1000) # Run the circuit 1000 times.
print(result['counts']) # Show the counts only.
Output:
{'1': 493, '2': 507}