PyGSTi contains implementation of common ways to compare quantum processes and models. You may just want to import pygsti
just for this functionality, as many of the functions below act on standard NumPy arrays. Here are some of the most common functions (this tutorial is under construction, and we plan to expand it in future releases. We apologize for it's current brevity.
Let's begin by getting some gate (process) matrices for several simple 1-qubit operations. Note that Gx
, Gy
and Gi
below are superoperator matrices in the Pauli basis - they're $4 \times 4$ real matrices. We do this for a model pack (see the model packs tutorial) and a version of this model with slightly rotated gates.
import pygsti.tools as tls
import pygsti.report.reportables as rptbls
from pygsti.modelpacks import smq1Q_XYI as std
import numpy as np
mdl = std.target_model()
Gx = mdl[('Gxpi2',0)].to_dense()
Gy = mdl[('Gypi2',0)].to_dense()
Gi = mdl[()].to_dense()
mdl_overrot = mdl.rotate( (0.1,0,0) )
Gx_overrot = mdl_overrot[('Gxpi2',0)].to_dense()
Gy_overrot = mdl_overrot[('Gypi2',0)].to_dense()
Gi_overrot = mdl_overrot[()].to_dense()
tls.print_mx(Gx_overrot)
1.0000 0 0 0 0 1.0000 0 0 0 0 -0.0998 -0.9950 0 0 0.9950 -0.0998
rptbls.entanglement_infidelity(Gx, Gx_overrot, 'pp')
0.0024979173609871452
rptbls.avg_gate_infidelity(Gx, Gx_overrot, 'pp')
0.0016652782406580968
rptbls.eigenvalue_entanglement_infidelity(Gx, Gx_overrot, 'pp')
0.0024979173609873673
rptbls.eigenvalue_avg_gate_infidelity(Gx, Gx_overrot, 'pp')
0.001665278240658245
rptbls.half_diamond_norm(Gx, Gx_overrot, 'pp')
0.04997916855345198
rptbls.eigenvalue_diamondnorm(Gx, Gx_overrot, 'pp')
0.07496875390601739
tls.unitarity(Gx_overrot)
0.9999999999999999
rptbls.jtrace_diff(Gx, Gx_overrot, 'pp')
0.04997916927067833
rhoA = tls.ppvec_to_stdmx(mdl['rho0'].to_dense())
rhoB = np.array( [ [0.9, 0],
[ 0, 0.1]], complex)
tls.fidelity(rhoA, rhoB)
0.9