Skip to content

Repository files navigation

Quantum circuit simulator in Swift

CI StatuscodecovplatformsDocumentation

Usage

Circuit

Usage

Check code in Circuit.playground.

Circuit with noise

import SwiftQuantumComputing // for macOS
//: 1. Compose a list of quantum gates & noises
letquantumOperators:[QuantumOperatorConvertible]=[Gate.hadamard(target:0),Noise.bitFlip(probability:0.35, target:0),Gate.phaseShift(radians:0.25, target:2),Noise.phaseDamping(probability:0.75, target:2),Gate.controlled(gate:.hadamard(target:1), controls:[2,0]),Noise.bitFlip(probability:0.8, target:1)]
//: 2. Build a quantum circuit with noise using the list
letcircuit=MainNoiseCircuitFactory().makeNoiseCircuit(quantumOperators: quantumOperators)
//: 3. Use the quantum circuit with noise
letresult=try circuit.densityMatrix().get()print("Density matrix: \(result)\n")print("Probabilities: \(result.probabilities())\n")

Check code in NoiseCircuit.playground.

Performance

~/SwiftQuantumComputing % swift run sqc-measure-performance

Run this application to check the performance of this simulator in your computer. Execute swift run sqc-measure-performance -h to see all available options.

Check code in SQCMeasurePerformance/main.swift.

Algorithms

  • Use a genetic algorithm to automatically generate a quantum circuit - Check example in Genetic.playground.
  • Two-level decomposition: Decompose any gate into an equivalent sequence of not gates and fully controlled phase shifts, z-rotations, y-rotations & not gates - Check example in TwoLevelDecomposition.playground.

Other algorithms

More examples

Documentation

Documentation for the project can be found here.

References

SwiftPM dependencies

Linux

This package depends on BLAS & LAPACK if running on Linux, more exactly, Ubuntu.

These dependencies are reflected in Package.swift with:

  • CBLAS-Linux, which in turn expects to find: /usr/include/x86_64-linux-gnu/cblas-netlib.h
  • CLapacke-Linux, which in turn expects to find: /usr/include/lapacke.h

So, after installing BLAS & LAPACK (in case they are not already there):

sudo apt-get install libblas-dev liblapacke-dev

Check cblas-netlib.h & lapacke.h are in the expected locations.