Swiftpack.co - indisoluble/SwiftQuantumComputing as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
indisoluble/SwiftQuantumComputing
Quantum circuit simulator in Swift
.package(url: "https://github.com/indisoluble/SwiftQuantumComputing.git", from: "26.0.1")

Quantum circuit simulator in Swift

CI Status codecov platforms Documentation

Usage

Circuit

Usage

Check code in Circuit.playground.

Circuit with noise

import SwiftQuantumComputing // for macOS
//: 1. Compose a list of quantum gates & noises
let quantumOperators: [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
let circuit = MainNoiseCircuitFactory().makeNoiseCircuit(quantumOperators: quantumOperators)
//: 3. Use the quantum circuit with noise
print("Density matrix:: \(circuit.densityMatrix().get())\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.

GitHub

link
Stars: 35
Last commit: 3 days ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics