View source on GitHub |

An object that may be describable as a quantum channel.

```
cirq.protocols.SupportsKraus(
*args, **kwargs
)
```

## Methods

`_has_kraus_`

```
_has_kraus_() -> bool
```

Whether this value has a Kraus representation.

This method is used by the global `cirq.has_channel`

method. If this
method is not present, or returns NotImplemented, it will fallback
to similarly checking `cirq.has_mixture`

or `cirq.has_unitary`

. If none
of these are present or return NotImplemented, then `cirq.has_channel`

will fall back to checking whether `cirq.channel`

has a non-default
value. Otherwise `cirq.has_channel`

returns False.

Returns | |
---|---|

True if the value has a channel representation, False otherwise. |

`_kraus_`

```
_kraus_() -> Union[Sequence[np.ndarray], NotImplementedType]
```

A list of Kraus matrices describing the quantum channel.

These matrices are the terms in the operator sum representation of a quantum channel. If the returned matrices are ${A_0,A_1,..., A_{r-1} }$, then this describes the channel:

These matrices are required to satisfy the trace preserving condition

where $I$ is the identity matrix. The matrices $A_k$ are sometimes called Kraus or noise operators.

This method is used by the global `cirq.channel`

method. If this method
or the *unitary* method is not present, or returns NotImplement,
it is assumed that the receiving object doesn't have a channel
(resulting in a TypeError or default result when calling `cirq.channel`

on it). (The ability to return NotImplemented is useful when a class
cannot know if it is a channel until runtime.)

The order of cells in the matrices is always implicit with respect to the object being called. For example, for GateOperations these matrices must be ordered with respect to the list of qubits that the channel is applied to. The qubit-to-amplitude order mapping matches the ordering of numpy.kron(A, B), where A is a qubit earlier in the list than the qubit B.

Returns | |
---|---|

A list of matrices describing the channel (Kraus operators), or NotImplemented if there is no such matrix. |