123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <!DOCTYPE html>
- <html >
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <title>Quantum Gates</title>
-
- <link rel="stylesheet" href="_static/pygments.css">
- <link rel="stylesheet" href="_static/theme.css">
-
- <script src="_static/theme-vendors.js"></script>
- <script src="_static/theme.js" defer></script>
-
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Quantum Operations" href="operations.html" />
- <link rel="prev" title="Quantum Registers" href="registers.html" />
- </head>
- <body><div id="app" class="theme-container" :class="pageClasses"><navbar @toggle-sidebar="toggleSidebar">
- <router-link to="index.html" class="home-link">
- <span class="site-name">QCGPU</span>
- </router-link>
- <div class="links">
- <navlinks class="can-hide">
- <div class="nav-item">
- <a href="install.html"
- class="nav-link ">
- None
- </a>
- </div>
- </navlinks>
- </div>
- </navbar>
-
- <div class="sidebar-mask" @click="toggleSidebar(false)">
- </div>
- <sidebar @toggle-sidebar="toggleSidebar">
-
- <navlinks>
-
- <div class="nav-item">
- <a href="install.html"
- class="nav-link ">
- None
- </a>
- </div>
-
- </navlinks><div class="sidebar-links" role="navigation" aria-label="main navigation">
-
- <div class="sidebar-group">
- <ul class="current">
- <li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a></li>
- <li class="toctree-l1"><a class="reference internal" href="quickstart.html">Getting Started</a></li>
- <li class="toctree-l1 current"><a class="reference internal" href="guide.html">User Guide</a><ul class="current">
- <li class="toctree-l2"><a class="reference internal" href="registers.html">Quantum Registers</a></li>
- <li class="toctree-l2 current"><a class="current reference internal" href="#">Quantum Gates</a></li>
- <li class="toctree-l2"><a class="reference internal" href="operations.html">Quantum Operations</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </sidebar>
- <page>
- <div class="content">
-
- <div class="section" id="quantum-gates">
- <h1>Quantum Gates<a class="headerlink" href="#quantum-gates" title="Permalink to this headline">¶</a></h1>
- <p>In quantum computing, gates are used to manipulate quantum registers and
- to implement quantum algorithms.</p>
- <div class="section" id="built-in-gates">
- <h2>Built-In Gates<a class="headerlink" href="#built-in-gates" title="Permalink to this headline">¶</a></h2>
- <p>There are a number of gates built into QCGPU. They can all be applied
- the same way:</p>
- <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
- <span class="n">register</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">State</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
- <span class="n">state</span><span class="o">.</span><span class="n">h</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="c1"># Applies the Hadamard (H) gate to the first qubit.</span>
- <span class="n">state</span><span class="o">.</span><span class="n">x</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># Applies a pauli-x (NOT) gate to the second qubit.</span>
- </pre></div>
- </div>
- <p><code class="docutils literal notranslate"><span class="pre">h</span></code> and <code class="docutils literal notranslate"><span class="pre">x</span></code> can be replaced with any of the following:</p>
- <ul class="simple">
- <li>The Hadamard gate: <strong>h</strong> - <code class="docutils literal notranslate"><span class="pre">state.h(0)</span></code></li>
- <li>The S gate: <strong>s</strong> - <code class="docutils literal notranslate"><span class="pre">state.s(0)</span></code></li>
- <li>The T gate: <strong>t</strong> - <code class="docutils literal notranslate"><span class="pre">state.t(0)</span></code></li>
- <li>The Pauli-X / NOT gate: <strong>x</strong> - <code class="docutils literal notranslate"><span class="pre">state.x(0)</span></code></li>
- <li>The Pauli-Y gate: <strong>y</strong> - <code class="docutils literal notranslate"><span class="pre">state.y(0)</span></code></li>
- <li>The Pauli-Z gate: <strong>z</strong> - <code class="docutils literal notranslate"><span class="pre">state.z(0)</span></code></li>
- <li>The CNOT gate: <strong>cx</strong> -
- <code class="docutils literal notranslate"><span class="pre">state.cx(0,</span> <span class="pre">1)</span> <span class="pre">#</span> <span class="pre">CNOT</span> <span class="pre">with</span> <span class="pre">control</span> <span class="pre">=</span> <span class="pre">0,</span> <span class="pre">target</span> <span class="pre">=</span> <span class="pre">1</span></code></li>
- <li>The SWAP gate: <strong>swap</strong> -
- <code class="docutils literal notranslate"><span class="pre">state.swap(0,1)</span> <span class="pre">#</span> <span class="pre">Swaps</span> <span class="pre">the</span> <span class="pre">0th</span> <span class="pre">and</span> <span class="pre">1st</span> <span class="pre">qubit</span></code></li>
- <li>The Toffoli gate: <strong>toffoli</strong> -
- <code class="docutils literal notranslate"><span class="pre">state.toffoli(0,</span> <span class="pre">1,</span> <span class="pre">2)</span> <span class="pre">#</span> <span class="pre">Toffoli</span> <span class="pre">with</span> <span class="pre">controls</span> <span class="pre">=</span> <span class="pre">(0,</span> <span class="pre">1),</span> <span class="pre">target</span> <span class="pre">=</span> <span class="pre">2</span></code></li>
- </ul>
- <p>These are all shorthand methods for the application of arbitrary gates.
- For example, the application of a Hadamard gate above is shorthand for</p>
- <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
- <span class="n">h</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">gate</span><span class="o">.</span><span class="n">h</span><span class="p">()</span>
- <span class="n">register</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">State</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
- <span class="n">register</span><span class="o">.</span><span class="n">apply_gate</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>You can also use any of the gates as controlled gates. For example, the
- application of the CNOT gate above is shorthand for</p>
- <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
- <span class="n">x</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">gate</span><span class="o">.</span><span class="n">x</span><span class="p">()</span>
- <span class="n">register</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">State</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
- <span class="n">register</span><span class="o">.</span><span class="n">apply_controlled_gate</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- <div class="section" id="applying-a-gate-to-a-whole-register">
- <h2>Applying A Gate To A Whole Register<a class="headerlink" href="#applying-a-gate-to-a-whole-register" title="Permalink to this headline">¶</a></h2>
- <p>There is a convenience method to apply a gate to every qubit in the register.
- The following applies a Hadamard gate to the whole register,</p>
- <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
- <span class="n">h</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">gate</span><span class="o">.</span><span class="n">h</span><span class="p">()</span>
- <span class="n">register</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">State</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
- <span class="n">register</span><span class="o">.</span><span class="n">apply_all</span><span class="p">(</span><span class="n">h</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- <div class="section" id="user-defined-gates">
- <h2>User Defined Gates<a class="headerlink" href="#user-defined-gates" title="Permalink to this headline">¶</a></h2>
- <p>Gates in QCGPU are represented by the <code class="docutils literal notranslate"><span class="pre">qcgpu.Gate</span></code> class.</p>
- <p>The only gates that can be defined by the user are single qubit gates.</p>
- <p>The process of creating a gate is</p>
- <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
- <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
- <span class="n">gate_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span>
- <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
- <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="mi">1</span><span class="n">j</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="mi">4</span><span class="p">)]</span>
- <span class="p">])</span>
- <span class="n">gate</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">Gate</span><span class="p">(</span><span class="n">gate_matrix</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>The input to the <code class="docutils literal notranslate"><span class="pre">Gate</span></code> constructor is checked to be a 2x2 unitary
- matrix.</p>
- <p>This newly created gate can then be applied the long hand way,</p>
- <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
- <span class="n">register</span> <span class="o">=</span> <span class="n">qcgpu</span><span class="o">.</span><span class="n">State</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
- <span class="n">register</span><span class="o">.</span><span class="n">apply_gate</span><span class="p">(</span><span class="n">gate</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="page-nav">
- <div class="inner">
- <span class="prev">
- <a href="registers.html"
- title="previous chapter">← Quantum Registers</a>
- </span>
- <span class="next">
- <a href="operations.html"
- title="next chapter">Quantum Operations →</a>
- </span>
- <script type="text/x-mathjax-config">
- MathJax.Hub.Config({
- tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']], displayMath: [['$$', '$$'], ['\\[', '\\]']]}
- });
- </script>
- <script type="text/javascript"
- src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
- </script>
- </div>
- </div>
- </page>
- </div></body>
- </html>
|