gates.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <!DOCTYPE html>
  2. <html >
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>Quantum Gates</title>
  7. <link rel="stylesheet" href="_static/pygments.css">
  8. <link rel="stylesheet" href="_static/theme.css">
  9. <script src="_static/theme-vendors.js"></script>
  10. <script src="_static/theme.js" defer></script>
  11. <link rel="index" title="Index" href="genindex.html" />
  12. <link rel="search" title="Search" href="search.html" />
  13. <link rel="next" title="Quantum Operations" href="operations.html" />
  14. <link rel="prev" title="Quantum Registers" href="registers.html" />
  15. </head>
  16. <body><div id="app" class="theme-container" :class="pageClasses"><navbar @toggle-sidebar="toggleSidebar">
  17. <router-link to="index.html" class="home-link">
  18. <span class="site-name">QCGPU</span>
  19. </router-link>
  20. <div class="links">
  21. <navlinks class="can-hide">
  22. <div class="nav-item">
  23. <a href="install.html"
  24. class="nav-link ">
  25. None
  26. </a>
  27. </div>
  28. </navlinks>
  29. </div>
  30. </navbar>
  31. <div class="sidebar-mask" @click="toggleSidebar(false)">
  32. </div>
  33. <sidebar @toggle-sidebar="toggleSidebar">
  34. <navlinks>
  35. <div class="nav-item">
  36. <a href="install.html"
  37. class="nav-link ">
  38. None
  39. </a>
  40. </div>
  41. </navlinks><div class="sidebar-links" role="navigation" aria-label="main navigation">
  42. <div class="sidebar-group">
  43. <ul class="current">
  44. <li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a></li>
  45. <li class="toctree-l1"><a class="reference internal" href="quickstart.html">Getting Started</a></li>
  46. <li class="toctree-l1 current"><a class="reference internal" href="guide.html">User Guide</a><ul class="current">
  47. <li class="toctree-l2"><a class="reference internal" href="registers.html">Quantum Registers</a></li>
  48. <li class="toctree-l2 current"><a class="current reference internal" href="#">Quantum Gates</a></li>
  49. <li class="toctree-l2"><a class="reference internal" href="operations.html">Quantum Operations</a></li>
  50. </ul>
  51. </li>
  52. </ul>
  53. </div>
  54. </div>
  55. </sidebar>
  56. <page>
  57. <div class="content">
  58. <div class="section" id="quantum-gates">
  59. <h1>Quantum Gates<a class="headerlink" href="#quantum-gates" title="Permalink to this headline">¶</a></h1>
  60. <p>In quantum computing, gates are used to manipulate quantum registers and
  61. to implement quantum algorithms.</p>
  62. <div class="section" id="built-in-gates">
  63. <h2>Built-In Gates<a class="headerlink" href="#built-in-gates" title="Permalink to this headline">¶</a></h2>
  64. <p>There are a number of gates built into QCGPU. They can all be applied
  65. the same way:</p>
  66. <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
  67. <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>
  68. <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>
  69. <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>
  70. </pre></div>
  71. </div>
  72. <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>
  73. <ul class="simple">
  74. <li>The Hadamard gate: <strong>h</strong> - <code class="docutils literal notranslate"><span class="pre">state.h(0)</span></code></li>
  75. <li>The S gate: <strong>s</strong> - <code class="docutils literal notranslate"><span class="pre">state.s(0)</span></code></li>
  76. <li>The T gate: <strong>t</strong> - <code class="docutils literal notranslate"><span class="pre">state.t(0)</span></code></li>
  77. <li>The Pauli-X / NOT gate: <strong>x</strong> - <code class="docutils literal notranslate"><span class="pre">state.x(0)</span></code></li>
  78. <li>The Pauli-Y gate: <strong>y</strong> - <code class="docutils literal notranslate"><span class="pre">state.y(0)</span></code></li>
  79. <li>The Pauli-Z gate: <strong>z</strong> - <code class="docutils literal notranslate"><span class="pre">state.z(0)</span></code></li>
  80. <li>The CNOT gate: <strong>cx</strong> -
  81. <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>
  82. <li>The SWAP gate: <strong>swap</strong> -
  83. <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>
  84. <li>The Toffoli gate: <strong>toffoli</strong> -
  85. <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>
  86. </ul>
  87. <p>These are all shorthand methods for the application of arbitrary gates.
  88. For example, the application of a Hadamard gate above is shorthand for</p>
  89. <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
  90. <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>
  91. <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>
  92. <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>
  93. </pre></div>
  94. </div>
  95. <p>You can also use any of the gates as controlled gates. For example, the
  96. application of the CNOT gate above is shorthand for</p>
  97. <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
  98. <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>
  99. <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>
  100. <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>
  101. </pre></div>
  102. </div>
  103. </div>
  104. <div class="section" id="applying-a-gate-to-a-whole-register">
  105. <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>
  106. <p>There is a convenience method to apply a gate to every qubit in the register.
  107. The following applies a Hadamard gate to the whole register,</p>
  108. <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
  109. <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>
  110. <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>
  111. <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>
  112. </pre></div>
  113. </div>
  114. </div>
  115. <div class="section" id="user-defined-gates">
  116. <h2>User Defined Gates<a class="headerlink" href="#user-defined-gates" title="Permalink to this headline">¶</a></h2>
  117. <p>Gates in QCGPU are represented by the <code class="docutils literal notranslate"><span class="pre">qcgpu.Gate</span></code> class.</p>
  118. <p>The only gates that can be defined by the user are single qubit gates.</p>
  119. <p>The process of creating a gate is</p>
  120. <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
  121. <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
  122. <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>
  123. <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
  124. <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>
  125. <span class="p">])</span>
  126. <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>
  127. </pre></div>
  128. </div>
  129. <p>The input to the <code class="docutils literal notranslate"><span class="pre">Gate</span></code> constructor is checked to be a 2x2 unitary
  130. matrix.</p>
  131. <p>This newly created gate can then be applied the long hand way,</p>
  132. <div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">qcgpu</span>
  133. <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>
  134. <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>
  135. </pre></div>
  136. </div>
  137. </div>
  138. </div>
  139. </div>
  140. <div class="page-nav">
  141. <div class="inner">
  142. <span class="prev">
  143. <a href="registers.html"
  144. title="previous chapter">← Quantum Registers</a>
  145. </span>
  146. <span class="next">
  147. <a href="operations.html"
  148. title="next chapter">Quantum Operations →</a>
  149. </span>
  150. <script type="text/x-mathjax-config">
  151. MathJax.Hub.Config({
  152. tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']], displayMath: [['$$', '$$'], ['\\[', '\\]']]}
  153. });
  154. </script>
  155. <script type="text/javascript"
  156. src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
  157. </script>
  158. </div>
  159. </div>
  160. </page>
  161. </div></body>
  162. </html>