Quantum Channel Properties API

Quantum Channel Properties

graphcalc.quantum.channel_properties.is_completely_positive(channel: QuantumChannel, *, tol: float | None = None) bool[source]

Return whether the channel is completely positive.

Parameters:
  • channel (QuantumChannel) – Input channel.

  • tol (float | None, default=None) – Numerical tolerance used for positive semidefiniteness. If omitted, channel.tol is used.

Notes

By the Choi theorem, a linear map is completely positive if and only if its Choi matrix is positive semidefinite.

graphcalc.quantum.channel_properties.is_quantum_channel(channel: QuantumChannel, *, tol: float | None = None) bool[source]

Return whether the input defines a completely positive trace-preserving map.

Parameters:
  • channel (QuantumChannel) – Input channel.

  • tol (float | None, default=None) – Numerical tolerance used in the underlying tests.

Notes

In this module, “quantum channel” means a completely positive, trace-preserving linear map.

graphcalc.quantum.channel_properties.is_trace_preserving(channel: QuantumChannel, *, tol: float | None = None) bool[source]

Return whether the channel is trace preserving.

Parameters:
  • channel (QuantumChannel) – Input channel.

  • tol (float | None, default=None) – Numerical tolerance for matrix comparison. If omitted, channel.tol is used.

Notes

For the Choi convention used in QuantumChannel, trace preservation is equivalent to the partial trace over the output subsystem equaling the identity on the input space.

graphcalc.quantum.channel_properties.is_unital(channel: QuantumChannel, *, tol: float | None = None) bool[source]

Return whether the channel is unital.

Parameters:
  • channel (QuantumChannel) – Input channel.

  • tol (float | None, default=None) – Numerical tolerance for matrix comparison. If omitted, channel.tol is used.

Notes

A channel is unital if it preserves the identity operator. For the Choi convention used in QuantumChannel, this is equivalent to the partial trace over the input subsystem equaling the identity on the output space.

graphcalc.quantum.channel_properties.is_unitary_channel(channel: QuantumChannel, *, tol: float | None = None) bool[source]

Return whether the channel is a unitary channel.

Parameters:
  • channel (QuantumChannel) – Input channel.

  • tol (float | None, default=None) – Numerical tolerance used in rank and matrix comparisons. If omitted, channel.tol is used.

Notes

A channel is a unitary channel if it has the form

Phi(rho) = U rho U^dagger

for some unitary matrix U.

For finite-dimensional channels, this is equivalent to the existence of a Kraus representation with a single Kraus operator that is unitary. With the Choi representation, a necessary condition is that the Choi matrix has rank one. For a CPTP square channel, rank one is sufficient to recover a single Kraus operator, which is then tested for unitarity.