<!-- HTML header for doxygen 1.8.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- For Mobile Devices -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<title>QuEST: Decoherence</title>
<!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="style.css" rel="stylesheet" type="text/css"/>
<link href='https://fonts.googleapis.com/css?family=Roboto+Slab' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="jquery.smartmenus.bootstrap.css" rel="stylesheet">
<script type="text/javascript" src="jquery.smartmenus.js"></script>
<!-- SmartMenus jQuery Bootstrap Addon -->
<script type="text/javascript" src="jquery.smartmenus.bootstrap.js"></script>
<!-- SmartMenus jQuery plugin -->
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand"><img alt="Logo" src="logo.png"/></a>
<a class="navbar-brand"><b>QuEST</b> v3.1.0<br>The Quantum Exact Simulation Toolkit</a>
</div>
</div>
</nav>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div class="content" id="content">
<div class="container">
<div class="row">
<div class="col-sm-12 panel " style="padding-bottom: 15px;">
<div style="margin-bottom: 15px;">
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Decoherence</div> </div>
</div><!--header-->
<div class="contents">
<p>Decoherence channels which act on density matrices to induce mixing.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga3e39405eb2ce05ce4bb88c0f00dace45"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#ga3e39405eb2ce05ce4bb88c0f00dace45">mixDamping</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> prob)</td></tr>
<tr class="memdesc:ga3e39405eb2ce05ce4bb88c0f00dace45"><td class="mdescLeft"> </td><td class="mdescRight">Mixes a density matrix <code>qureg</code> to induce single-qubit amplitude damping (decay to 0 state). <a href="group__decoherence.html#ga3e39405eb2ce05ce4bb88c0f00dace45">More...</a><br /></td></tr>
<tr class="separator:ga3e39405eb2ce05ce4bb88c0f00dace45"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga97d563fa8f4bc51f720bbb653f5480b3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#ga97d563fa8f4bc51f720bbb653f5480b3">mixDensityMatrix</a> (<a class="el" href="structQureg.html">Qureg</a> combineQureg, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> prob, <a class="el" href="structQureg.html">Qureg</a> otherQureg)</td></tr>
<tr class="memdesc:ga97d563fa8f4bc51f720bbb653f5480b3"><td class="mdescLeft"> </td><td class="mdescRight">Modifies combineQureg to become (1-prob)combineProb + prob otherQureg. <a href="group__decoherence.html#ga97d563fa8f4bc51f720bbb653f5480b3">More...</a><br /></td></tr>
<tr class="separator:ga97d563fa8f4bc51f720bbb653f5480b3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga91edd6320f517810a58afd4b845edf12"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#ga91edd6320f517810a58afd4b845edf12">mixDephasing</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> prob)</td></tr>
<tr class="memdesc:ga91edd6320f517810a58afd4b845edf12"><td class="mdescLeft"> </td><td class="mdescRight">Mixes a density matrix <code>qureg</code> to induce single-qubit dephasing noise. <a href="group__decoherence.html#ga91edd6320f517810a58afd4b845edf12">More...</a><br /></td></tr>
<tr class="separator:ga91edd6320f517810a58afd4b845edf12"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga556fe013915bca4626367d98db948f5e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#ga556fe013915bca4626367d98db948f5e">mixDepolarising</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> prob)</td></tr>
<tr class="memdesc:ga556fe013915bca4626367d98db948f5e"><td class="mdescLeft"> </td><td class="mdescRight">Mixes a density matrix <code>qureg</code> to induce single-qubit homogeneous depolarising noise. <a href="group__decoherence.html#ga556fe013915bca4626367d98db948f5e">More...</a><br /></td></tr>
<tr class="separator:ga556fe013915bca4626367d98db948f5e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gacb7faa9d8afb0f4270c866424fffbccd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#gacb7faa9d8afb0f4270c866424fffbccd">mixKrausMap</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int target, <a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> *ops, int numOps)</td></tr>
<tr class="memdesc:gacb7faa9d8afb0f4270c866424fffbccd"><td class="mdescLeft"> </td><td class="mdescRight">Apply a general single-qubit Kraus map to a density matrix, as specified by at most four Kraus operators, <img class="formulaInl" alt="$K_i$" src="form_154.png"/> (<code>ops</code>). <a href="group__decoherence.html#gacb7faa9d8afb0f4270c866424fffbccd">More...</a><br /></td></tr>
<tr class="separator:gacb7faa9d8afb0f4270c866424fffbccd"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga65b4c0944090fae78a37ba3b94811ace"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#ga65b4c0944090fae78a37ba3b94811ace">mixMultiQubitKrausMap</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *targets, int numTargets, <a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> *ops, int numOps)</td></tr>
<tr class="memdesc:ga65b4c0944090fae78a37ba3b94811ace"><td class="mdescLeft"> </td><td class="mdescRight">Apply a general N-qubit Kraus map to a density matrix, as specified by at most (2N)^2 Kraus operators. <a href="group__decoherence.html#ga65b4c0944090fae78a37ba3b94811ace">More...</a><br /></td></tr>
<tr class="separator:ga65b4c0944090fae78a37ba3b94811ace"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga9a77f84e1aa7d25d036b14d7d0cd8b61"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#ga9a77f84e1aa7d25d036b14d7d0cd8b61">mixPauli</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> probX, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> probY, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> probZ)</td></tr>
<tr class="memdesc:ga9a77f84e1aa7d25d036b14d7d0cd8b61"><td class="mdescLeft"> </td><td class="mdescRight">Mixes a density matrix <code>qureg</code> to induce general single-qubit Pauli noise. <a href="group__decoherence.html#ga9a77f84e1aa7d25d036b14d7d0cd8b61">More...</a><br /></td></tr>
<tr class="separator:ga9a77f84e1aa7d25d036b14d7d0cd8b61"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga14282bdb1dc65760ca9ecbe6305eb770"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#ga14282bdb1dc65760ca9ecbe6305eb770">mixTwoQubitDephasing</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int qubit1, int qubit2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> prob)</td></tr>
<tr class="memdesc:ga14282bdb1dc65760ca9ecbe6305eb770"><td class="mdescLeft"> </td><td class="mdescRight">Mixes a density matrix <code>qureg</code> to induce two-qubit dephasing noise. <a href="group__decoherence.html#ga14282bdb1dc65760ca9ecbe6305eb770">More...</a><br /></td></tr>
<tr class="separator:ga14282bdb1dc65760ca9ecbe6305eb770"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gacfc45a8fc86ee18f60866bbd0c874ed0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#gacfc45a8fc86ee18f60866bbd0c874ed0">mixTwoQubitDepolarising</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int qubit1, int qubit2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> prob)</td></tr>
<tr class="memdesc:gacfc45a8fc86ee18f60866bbd0c874ed0"><td class="mdescLeft"> </td><td class="mdescRight">Mixes a density matrix <code>qureg</code> to induce two-qubit homogeneous depolarising noise. <a href="group__decoherence.html#gacfc45a8fc86ee18f60866bbd0c874ed0">More...</a><br /></td></tr>
<tr class="separator:gacfc45a8fc86ee18f60866bbd0c874ed0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga2cf7dece0efea4207349f872cdcb7e81"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__decoherence.html#ga2cf7dece0efea4207349f872cdcb7e81">mixTwoQubitKrausMap</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int target1, int target2, <a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> *ops, int numOps)</td></tr>
<tr class="memdesc:ga2cf7dece0efea4207349f872cdcb7e81"><td class="mdescLeft"> </td><td class="mdescRight">Apply a general two-qubit Kraus map to a density matrix, as specified by at most sixteen Kraus operators. <a href="group__decoherence.html#ga2cf7dece0efea4207349f872cdcb7e81">More...</a><br /></td></tr>
<tr class="separator:ga2cf7dece0efea4207349f872cdcb7e81"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Decoherence channels which act on density matrices to induce mixing. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga3e39405eb2ce05ce4bb88c0f00dace45"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3e39405eb2ce05ce4bb88c0f00dace45">◆ </a></span>mixDamping()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixDamping </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>prob</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Mixes a density matrix <code>qureg</code> to induce single-qubit amplitude damping (decay to 0 state). </p>
<p>With probability <code>prob</code>, applies damping (transition from 1 to 0 state).</p>
<p>This transforms <code>qureg</code> = <img class="formulaInl" alt="$\rho$" src="form_93.png"/> into the mixed state </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ K_0 \rho K_0^\dagger + K_1 \rho K_1^\dagger \]" src="form_99.png"/>
</p>
<p> where q = <code>targetQubit</code> and <img class="formulaInl" alt="$K_0$" src="form_100.png"/> and <img class="formulaInl" alt="$K_1$" src="form_101.png"/> are Kraus operators </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ K_0 = \begin{pmatrix} 1 & 0 \\ 0 & \sqrt{1-\text{prob}} \end{pmatrix}, \;\; K_1 = \begin{pmatrix} 0 & \sqrt{\text{prob}} \\ 0 & 0 \end{pmatrix}. \]" src="form_102.png"/>
</p>
<p> <code>prob</code> cannot exceed 1, at which total damping/decay occurs. Note that unlike <a class="el" href="group__decoherence.html#ga91edd6320f517810a58afd4b845edf12" title="Mixes a density matrix qureg to induce single-qubit dephasing noise.">mixDephasing()</a> and <a class="el" href="group__decoherence.html#ga556fe013915bca4626367d98db948f5e" title="Mixes a density matrix qureg to induce single-qubit homogeneous depolarising noise.">mixDepolarising()</a>, this function can increase the purity of a mixed state (by, as <code>prob</code> becomes 1, gaining certainty that the qubit is in the 0 state).</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>a density matrix </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">targetQubit</td><td>qubit upon which to induce amplitude damping </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">prob</td><td>the probability of the damping </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if <code>targetQubit</code> is outside [0, <code>qureg.numQubitsRepresented</code>), or if <code>prob</code> is not in [0, 1] </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Nicolas Vogt of HQS (local CPU) </dd>
<dd>
Ania Brown (GPU, patched local CPU) </dd>
<dd>
Tyson Jones (distributed, doc) </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00935">935</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  {</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <a class="code" href="QuEST__validation_8c.html#ac31c45c5a31c523be0eb26abba6cf598">validateTarget</a>(qureg, targetQubit, __func__);</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <a class="code" href="QuEST__validation_8c.html#a260639d187d09cbeef3ff36f0d4d1f0e">validateOneQubitDampingProb</a>(prob, __func__);</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  </div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <a class="code" href="QuEST__internal_8h.html#a72b26b971531dbdc64de20501f368545">densmatr_mixDamping</a>(qureg, targetQubit, prob);</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00727">densmatr_mixDamping()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00477">validateOneQubitDampingProb()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00307">validateTarget()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00023">TEST_CASE()</a>.</p>
</div>
</div>
<a id="ga97d563fa8f4bc51f720bbb653f5480b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga97d563fa8f4bc51f720bbb653f5480b3">◆ </a></span>mixDensityMatrix()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixDensityMatrix </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>combineQureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>prob</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>otherQureg</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Modifies combineQureg to become (1-prob)combineProb + prob otherQureg. </p>
<p>Both registers must be equal-dimension density matrices, and prob must be in [0, 1].</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">combineQureg</td><td>a density matrix to be modified </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">prob</td><td>the probability of <code>otherQureg</code> in the modified <code>combineQureg</code> </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">otherQureg</td><td>a density matrix to be mixed into <code>combineQureg</code> </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if either <code>combineQureg</code> or <code>otherQureg</code> are not density matrices, or if the dimensions of <code>combineQureg</code> and <code>otherQureg</code> do not match, or if <code>prob</code> is not in [0, 1] </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Tyson Jones </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00770">770</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  {</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(combineQureg, __func__);</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(otherQureg, __func__);</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <a class="code" href="QuEST__validation_8c.html#a87d22240ccfd81827a2a34b8d569d347">validateMatchingQuregDims</a>(combineQureg, otherQureg, __func__);</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <a class="code" href="QuEST__validation_8c.html#ae06b0f6b669c03241d0db3b9dc560da1">validateProb</a>(otherProb, __func__);</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  </div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <a class="code" href="QuEST__internal_8h.html#a8adaba9dbdad6f7ab41ae4b8db0abefe">densmatr_mixDensityMatrix</a>(combineQureg, otherProb, otherQureg);</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu_8c_source.html#l00889">densmatr_mixDensityMatrix()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00434">validateMatchingQuregDims()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00450">validateProb()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00073">TEST_CASE()</a>.</p>
</div>
</div>
<a id="ga91edd6320f517810a58afd4b845edf12"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga91edd6320f517810a58afd4b845edf12">◆ </a></span>mixDephasing()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixDephasing </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>prob</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Mixes a density matrix <code>qureg</code> to induce single-qubit dephasing noise. </p>
<p>With probability <code>prob</code>, applies Pauli Z to <code>targetQubit</code>.</p>
<p>This transforms <code>qureg</code> = <img class="formulaInl" alt="$\rho$" src="form_93.png"/> into the mixed state </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ (1 - \text{prob}) \, \rho + \text{prob} \; Z_q \, \rho \, Z_q \]" src="form_94.png"/>
</p>
<p> where q = <code>targetQubit</code>. <code>prob</code> cannot exceed 1/2, which maximally mixes <code>targetQubit</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>a density matrix </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">targetQubit</td><td>qubit upon which to induce dephasing noise </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">prob</td><td>the probability of the phase error occuring </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if <code>targetQubit</code> is outside [0, <code>qureg.numQubitsRepresented</code>), or if <code>prob</code> is not in [0, 1/2] </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Tyson Jones (GPU, doc) </dd>
<dd>
Ania Brown (CPU, distributed) </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00902">902</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  {</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <a class="code" href="QuEST__validation_8c.html#ac31c45c5a31c523be0eb26abba6cf598">validateTarget</a>(qureg, targetQubit, __func__);</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <a class="code" href="QuEST__validation_8c.html#aef4d89ae4b8a8b4f414ebd03ef4c6acf">validateOneQubitDephaseProb</a>(prob, __func__);</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  </div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <a class="code" href="QuEST__internal_8h.html#a515b6a920b1715d4eae25dcf29f39b95">densmatr_mixDephasing</a>(qureg, targetQubit, 2*prob);</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <a class="code" href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a>(qureg, </div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="stringliteral">"Here, a phase (Z) error occured on qubit %d with probability %g"</span>, targetQubit, prob);</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu_8c_source.html#l00079">densmatr_mixDephasing()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00120">qasm_recordComment()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00462">validateOneQubitDephaseProb()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00307">validateTarget()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00134">TEST_CASE()</a>.</p>
</div>
</div>
<a id="ga556fe013915bca4626367d98db948f5e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga556fe013915bca4626367d98db948f5e">◆ </a></span>mixDepolarising()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixDepolarising </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>prob</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Mixes a density matrix <code>qureg</code> to induce single-qubit homogeneous depolarising noise. </p>
<p>This is equivalent to, with probability <code>prob</code>, uniformly randomly applying either Pauli X, Y, or Z to <code>targetQubit</code>.</p>
<p>This transforms <code>qureg</code> = <img class="formulaInl" alt="$\rho$" src="form_93.png"/> into the mixed state </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ (1 - \text{prob}) \, \rho + \frac{\text{prob}}{3} \; \left( X_q \, \rho \, X_q + Y_q \, \rho \, Y_q + Z_q \, \rho \, Z_q \right) \]" src="form_96.png"/>
</p>
<p> where q = <code>targetQubit</code>. <code>prob</code> cannot exceed 3/4, at which maximal mixing occurs. The produced state is equivalently expressed as </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ \left( 1 - \frac{4}{3} \text{prob} \right) \rho + \left( \frac{4}{3} \text{prob} \right) \frac{\vec{\bf{1}}}{2} \]" src="form_97.png"/>
</p>
<p> where <img class="formulaInl" alt="$ \frac{\vec{\bf{1}}}{2} $" src="form_98.png"/> is the maximally mixed state of the target qubit.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>a density matrix </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">targetQubit</td><td>qubit upon which to induce depolarising noise </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">prob</td><td>the probability of the depolarising error occuring </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if <code>targetQubit</code> is outside [0, <code>qureg.numQubitsRepresented</code>), or if <code>prob</code> is not in [0, 3/4] </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Tyson Jones (GPU, doc) </dd>
<dd>
Ania Brown (CPU, distributed) </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00924">924</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  {</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <a class="code" href="QuEST__validation_8c.html#ac31c45c5a31c523be0eb26abba6cf598">validateTarget</a>(qureg, targetQubit, __func__);</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <a class="code" href="QuEST__validation_8c.html#a269b2f7ee5c4376ae633cd2b77a7be38">validateOneQubitDepolProb</a>(prob, __func__);</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  </div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <a class="code" href="QuEST__internal_8h.html#a3765e92c79d4c2a0df6761a0e7da2676">densmatr_mixDepolarising</a>(qureg, targetQubit, (4*prob)/3.0);</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <a class="code" href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a>(qureg,</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="stringliteral">"Here, a homogeneous depolarising error (X, Y, or Z) occured on "</span></div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="stringliteral">"qubit %d with total probability %g"</span>, targetQubit, prob);</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00700">densmatr_mixDepolarising()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00120">qasm_recordComment()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00472">validateOneQubitDepolProb()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00307">validateTarget()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00180">TEST_CASE()</a>.</p>
</div>
</div>
<a id="gacb7faa9d8afb0f4270c866424fffbccd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacb7faa9d8afb0f4270c866424fffbccd">◆ </a></span>mixKrausMap()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixKrausMap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> * </td>
<td class="paramname"><em>ops</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOps</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Apply a general single-qubit Kraus map to a density matrix, as specified by at most four Kraus operators, <img class="formulaInl" alt="$K_i$" src="form_154.png"/> (<code>ops</code>). </p>
<p>A Kraus map is also referred to as a "operator-sum representation" of a quantum channel, and enables the simulation of general single-qubit noise process, by effecting </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ \rho \to \sum\limits_i^{\text{numOps}} K_i \rho K_i^\dagger \]" src="form_155.png"/>
</p>
<p>The Kraus map must be completely positive and trace preserving, which constrains each <img class="formulaInl" alt="$ K_i $" src="form_156.png"/> in <code>ops</code> by </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ \sum \limits_i^{\text{numOps}} K_i^\dagger K_i = I \]" src="form_157.png"/>
</p>
<p> where <img class="formulaInl" alt="$ I $" src="form_158.png"/> is the identity matrix.</p>
<p>Note that in distributed mode, this routine requires that each node contains at least 4 amplitudes. This means an q-qubit register can be distributed by at most 2^(q-2) numTargs nodes.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>the density matrix to which to apply the map </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">target</td><td>the target qubit of the map </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">ops</td><td>an array of at most 4 Kraus operators </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">numOps</td><td>the number of operators in <code>ops</code> which must be >0 and <= 4. </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if <code>target</code> is outside of [0, <code>qureg.numQubitsRepresented</code>), or if <code>numOps</code> is outside [1, 4], or if <code>ops</code> do not create a completely positive, trace preserving map, or if a node cannot fit 4 amplitudes in distributed mode. </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Balint Koczor </dd>
<dd>
Tyson Jones (refactored, doc) </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00966">966</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  {</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <a class="code" href="QuEST__validation_8c.html#ac31c45c5a31c523be0eb26abba6cf598">validateTarget</a>(qureg, target, __func__);</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <a class="code" href="QuEST__validation_8c.html#a2d43dbc8bf59a58b0ba9da31a8b7db8b">validateOneQubitKrausMap</a>(qureg, ops, numOps, __func__);</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  </div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <a class="code" href="QuEST__common_8c.html#ab987904f721746d1176aba7ac6b566fa">densmatr_mixKrausMap</a>(qureg, target, ops, numOps);</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <a class="code" href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a>(qureg, </div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="stringliteral">"Here, an undisclosed Kraus map was effected on qubit %d"</span>, target);</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00599">densmatr_mixKrausMap()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00120">qasm_recordComment()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00511">validateOneQubitKrausMap()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00307">validateTarget()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00520">TEST_CASE()</a>.</p>
</div>
</div>
<a id="ga65b4c0944090fae78a37ba3b94811ace"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga65b4c0944090fae78a37ba3b94811ace">◆ </a></span>mixMultiQubitKrausMap()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixMultiQubitKrausMap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>targets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numTargets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> * </td>
<td class="paramname"><em>ops</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOps</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Apply a general N-qubit Kraus map to a density matrix, as specified by at most (2N)^2 Kraus operators. </p>
<p>This allows one to simulate a general noise process.</p>
<p>The Kraus map must be completely positive and trace preserving, which constrains each <img class="formulaInl" alt="$ K_i $" src="form_156.png"/> in <code>ops</code> by </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ \sum \limits_i^{\text{numOps}} K_i^\dagger K_i = I \]" src="form_157.png"/>
</p>
<p> where <img class="formulaInl" alt="$ I $" src="form_158.png"/> is the identity matrix.</p>
<p>The first qubit in <code>targets</code> is treated as the <code>least</code> significant qubit in each op in <code>ops</code>.</p>
<p>Note that in distributed mode, this routine requires that each node contains at least (2N)^2 amplitudes. This means an q-qubit register can be distributed by at most 2^(q-2)/N^2 nodes.</p>
<p>Note too that this routine internally creates a 'superoperator'; a complex matrix of dimensions 2^(2*numTargets) by 2^(2*numTargets). Therefore, invoking this function incurs, for numTargs={1,2,3,4,5, ...}, an additional memory overhead of (at double-precision) {0.25 KiB, 4 KiB, 64 KiB, 1 MiB, 16 MiB, ...} (respectively). At quad precision (usually 10 B per number, but possibly 16 B due to alignment), this costs at most double the amount of memory. For numTargets < 4, this superoperator will be created in the runtime stack. For numTargs >= 4, the superoperator will be allocated in the heap and therefore this routine may suffer an anomalous slowdown.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>the density matrix to which to apply the map </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">targets</td><td>a list of target qubit indices, the first of which is treated as least significant in each op in <code>ops</code> </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">numTargets</td><td>the length of <code>targets</code> </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">ops</td><td>an array of at most (2N)^2 Kraus operators </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">numOps</td><td>the number of operators in <code>ops</code> which must be >0 and <= (2N)^2. </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if any target in <code>targets</code> is outside of [0, <code>qureg.numQubitsRepresented</code>), or if any qubit in <code>targets</code> is repeated, or if <code>numOps</code> is outside [1, (2 <code>numTargets</code>)^2], or if any <a class="el" href="structComplexMatrixN.html" title="Represents a general 2^N by 2^N matrix of complex numbers.">ComplexMatrixN</a> in \ops does not have op.numQubits == <code>numTargets</code>, or if <code>ops</code> do not create a completely positive, trace preserving map, or if a node cannot fit (2N)^2 amplitudes in distributed mode. </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Tyson Jones </dd>
<dd>
Balint Koczor </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00986">986</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  {</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <a class="code" href="QuEST__validation_8c.html#a17409defd561446f561279caa9c443f4">validateMultiTargets</a>(qureg, targets, numTargets, __func__);</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <a class="code" href="QuEST__validation_8c.html#a38738db33da795b9d52bace2d9fbe7ee">validateMultiQubitKrausMap</a>(qureg, numTargets, ops, numOps, __func__);</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  </div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <a class="code" href="QuEST__common_8c.html#a99702f4667c429969d7e7b4ecd45c2f3">densmatr_mixMultiQubitKrausMap</a>(qureg, targets, numTargets, ops, numOps);</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <a class="code" href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a>(qureg,</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="stringliteral">"Here, an undisclosed %d-qubit Kraus map was applied to undisclosed qubits"</span>, numTargets);</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00642">densmatr_mixMultiQubitKrausMap()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00120">qasm_recordComment()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00535">validateMultiQubitKrausMap()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00335">validateMultiTargets()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00229">TEST_CASE()</a>.</p>
</div>
</div>
<a id="ga9a77f84e1aa7d25d036b14d7d0cd8b61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9a77f84e1aa7d25d036b14d7d0cd8b61">◆ </a></span>mixPauli()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixPauli </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>probX</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>probY</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>probZ</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Mixes a density matrix <code>qureg</code> to induce general single-qubit Pauli noise. </p>
<p>With probabilities <code>probX</code>, <code>probY</code> and <code>probZ</code>, applies Pauli X, Y, and Z respectively to <code>targetQubit</code>.</p>
<p>This transforms <code>qureg</code> = <img class="formulaInl" alt="$\rho$" src="form_93.png"/> into the mixed state </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ (1 - \text{probX} - \text{probY} - \text{probZ}) \, \rho + \;\;\; (\text{probX})\; X_q \, \rho \, X_q + \;\;\; (\text{probY})\; Y_q \, \rho \, Y_q + \;\;\; (\text{probZ})\; Z_q \, \rho \, Z_q \]" src="form_108.png"/>
</p>
<p> where q = <code>targetQubit</code>. Each of <code>probX</code>, <code>probY</code> and <code>probZ</code> cannot exceed the chance of no error: 1 - <code>probX</code> - <code>probY</code> - <code>probZ</code> </p>
<p>This function operates by first converting the given Pauli probabilities into a single-qubit Kraus map (four 2x2 operators).</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>a density matrix </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">targetQubit</td><td>qubit to decohere </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">probX</td><td>the probability of inducing an X error </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">probX</td><td>the probability of inducing an Y error </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">probX</td><td>the probability of inducing an Z error </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if <code>targetQubit</code> is outside [0, <code>qureg.numQubitsRepresented</code>), or if any of <code>probX</code>, <code>probY</code> or <code>probZ</code> are not in [0, 1], or if any of p in {<code>probX</code>, <code>probY</code> or <code>probZ}</code> don't satisfy p <= (1 - <code>probX</code> - <code>probY</code> - <code>probZ</code>) </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Balint Koczor </dd>
<dd>
Tyson Jones (refactored, doc) </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00955">955</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  {</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <a class="code" href="QuEST__validation_8c.html#ac31c45c5a31c523be0eb26abba6cf598">validateTarget</a>(qureg, qubit, __func__);</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <a class="code" href="QuEST__validation_8c.html#a1b018a5766c1b26c731e8dcaa76abb19">validateOneQubitPauliProbs</a>(probX, probY, probZ, __func__);</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  </div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <a class="code" href="QuEST__common_8c.html#a63bf6575f12d7113fb854a2b6cc1a756">densmatr_mixPauli</a>(qureg, qubit, probX, probY, probZ);</div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <a class="code" href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a>(qureg,</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="stringliteral">"Here, X, Y and Z errors occured on qubit %d with probabilities "</span></div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="stringliteral">"%g, %g and %g respectively"</span>, qubit, probX, probY, probZ);</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00675">densmatr_mixPauli()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00120">qasm_recordComment()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00487">validateOneQubitPauliProbs()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00307">validateTarget()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00442">TEST_CASE()</a>.</p>
</div>
</div>
<a id="ga14282bdb1dc65760ca9ecbe6305eb770"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga14282bdb1dc65760ca9ecbe6305eb770">◆ </a></span>mixTwoQubitDephasing()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixTwoQubitDephasing </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qubit2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>prob</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Mixes a density matrix <code>qureg</code> to induce two-qubit dephasing noise. </p>
<p>With probability <code>prob</code>, applies Pauli Z to either or both qubits.</p>
<p>This transforms <code>qureg</code> = <img class="formulaInl" alt="$\rho$" src="form_93.png"/> into the mixed state </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ (1 - \text{prob}) \, \rho + \frac{\text{prob}}{3} \; \left( Z_a \, \rho \, Z_a + Z_b \, \rho \, Z_b + Z_a Z_b \, \rho \, Z_a Z_b \right) \]" src="form_95.png"/>
</p>
<p> where a = <code>qubit1</code>, b = <code>qubit2</code>. <code>prob</code> cannot exceed 3/4, at which maximal mixing occurs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>a density matrix </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">qubit1</td><td>qubit upon which to induce dephasing noise </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">qubit2</td><td>qubit upon which to induce dephasing noise </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">prob</td><td>the probability of the phase error occuring </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if either <code>qubit1</code> or <code>qubit2</code> is outside [0, <code>qureg.numQubitsRepresented</code>), or if <code>qubit1</code> = <code>qubit2</code>, or if <code>prob</code> is not in [0, 3/4] </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Tyson Jones (GPU, doc) </dd>
<dd>
Ania Brown (CPU, distributed) </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00912">912</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  {</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <a class="code" href="QuEST__validation_8c.html#aed5f85789dc4fa43b64e99e6b538035c">validateUniqueTargets</a>(qureg, qubit1, qubit2, __func__);</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <a class="code" href="QuEST__validation_8c.html#a2f58e35b04edfbc053e0c9ae19f1be97">validateTwoQubitDephaseProb</a>(prob, __func__);</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  </div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <a class="code" href="QuEST__common_8c.html#ac8ea84dd85eca525daeeb30b3c96b673">ensureIndsIncrease</a>(&qubit1, &qubit2);</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <a class="code" href="QuEST__internal_8h.html#a5090b080392ab9be8fcf538161d4e5c1">densmatr_mixTwoQubitDephasing</a>(qureg, qubit1, qubit2, (4*prob)/3.0);</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <a class="code" href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a>(qureg,</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="stringliteral">"Here, a phase (Z) error occured on either or both of qubits "</span></div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="stringliteral">"%d and %d with total probability %g"</span>, qubit1, qubit2, prob);</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu_8c_source.html#l00084">densmatr_mixTwoQubitDephasing()</a>, <a class="el" href="QuEST__common_8c_source.html#l00063">ensureIndsIncrease()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00120">qasm_recordComment()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00467">validateTwoQubitDephaseProb()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00321">validateUniqueTargets()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00594">TEST_CASE()</a>.</p>
</div>
</div>
<a id="gacfc45a8fc86ee18f60866bbd0c874ed0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacfc45a8fc86ee18f60866bbd0c874ed0">◆ </a></span>mixTwoQubitDepolarising()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixTwoQubitDepolarising </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qubit2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>prob</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Mixes a density matrix <code>qureg</code> to induce two-qubit homogeneous depolarising noise. </p>
<p>With probability <code>prob</code>, applies to <code>qubit1</code> and <code>qubit2</code> any operator of the set <img class="formulaInl" alt="$\{ IX, IY, IZ, XI, YI, ZI, XX, XY, XZ, YX, YY, YZ, ZX, ZY, ZZ \}$" src="form_103.png"/>. Note this is the set of all two-qubit Pauli gates excluding <img class="formulaInl" alt="$II$" src="form_104.png"/>.</p>
<p>This transforms <code>qureg</code> = <img class="formulaInl" alt="$\rho$" src="form_93.png"/> into the mixed state </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ (1 - \text{prob}) \, \rho \; + \; \frac{\text{prob}}{15} \; \left( \sum \limits_{\sigma_a \in \{X_a,Y_a,Z_a,I_a\}} \sum \limits_{\sigma_b \in \{X_b,Y_b,Z_b,I_b\}} \sigma_a \sigma_b \; \rho \; \sigma_a \sigma_b \right) - \frac{\text{prob}}{15} I_a I_b \; \rho \; I_a I_b \]" src="form_105.png"/>
</p>
<p> or verbosely </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ (1 - \text{prob}) \, \rho + \frac{\text{prob}}{15} \; \left( \begin{aligned} &X_a \, \rho \, X_a + X_b \, \rho \, X_b + Y_a \, \rho \, Y_a + Y_b \, \rho \, Y_b + Z_a \, \rho \, Z_a + Z_b \, \rho \, Z_b \\ + &X_a X_b \, \rho \, X_a X_b + X_a Y_b \, \rho \, X_a Y_b + X_a Z_b \, \rho \, X_a Z_b + Y_a X_b \, \rho \, Y_a X_b \\ + &Y_a Y_b \, \rho \, Y_a Y_b + Y_a Z_b \, \rho \, Y_a Z_b + Z_a X_b \, \rho \, Z_a X_b + Z_a Y_b \, \rho \, Z_a Y_b + Z_a Z_b \, \rho \, Z_a Z_b \end{aligned} \right) \]" src="form_106.png"/>
</p>
<p> where a = <code>qubit1</code>, b = <code>qubit2</code>.</p>
<p><code>prob</code> cannot exceed 15/16, at which maximal mixing occurs.</p>
<p>The produced state is equivalently expressed as </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ \left( 1 - \frac{16}{15} \text{prob} \right) \rho + \left( \frac{16}{15} \text{prob} \right) \frac{\vec{\bf{1}}}{2} \]" src="form_107.png"/>
</p>
<p> where <img class="formulaInl" alt="$ \frac{\vec{\bf{1}}}{2} $" src="form_98.png"/> is the maximally mixed state of the two target qubits.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>a density matrix </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">qubit1</td><td>qubit upon which to induce depolarising noise </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">qubit2</td><td>qubit upon which to induce depolarising noise </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">prob</td><td>the probability of the depolarising error occuring </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if either <code>qubit1</code> or <code>qubit2</code> is outside [0, <code>qureg.numQubitsRepresented</code>), or if <code>qubit1</code> = <code>qubit2</code>, or if <code>prob</code> is not in [0, 15/16] </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Tyson Jones (GPU, doc) </dd>
<dd>
Ania Brown (CPU, distributed) </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00943">943</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  {</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <a class="code" href="QuEST__validation_8c.html#aed5f85789dc4fa43b64e99e6b538035c">validateUniqueTargets</a>(qureg, qubit1, qubit2, __func__);</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <a class="code" href="QuEST__validation_8c.html#abedaf81fa9ed252b2f8fbd1bd73f8f8e">validateTwoQubitDepolProb</a>(prob, __func__);</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  </div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <a class="code" href="QuEST__common_8c.html#ac8ea84dd85eca525daeeb30b3c96b673">ensureIndsIncrease</a>(&qubit1, &qubit2);</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <a class="code" href="QuEST__internal_8h.html#a43afa97e300b87bce7f3eb1213eb05f6">densmatr_mixTwoQubitDepolarising</a>(qureg, qubit1, qubit2, (16*prob)/15.0);</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <a class="code" href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a>(qureg,</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="stringliteral">"Here, a homogeneous depolarising error occured on qubits %d and %d "</span></div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="stringliteral">"with total probability %g"</span>, qubit1, qubit2, prob);</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00754">densmatr_mixTwoQubitDepolarising()</a>, <a class="el" href="QuEST__common_8c_source.html#l00063">ensureIndsIncrease()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00120">qasm_recordComment()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00482">validateTwoQubitDepolProb()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00321">validateUniqueTargets()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00653">TEST_CASE()</a>.</p>
</div>
</div>
<a id="ga2cf7dece0efea4207349f872cdcb7e81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2cf7dece0efea4207349f872cdcb7e81">◆ </a></span>mixTwoQubitKrausMap()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mixTwoQubitKrausMap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>target1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>target2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> * </td>
<td class="paramname"><em>ops</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOps</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Apply a general two-qubit Kraus map to a density matrix, as specified by at most sixteen Kraus operators. </p>
<p>A Kraus map is also referred to as a "operator-sum representation" of a quantum channel. This allows one to simulate a general two-qubit noise process.</p>
<p>The Kraus map must be completely positive and trace preserving, which constrains each <img class="formulaInl" alt="$ K_i $" src="form_156.png"/> in <code>ops</code> by </p><p class="formulaDsp">
<img class="formulaDsp" alt="\[ \sum \limits_i^{\text{numOps}} K_i^\dagger K_i = I \]" src="form_157.png"/>
</p>
<p> where <img class="formulaInl" alt="$ I $" src="form_158.png"/> is the identity matrix.</p>
<p><code>targetQubit1</code> is treated as the <code>least</code> significant qubit in each op in <code>ops</code>.</p>
<p>Note that in distributed mode, this routine requires that each node contains at least 16 amplitudes. This means an q-qubit register can be distributed by at most 2^(q-4) numTargs nodes.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>the density matrix to which to apply the map </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">target1</td><td>the least significant target qubit in <code>ops</code> </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">target2</td><td>the most significant target qubit in <code>ops</code> </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">ops</td><td>an array of at most 16 Kraus operators </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">numOps</td><td>the number of operators in <code>ops</code> which must be >0 and <= 16. </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">exitWithError</td><td>if <code>qureg</code> is not a density matrix, or if either <code>target1</code> or <code>target2</code> is outside of [0, <code>qureg.numQubitsRepresented</code>), or if <code>target1</code> = <code>target2</code>, or if <code>numOps</code> is outside [1, 16], or if <code>ops</code> do not create a completely positive, trace preserving map, or if a node cannot fit 16 amplitudes in distributed mode. </td></tr>
</table>
</dd>
</dl>
<dl class="section author"><dt>Author</dt><dd>Balint Koczor </dd>
<dd>
Tyson Jones (refactored, doc) </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST_8c_source.html#l00976">976</a> of file <a class="el" href="QuEST_8c_source.html">QuEST.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  {</div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <a class="code" href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a>(qureg, __func__);</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <a class="code" href="QuEST__validation_8c.html#a17409defd561446f561279caa9c443f4">validateMultiTargets</a>(qureg, (<span class="keywordtype">int</span>[]) {target1,target2}, 2, __func__);</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <a class="code" href="QuEST__validation_8c.html#ad0f5b8fe9cf31ef3a565e722966a5511">validateTwoQubitKrausMap</a>(qureg, ops, numOps, __func__);</div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  </div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <a class="code" href="QuEST__common_8c.html#ab004038b5f906ea897621c88bf213129">densmatr_mixTwoQubitKrausMap</a>(qureg, target1, target2, ops, numOps);</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <a class="code" href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a>(qureg, </div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <span class="stringliteral">"Here, an undisclosed two-qubit Kraus map was effected on qubits %d and %d"</span>, target1, target2);</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00634">densmatr_mixTwoQubitKrausMap()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00120">qasm_recordComment()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00422">validateDensityMatrQureg()</a>, <a class="el" href="QuEST__validation_8c_source.html#l00335">validateMultiTargets()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00523">validateTwoQubitKrausMap()</a>.</p>
<p class="reference">Referenced by <a class="el" href="test__decoherence_8cpp_source.html#l00720">TEST_CASE()</a>.</p>
</div>
</div>
</div><!-- contents -->
<div class="ttc" id="aQuEST__validation_8c_html_af22919f5190ca1b3b6b52b8f2fb8213b"><div class="ttname"><a href="QuEST__validation_8c.html#af22919f5190ca1b3b6b52b8f2fb8213b">validateDensityMatrQureg</a></div><div class="ttdeci">void validateDensityMatrQureg(Qureg qureg, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00422">QuEST_validation.c:422</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_ac31c45c5a31c523be0eb26abba6cf598"><div class="ttname"><a href="QuEST__validation_8c.html#ac31c45c5a31c523be0eb26abba6cf598">validateTarget</a></div><div class="ttdeci">void validateTarget(Qureg qureg, int targetQubit, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00307">QuEST_validation.c:307</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_ab987904f721746d1176aba7ac6b566fa"><div class="ttname"><a href="QuEST__common_8c.html#ab987904f721746d1176aba7ac6b566fa">densmatr_mixKrausMap</a></div><div class="ttdeci">void densmatr_mixKrausMap(Qureg qureg, int target, ComplexMatrix2 *ops, int numOps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00599">QuEST_common.c:599</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a515b6a920b1715d4eae25dcf29f39b95"><div class="ttname"><a href="QuEST__internal_8h.html#a515b6a920b1715d4eae25dcf29f39b95">densmatr_mixDephasing</a></div><div class="ttdeci">void densmatr_mixDephasing(Qureg qureg, const int targetQubit, qreal dephase)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00079">QuEST_cpu.c:79</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_ae06b0f6b669c03241d0db3b9dc560da1"><div class="ttname"><a href="QuEST__validation_8c.html#ae06b0f6b669c03241d0db3b9dc560da1">validateProb</a></div><div class="ttdeci">void validateProb(qreal prob, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00450">QuEST_validation.c:450</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a99702f4667c429969d7e7b4ecd45c2f3"><div class="ttname"><a href="QuEST__common_8c.html#a99702f4667c429969d7e7b4ecd45c2f3">densmatr_mixMultiQubitKrausMap</a></div><div class="ttdeci">void densmatr_mixMultiQubitKrausMap(Qureg qureg, int *targets, int numTargets, ComplexMatrixN *ops, int numOps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00642">QuEST_common.c:642</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_a17409defd561446f561279caa9c443f4"><div class="ttname"><a href="QuEST__validation_8c.html#a17409defd561446f561279caa9c443f4">validateMultiTargets</a></div><div class="ttdeci">void validateMultiTargets(Qureg qureg, int *targetQubits, const int numTargetQubits, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00335">QuEST_validation.c:335</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_abedaf81fa9ed252b2f8fbd1bd73f8f8e"><div class="ttname"><a href="QuEST__validation_8c.html#abedaf81fa9ed252b2f8fbd1bd73f8f8e">validateTwoQubitDepolProb</a></div><div class="ttdeci">void validateTwoQubitDepolProb(qreal prob, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00482">QuEST_validation.c:482</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a3765e92c79d4c2a0df6761a0e7da2676"><div class="ttname"><a href="QuEST__internal_8h.html#a3765e92c79d4c2a0df6761a0e7da2676">densmatr_mixDepolarising</a></div><div class="ttdeci">void densmatr_mixDepolarising(Qureg qureg, const int targetQubit, qreal depolLevel)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00700">QuEST_cpu_distributed.c:700</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a8adaba9dbdad6f7ab41ae4b8db0abefe"><div class="ttname"><a href="QuEST__internal_8h.html#a8adaba9dbdad6f7ab41ae4b8db0abefe">densmatr_mixDensityMatrix</a></div><div class="ttdeci">void densmatr_mixDensityMatrix(Qureg combineQureg, qreal otherProb, Qureg otherQureg)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00889">QuEST_cpu.c:889</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_aef4d89ae4b8a8b4f414ebd03ef4c6acf"><div class="ttname"><a href="QuEST__validation_8c.html#aef4d89ae4b8a8b4f414ebd03ef4c6acf">validateOneQubitDephaseProb</a></div><div class="ttdeci">void validateOneQubitDephaseProb(qreal prob, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00462">QuEST_validation.c:462</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_a87d22240ccfd81827a2a34b8d569d347"><div class="ttname"><a href="QuEST__validation_8c.html#a87d22240ccfd81827a2a34b8d569d347">validateMatchingQuregDims</a></div><div class="ttdeci">void validateMatchingQuregDims(Qureg qureg1, Qureg qureg2, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00434">QuEST_validation.c:434</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_ab004038b5f906ea897621c88bf213129"><div class="ttname"><a href="QuEST__common_8c.html#ab004038b5f906ea897621c88bf213129">densmatr_mixTwoQubitKrausMap</a></div><div class="ttdeci">void densmatr_mixTwoQubitKrausMap(Qureg qureg, int target1, int target2, ComplexMatrix4 *ops, int numOps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00634">QuEST_common.c:634</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a5090b080392ab9be8fcf538161d4e5c1"><div class="ttname"><a href="QuEST__internal_8h.html#a5090b080392ab9be8fcf538161d4e5c1">densmatr_mixTwoQubitDephasing</a></div><div class="ttdeci">void densmatr_mixTwoQubitDephasing(Qureg qureg, const int qubit1, const int qubit2, qreal dephase)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00084">QuEST_cpu.c:84</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_a2d43dbc8bf59a58b0ba9da31a8b7db8b"><div class="ttname"><a href="QuEST__validation_8c.html#a2d43dbc8bf59a58b0ba9da31a8b7db8b">validateOneQubitKrausMap</a></div><div class="ttdeci">void validateOneQubitKrausMap(Qureg qureg, ComplexMatrix2 *ops, int numOps, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00511">QuEST_validation.c:511</a></div></div>
<div class="ttc" id="aQuEST__qasm_8c_html_a9a385fde708958617bbeb599064b8dcb"><div class="ttname"><a href="QuEST__qasm_8c.html#a9a385fde708958617bbeb599064b8dcb">qasm_recordComment</a></div><div class="ttdeci">void qasm_recordComment(Qureg qureg, char *comment,...)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__qasm_8c_source.html#l00120">QuEST_qasm.c:120</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a43afa97e300b87bce7f3eb1213eb05f6"><div class="ttname"><a href="QuEST__internal_8h.html#a43afa97e300b87bce7f3eb1213eb05f6">densmatr_mixTwoQubitDepolarising</a></div><div class="ttdeci">void densmatr_mixTwoQubitDepolarising(Qureg qureg, int qubit1, int qubit2, qreal depolLevel)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00754">QuEST_cpu_distributed.c:754</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_a269b2f7ee5c4376ae633cd2b77a7be38"><div class="ttname"><a href="QuEST__validation_8c.html#a269b2f7ee5c4376ae633cd2b77a7be38">validateOneQubitDepolProb</a></div><div class="ttdeci">void validateOneQubitDepolProb(qreal prob, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00472">QuEST_validation.c:472</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_ad0f5b8fe9cf31ef3a565e722966a5511"><div class="ttname"><a href="QuEST__validation_8c.html#ad0f5b8fe9cf31ef3a565e722966a5511">validateTwoQubitKrausMap</a></div><div class="ttdeci">void validateTwoQubitKrausMap(Qureg qureg, ComplexMatrix4 *ops, int numOps, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00523">QuEST_validation.c:523</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a72b26b971531dbdc64de20501f368545"><div class="ttname"><a href="QuEST__internal_8h.html#a72b26b971531dbdc64de20501f368545">densmatr_mixDamping</a></div><div class="ttdeci">void densmatr_mixDamping(Qureg qureg, const int targetQubit, qreal damping)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00727">QuEST_cpu_distributed.c:727</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a63bf6575f12d7113fb854a2b6cc1a756"><div class="ttname"><a href="QuEST__common_8c.html#a63bf6575f12d7113fb854a2b6cc1a756">densmatr_mixPauli</a></div><div class="ttdeci">void densmatr_mixPauli(Qureg qureg, int qubit, qreal probX, qreal probY, qreal probZ)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00675">QuEST_common.c:675</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_a38738db33da795b9d52bace2d9fbe7ee"><div class="ttname"><a href="QuEST__validation_8c.html#a38738db33da795b9d52bace2d9fbe7ee">validateMultiQubitKrausMap</a></div><div class="ttdeci">void validateMultiQubitKrausMap(Qureg qureg, int numTargs, ComplexMatrixN *ops, int numOps, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00535">QuEST_validation.c:535</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_ac8ea84dd85eca525daeeb30b3c96b673"><div class="ttname"><a href="QuEST__common_8c.html#ac8ea84dd85eca525daeeb30b3c96b673">ensureIndsIncrease</a></div><div class="ttdeci">void ensureIndsIncrease(int *ind1, int *ind2)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00063">QuEST_common.c:63</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_a260639d187d09cbeef3ff36f0d4d1f0e"><div class="ttname"><a href="QuEST__validation_8c.html#a260639d187d09cbeef3ff36f0d4d1f0e">validateOneQubitDampingProb</a></div><div class="ttdeci">void validateOneQubitDampingProb(qreal prob, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00477">QuEST_validation.c:477</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_aed5f85789dc4fa43b64e99e6b538035c"><div class="ttname"><a href="QuEST__validation_8c.html#aed5f85789dc4fa43b64e99e6b538035c">validateUniqueTargets</a></div><div class="ttdeci">void validateUniqueTargets(Qureg qureg, int qubit1, int qubit2, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00321">QuEST_validation.c:321</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_a2f58e35b04edfbc053e0c9ae19f1be97"><div class="ttname"><a href="QuEST__validation_8c.html#a2f58e35b04edfbc053e0c9ae19f1be97">validateTwoQubitDephaseProb</a></div><div class="ttdeci">void validateTwoQubitDephaseProb(qreal prob, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00467">QuEST_validation.c:467</a></div></div>
<div class="ttc" id="aQuEST__validation_8c_html_a1b018a5766c1b26c731e8dcaa76abb19"><div class="ttname"><a href="QuEST__validation_8c.html#a1b018a5766c1b26c731e8dcaa76abb19">validateOneQubitPauliProbs</a></div><div class="ttdeci">void validateOneQubitPauliProbs(qreal probX, qreal probY, qreal probZ, const char *caller)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__validation_8c_source.html#l00487">QuEST_validation.c:487</a></div></div>
<!-- HTML footer for doxygen 1.8.8-->
<!-- start footer part -->
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript" src="boot.js"></script>
</html>