apply_channel(val: Any, args: cirq.protocols.apply_channel.ApplyChannelArgs, default: TDefault = array(, dtype=float64)) → Union[numpy.ndarray, TDefault]¶
High performance evolution under a channel evolution.If
_apply_channel_method, that method will beused to apply
val’s channel effect to the target tensor. Otherwise, if
_apply_unitary_method, that method will be used toapply
vals channel effect to the target tensor. Otherwise, if
valreturns a non-default channel with
cirq.channel, that channel will beapplied using a generic method. If none of these cases apply, anexception is raised or the specified default value is returned.
- val – The value with a channel to apply to the target.
- args – A mutable cirq.ApplyChannelArgs object describing the target tensor, available workspace, and left and right axes to operate on. The attributes of this object will be mutated as part of computing the result.
- default – What should be returned if val doesn’t have a channel. If not specified, a TypeError is raised instead of returning a default value.
If the receiving object is not able to apply a channel, the specified default value is returned (or a TypeError is raised). If this occurs, then target_tensor should not have been mutated.
If the receiving object was able to work inline, directly mutating target_tensor it will return target_tensor. The caller is responsible for checking if the result is target_tensor.
If the receiving object wrote its output over out_buffer, the result will be out_buffer. The caller is responsible for checking if the result is out_buffer (and e.g. swapping the buffer for the target tensor before the next call).
Note that it is an error for the return object to be either of the auxiliary buffers, and the method will raise an AssertionError if this contract is violated.
The receiving object may also write its output over a new buffer that it created, in which case that new array is returned.
TypeError– val doesn’t have a channel and default wasn’t specified.
AssertionError– if the