Skip to content

Latest commit

 

History

History

docs

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>README  Reference</title>
    <link rel="stylesheet" type="text/css" href="css/jazzy.css" />
    <link rel="stylesheet" type="text/css" href="css/highlight.css" />
    <meta charset="utf-8">
    <script src="js/jquery.min.js" defer></script>
    <script src="js/jazzy.js" defer></script>
    
    <script src="js/lunr.min.js" defer></script>
    <script src="js/typeahead.jquery.js" defer></script>
    <script src="js/jazzy.search.js" defer></script>
  </head>
  <body>


    <a title="README  Reference"></a>

    <header class="header">
      <p class="header-col header-col--primary">
        <a class="header-link" href="index.html">
           Docs
        </a>
         (98% documented)
      </p>
    
      <p class="header-col--secondary">
        <form role="search" action="search.json">
          <input type="text" placeholder="Search documentation" data-typeahead>
        </form>
      </p>
    
    
    </header>

    <p class="breadcrumbs">
      <a class="breadcrumb" href="index.html"> Reference</a>
      <img class="carat" src="img/carat.png" />
      README  Reference
    </p>

    <div class="content-wrapper">
      <nav class="navigation">
        <ul class="nav-groups">
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Guides.html">Guides</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="readme.html">README</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Enums.html">Enumerations</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/DecomposeGatesError.html">DecomposeGatesError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/DensityMatrixError.html">DensityMatrixError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/DrawCircuitError.html">DrawCircuitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/EvolveCircuitError.html">EvolveCircuitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/GateError.html">GateError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/GroupedProbabilitiesError.html">GroupedProbabilitiesError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/MakeDensityMatrixError.html">MakeDensityMatrixError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/MakeStatevectorBitsError.html">MakeStatevectorBitsError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/MakeStatevectorError.html">MakeStatevectorError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/NoiseError.html">NoiseError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/QuantumOperatorError.html">QuantumOperatorError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/SimplifiedGate.html">SimplifiedGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/SimplifiedNoise.html">SimplifiedNoise</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/SimplifiedQuantumOperator.html">SimplifiedQuantumOperator</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/StatevectorError.html">StatevectorError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/SummarizedProbabilitiesError.html">SummarizedProbabilitiesError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/UnitaryError.html">UnitaryError</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Extensions.html">Extensions</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/Array.html">Array</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/Double.html">Double</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/Int.html">Int</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/Int/DivisionType.html">– DivisionType</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/String.html">String</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Protocols.html">Protocols</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/Circuit.html">Circuit</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/CircuitDensityMatrix.html">CircuitDensityMatrix</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/CircuitDensityMatrixFactory.html">CircuitDensityMatrixFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/CircuitFactory.html">CircuitFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/CircuitProbabilities.html">CircuitProbabilities</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/CircuitStatevector.html">CircuitStatevector</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/CircuitStatevectorFactory.html">CircuitStatevectorFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/ConfigurableGate.html">ConfigurableGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/Drawable.html">Drawable</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/DrawerFactory.html">DrawerFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/GeneticFactory.html">GeneticFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/NoiseCircuit.html">NoiseCircuit</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/NoiseCircuitFactory.html">NoiseCircuitFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/QuantumOperatorConvertible.html">QuantumOperatorConvertible</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/SimplifiedGateConvertible.html">SimplifiedGateConvertible</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/SimplifiedNoiseConvertible.html">SimplifiedNoiseConvertible</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/SimplifiedQuantumOperatorConvertible.html">SimplifiedQuantumOperatorConvertible</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/TwoLevelDecompositionSolver.html">TwoLevelDecompositionSolver</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/TwoLevelDecompositionSolverFactory.html">TwoLevelDecompositionSolverFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/XorGaussianEliminationSolver.html">XorGaussianEliminationSolver</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/XorGaussianEliminationSolverFactory.html">XorGaussianEliminationSolverFactory</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Structs.html">Structures</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/ContinuedFractionsSolver.html">ContinuedFractionsSolver</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/ContinuedFractionsSolver/FindApproximationError.html">– FindApproximationError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/ControlledGate.html">ControlledGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/ControlledGate/InitError.html">– InitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/EuclideanSolver.html">EuclideanSolver</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Gate.html">Gate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Gate/MakeInversionAboutMeanError.html">– MakeInversionAboutMeanError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Gate/MakeModularExponentiationError.html">– MakeModularExponentiationError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Gate/MakeQuantumFourierTransformError.html">– MakeQuantumFourierTransformError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Gate/Axis.html">– Axis</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/GeneticConfiguration.html">GeneticConfiguration</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/GeneticConfiguration/InitError.html">– InitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/GeneticUseCase.html">GeneticUseCase</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/GeneticUseCase/InitError.html">– InitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/GeneticUseCase/TruthTable.html">– TruthTable</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/GeneticUseCase/Circuit.html">– Circuit</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/HadamardGate.html">HadamardGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainCircuitDensityMatrixFactory.html">MainCircuitDensityMatrixFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainCircuitFactory.html">MainCircuitFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainCircuitFactory/UnitaryConfiguration.html">– UnitaryConfiguration</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainCircuitFactory/StatevectorConfiguration.html">– StatevectorConfiguration</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainCircuitStatevectorFactory.html">MainCircuitStatevectorFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainDrawerFactory.html">MainDrawerFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainGeneticFactory.html">MainGeneticFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainNoiseCircuitFactory.html">MainNoiseCircuitFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainNoiseCircuitFactory/DensityMatrixConfiguration.html">– DensityMatrixConfiguration</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainTwoLevelDecompositionSolverFactory.html">MainTwoLevelDecompositionSolverFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainTwoLevelDecompositionSolverFactory/SingleQubitGateDecomposition.html">– SingleQubitGateDecomposition</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MainXorGaussianEliminationSolverFactory.html">MainXorGaussianEliminationSolverFactory</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Matrix.html">Matrix</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Matrix/InitError.html">– InitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MatrixGate.html">MatrixGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/MatrixGate/InitError.html">– InitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Noise.html">Noise</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/NotGate.html">NotGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/OracleGate.html">OracleGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/OracleGate/InitError.html">– InitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/PhaseShiftGate.html">PhaseShiftGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/QuantumOperator.html">QuantumOperator</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Rational.html">Rational</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Rational/InitError.html">– InitError</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/RotationGate.html">RotationGate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Vector.html">Vector</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/Vector/InitError.html">– InitError</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Typealiases.html">Type Aliases</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Typealiases.html#/SQCView">SQCView</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Typealiases.html#/s:21SwiftQuantumComputing7SQCViewa">SQCView</a>
              </li>
            </ul>
          </li>
        </ul>
      </nav>
      <article class="main-content">

        <section class="section">
          <div class="section-content top-matter">
            
            <h1 id='quantum-circuit-simulator-in-swift' class='heading'>Quantum circuit simulator in Swift</h1>

<p><a href="https://github.com/indisoluble/SwiftQuantumComputing/actions?query=branch%3Amaster"><img src="https://github.com/indisoluble/SwiftQuantumComputing/workflows/build/badge.svg?branch=master" alt="CI Status"></a>
<a href="https://codecov.io/gh/indisoluble/SwiftQuantumComputing"><img src="https://codecov.io/gh/indisoluble/SwiftQuantumComputing/branch/master/graph/badge.svg" alt="codecov"></a>
<img src="https://img.shields.io/badge/platform-iOS%20%7C%20macOS%20%7C%20Linux-lightgrey.svg" alt="platforms">
<a href="https://indisoluble.github.io/SwiftQuantumComputing"><img src="https://indisoluble.github.io/SwiftQuantumComputing/badge.svg" alt="Documentation"></a></p>
<h2 id='usage' class='heading'>Usage</h2>
<h3 id='circuit' class='heading'>Circuit</h3>

<p><img src="https://raw.githubusercontent.com/indisoluble/SwiftQuantumComputing/master/Images/Usage.jpg" alt="Usage"></p>

<p>Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Usage/Circuit.playground/Contents.swift">Circuit.playground</a>.</p>
<h3 id='circuit-with-noise' class='heading'>Circuit with noise</h3>
<pre class="highlight swift"><code><span class="kd">import</span> <span class="kt">SwiftQuantumComputing</span> <span class="c1">// for macOS</span>
<span class="c1">//: 1. Compose a list of quantum gates &amp; noises</span>
<span class="k">let</span> <span class="nv">quantumOperators</span><span class="p">:</span> <span class="p">[</span><span class="kt">QuantumOperatorConvertible</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span>
    <span class="kt">Gate</span><span class="o">.</span><span class="nf">hadamard</span><span class="p">(</span><span class="nv">target</span><span class="p">:</span> <span class="mi">0</span><span class="p">),</span>
    <span class="kt">Noise</span><span class="o">.</span><span class="nf">bitFlip</span><span class="p">(</span><span class="nv">probability</span><span class="p">:</span> <span class="mf">0.35</span><span class="p">,</span> <span class="nv">target</span><span class="p">:</span> <span class="mi">0</span><span class="p">),</span>
    <span class="kt">Gate</span><span class="o">.</span><span class="nf">phaseShift</span><span class="p">(</span><span class="nv">radians</span><span class="p">:</span> <span class="mf">0.25</span><span class="p">,</span> <span class="nv">target</span><span class="p">:</span> <span class="mi">2</span><span class="p">),</span>
    <span class="kt">Noise</span><span class="o">.</span><span class="nf">phaseDamping</span><span class="p">(</span><span class="nv">probability</span><span class="p">:</span> <span class="mf">0.75</span><span class="p">,</span> <span class="nv">target</span><span class="p">:</span> <span class="mi">2</span><span class="p">),</span>
    <span class="kt">Gate</span><span class="o">.</span><span class="nf">controlled</span><span class="p">(</span><span class="nv">gate</span><span class="p">:</span> <span class="o">.</span><span class="nf">hadamard</span><span class="p">(</span><span class="nv">target</span><span class="p">:</span> <span class="mi">1</span><span class="p">),</span> <span class="nv">controls</span><span class="p">:</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">]),</span>
    <span class="kt">Noise</span><span class="o">.</span><span class="nf">bitFlip</span><span class="p">(</span><span class="nv">probability</span><span class="p">:</span> <span class="mf">0.8</span><span class="p">,</span> <span class="nv">target</span><span class="p">:</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">]</span>
<span class="c1">//: 2. Build a quantum circuit with noise using the list</span>
<span class="k">let</span> <span class="nv">circuit</span> <span class="o">=</span> <span class="kt">MainNoiseCircuitFactory</span><span class="p">()</span><span class="o">.</span><span class="nf">makeNoiseCircuit</span><span class="p">(</span><span class="nv">quantumOperators</span><span class="p">:</span> <span class="n">quantumOperators</span><span class="p">)</span>
<span class="c1">//: 3. Use the quantum circuit with noise</span>
<span class="k">let</span> <span class="nv">result</span> <span class="o">=</span> <span class="k">try</span> <span class="n">circuit</span><span class="o">.</span><span class="nf">densityMatrix</span><span class="p">()</span><span class="o">.</span><span class="nf">get</span><span class="p">()</span>
<span class="nf">print</span><span class="p">(</span><span class="s">"Density matrix: </span><span class="se">\(</span><span class="n">result</span><span class="se">)\n</span><span class="s">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="s">"Probabilities: </span><span class="se">\(</span><span class="n">result</span><span class="o">.</span><span class="nf">probabilities</span><span class="p">()</span><span class="se">)\n</span><span class="s">"</span><span class="p">)</span>
</code></pre>

<p>Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Usage/NoiseCircuit.playground/Contents.swift">NoiseCircuit.playground</a>.</p>
<h2 id='performance' class='heading'>Performance</h2>
<pre class="highlight shell"><code>~/SwiftQuantumComputing % swift run sqc-measure-performance
</code></pre>

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

<p>Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Sources/SQCMeasurePerformance/main.swift">SQCMeasurePerformance/main.swift</a>.</p>
<h2 id='algorithms' class='heading'>Algorithms</h2>

<ul>
<li>Use a genetic algorithm to automatically generate a quantum circuit - Check example in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Usage/Genetic.playground/Contents.swift">Genetic.playground</a>.</li>
<li>Two-level decomposition: Decompose any gate into an equivalent sequence of not gates and fully controlled phase shifts, z-rotations, y-rotations &amp; not gates - Check example in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Usage/TwoLevelDecomposition.playground/Contents.swift">TwoLevelDecomposition.playground</a>.</li>
</ul>
<h2 id='other-algorithms' class='heading'>Other algorithms</h2>

<ul>
<li>Euclidean Algorithm: Find greatest common divisor of two integers - Check example in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Usage/EuclideanAlgorithm.playground/Contents.swift">EuclideanAlgorithm.playground</a>.</li>
<li>Continued Fractions: Find an approximation to a given rational number - Check example in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Usage/ContinuedFractions.playground/Contents.swift">ContinuedFractions.playground</a>.</li>
<li>Gaussian Elimination: Solve a system of XOR equations - Check example in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Usage/XorGaussianElimination.playground/Contents.swift">XorGaussianElimination.playground</a>.</li>
</ul>
<h2 id='more-examples' class='heading'>More examples</h2>

<ul>
<li>Bernstein–Vazirani algorithm - Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Example/BernsteinVaziraniAlgorithm.playground/Contents.swift">BernsteinVaziraniAlgorithm.playground</a>.</li>
<li>Deutsch&rsquo;s algorithm - Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Example/DeutschAlgorithm.playground/Contents.swift">DeutschAlgorithm.playground</a>.</li>
<li>Deutsch-Jozsa algorithm - Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Example/DeutschJozsaAlgorithm.playground/Contents.swift">DeutschJozsaAlgorithm.playground</a>.</li>
<li>Grover&rsquo;s algorithm - Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Example/GroverAlgorithm.playground/Contents.swift">GroverAlgorithm.playground</a>.</li>
<li>Shor&rsquo;s Algorithm - Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Example/ShorAlgorithm.playground/Contents.swift">ShorAlgorithm.playground</a>.</li>
<li>Simon&rsquo;s periodicity algorithm - Check code in <a href="https://github.com/indisoluble/SwiftQuantumComputing/tree/master/Playground/Example/SimonPeriodicityAlgorithm.playground/Contents.swift">SimonPeriodicityAlgorithm.playground</a>.</li>
</ul>
<h2 id='documentation' class='heading'>Documentation</h2>

<p>Documentation for the project can be found <a href="https://indisoluble.github.io/SwiftQuantumComputing">here</a>.</p>
<h2 id='references' class='heading'>References</h2>

<ul>
<li><a href="https://github.com/aws/amazon-braket-default-simulator-python">Amazon Braket Default Simulator</a></li>
<li><a href="https://www.amazon.com/Automatic-Quantum-Computer-Programming-Approach/dp/038736496X">Automatic Quantum Computer Programming: A Genetic Programming Approach</a></li>
<li><a href="https://www.math.u-bordeaux.fr/%7Epjaming/M1/exposes/MA2.pdf">Continued Fractions and the Euclidean Algorithm</a></li>
<li><a href="https://arxiv.org/abs/1210.7366">Decomposition of unitary matrices and quantum gates</a></li>
<li><a href="https://github.com/fedimser/quantum_decomp/blob/master/res/Fedoriaka2019Decomposition.pdf">Decomposition of unitary matrix into quantum gates</a></li>
<li><a href="https://github.com/Qiskit/qiskit-terra">IBM Qiskit</a></li>
<li><a href="https://arxiv.org/abs/1601.07195">qHiPSTER: The Quantum High Performance Software Testing Environment</a></li>
<li><a href="https://www.amazon.com/Quantum-Computing-Computer-Scientists-Yanofsky/dp/0521879965">Quantum Computing for Computer Scientists</a></li>
<li><a href="https://arxiv.org/abs/quant-ph/0010034">Shor&rsquo;s Quantum Factoring Algorithm</a></li>
</ul>
<h2 id='swiftpm-dependencies' class='heading'>SwiftPM dependencies</h2>

<ul>
<li><a href="https://github.com/indisoluble/CBLAS-Linux">CBLAS-Linux</a> (only for Linux)</li>
<li><a href="https://github.com/indisoluble/CLapacke-Linux">CLapacke-Linux</a> (only for Linux)</li>
<li><a href="https://github.com/apple/swift-argument-parser">Swift Argument Parser</a></li>
<li><a href="https://github.com/apple/swift-numerics">Swift Numerics</a></li>
</ul>
<h3 id='linux' class='heading'>Linux</h3>

<p>This package depends on <a href="http://www.netlib.org/blas/">BLAS</a> &amp; <a href="http://www.netlib.org/lapack/">LAPACK</a> if running on Linux, more exactly, <a href="https://www.ubuntu.com">Ubuntu</a>.</p>

<p>These dependencies are reflected in <code>Package.swift</code> with:</p>

<ul>
<li><a href="https://github.com/indisoluble/CBLAS-Linux">CBLAS-Linux</a>, which in turn expects to find: <code>/usr/include/x86_64-linux-gnu/cblas-netlib.h</code></li>
<li><a href="https://github.com/indisoluble/CLapacke-Linux">CLapacke-Linux</a>, which in turn expects to find: <code>/usr/include/lapacke.h</code></li>
</ul>

<p>So, after installing <a href="http://www.netlib.org/blas/">BLAS</a> &amp; <a href="http://www.netlib.org/lapack/">LAPACK</a> (in case they are not already there):</p>
<pre class="highlight plaintext"><code>sudo apt-get install libblas-dev liblapacke-dev
</code></pre>

<p>Check <code>cblas-netlib.h</code> &amp; <code>lapacke.h</code> are in the expected locations.</p>

          </div>
        </section>


      </article>
    </div>
    <section class="footer">
      <p>&copy; 2021 <a class="link" href="" target="_blank" rel="external"></a>. All rights reserved. (Last updated: 2021-12-12)</p>
      <p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.13.7</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
    </section>
  </body>
</div>
</html>