Skip to content

Commit

Permalink
Fix review nits.
Browse files Browse the repository at this point in the history
  • Loading branch information
95-martin-orion committed Dec 7, 2021
1 parent f85e27a commit 53198f6
Showing 1 changed file with 51 additions and 27 deletions.
78 changes: 51 additions & 27 deletions cirq-core/cirq/devices/noise_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,11 @@ def decay_constant_to_xeb_fidelity(decay_constant: float, num_qubits: int = 2) -
"""Calculates the XEB fidelity from the depolarization decay constant.
Args:
decay_constant: Depolarization decay constant
num_qubits: Number of qubits
decay_constant: Depolarization decay constant.
num_qubits: Number of qubits.
Returns:
Calculated XEB fidelity.
"""
N = 2 ** num_qubits
return 1 - ((1 - decay_constant) * (1 - 1 / N))
Expand All @@ -117,8 +120,11 @@ def decay_constant_to_pauli_error(decay_constant: float, num_qubits: int = 1) ->
"""Calculates pauli error from the depolarization decay constant.
Args:
decay_constant: Depolarization decay constant
num_qubits: Number of qubits
decay_constant: Depolarization decay constant.
num_qubits: Number of qubits.
Returns:
Calculated Pauli error.
"""
N = 2 ** num_qubits
return (1 - decay_constant) * (1 - 1 / N / N)
Expand All @@ -128,8 +134,11 @@ def pauli_error_to_decay_constant(pauli_error: float, num_qubits: int = 1) -> fl
"""Calculates depolarization decay constant from pauli error.
Args:
pauli_error: The pauli error
num_qubits: Number of qubits
pauli_error: The pauli error.
num_qubits: Number of qubits.
Returns:
Calculated depolarization decay constant.
"""
N = 2 ** num_qubits
return 1 - (pauli_error / (1 - 1 / N / N))
Expand All @@ -139,68 +148,83 @@ def xeb_fidelity_to_decay_constant(xeb_fidelity: float, num_qubits: int = 2) ->
"""Calculates the depolarization decay constant from XEB fidelity.
Args:
xeb_fidelity: The XEB fidelity
num_qubits: Number of qubits
xeb_fidelity: The XEB fidelity.
num_qubits: Number of qubits.
Returns:
Calculated depolarization decay constant.
"""
N = 2 ** num_qubits
return 1 - (1 - xeb_fidelity) / (1 - 1 / N)


def pauli_error_from_t1(t: float, t1_ns: float) -> float:
def pauli_error_from_t1(t_ns: float, t1_ns: float) -> float:
"""Calculates the pauli error from T1 decay constant.
This computes error for a specific duration, `t`.
Args:
t: The duration of the gate
t1_ns: The T1 decay constant in ns
t_ns: The duration of the gate in ns.
t1_ns: The T1 decay constant in ns.
Returns:
Calculated Pauli error resulting from T1 decay.
"""
t2 = 2 * t1_ns
return (1 - np.exp(-t / t2)) / 2 + (1 - np.exp(-t / t1_ns)) / 4
return (1 - np.exp(-t_ns / t2)) / 2 + (1 - np.exp(-t_ns / t1_ns)) / 4


def pauli_error_from_depolarization(t: float, t1_ns: float, pauli_error: float = 0) -> float:
def pauli_error_from_depolarization(t_ns: float, t1_ns: float, pauli_error: float = 0) -> float:
"""Calculates the amount of pauli error from depolarization.
This computes non-T1 error for a specific duration, `t`. If pauli error
from T1 decay is more than total pauli error, this returns zero; otherwise,
it returns the portion of pauli error not attributable to T1 error.
Args:
t: The duration of the gate
t1_ns: The T1 decay constant in ns
pauli_error: The pauli error
t_ns: The duration of the gate in ns.
t1_ns: The T1 decay constant in ns.
pauli_error: The total pauli error.
Returns:
Calculated Pauli error resulting from depolarization.
"""
t1_pauli_error = pauli_error_from_t1(t, t1_ns)
t1_pauli_error = pauli_error_from_t1(t_ns, t1_ns)
if pauli_error >= t1_pauli_error:
return pauli_error - t1_pauli_error
else:
warnings.warn("Pauli error from T1 decay is greater than total Pauli error", RuntimeWarning)
return 0

warnings.warn("Pauli error from T1 decay is greater than total Pauli error", RuntimeWarning)
return 0


def average_error(decay_constant: float, num_qubits: int = 1) -> float:
"""Calculates the average error from the depolarization decay constant.
Args:
decay_constant: Depolarization decay constant
num_qubits: Number of qubits
decay_constant: Depolarization decay constant.
num_qubits: Number of qubits.
Returns:
Calculated average error.
"""
N = 2 ** num_qubits
return (1 - decay_constant) * (1 - 1 / N)


def decoherence_pauli_error(T1_ns: float, Tphi_ns: float, gate_time_ns: float) -> float:
def decoherence_pauli_error(t1_ns: float, tphi_ns: float, gate_time_ns: float) -> float:
"""The component of Pauli error caused by decoherence.
Args:
T1_ns: T1 time in nanoseconds.
Tphi_ns: Tphi time in nanoseconds.
t1_ns: T1 time in nanoseconds.
tphi_ns: Tphi time in nanoseconds.
gate_time_ns: Duration in nanoseconds of the gate affected by this error.
Returns:
Calculated Pauli error resulting from decoherence.
"""
Gamma2 = (1 / (2 * T1_ns)) + 1 / Tphi_ns
Gamma2 = (1 / (2 * t1_ns)) + 1 / tphi_ns

exp1 = np.exp(-gate_time_ns / T1_ns)
exp1 = np.exp(-gate_time_ns / t1_ns)
exp2 = np.exp(-gate_time_ns * Gamma2)
px = 0.25 * (1 - exp1)
py = px
Expand Down

0 comments on commit 53198f6

Please sign in to comment.