|View source on GitHub|
Computes the kronecker product of a sequence of values and control tags.
cirq.linalg.kron_with_controls( *factors ) -> np.ndarray
cirq.CONTROL_TAG to represent controls. Any entry of the output
corresponding to a situation where the control is not satisfied will
be overwritten by identity matrix elements.
The control logic works by imbuing NaN with the meaning "failed to meet one or more controls". The normal kronecker product then spreads the per-item NaNs to all the entries in the product that need to be replaced by identity matrix elements. This method rewrites those NaNs. Thus CONTROL_TAG can be the matrix [[NaN, 0], [0, 1]] or equivalently [[NaN, NaN], [NaN, 1]].
Because this method re-interprets NaNs as control-failed elements, it won't propagate error-indicating NaNs from its input to its output in the way you'd otherwise expect.
result = cirq.kron_with_controls( cirq.CONTROL_TAG, cirq.unitary(cirq.X)) print(result.astype(np.int32)) # prints: # [[1 0 0 0] # [0 1 0 0] # [0 0 0 1] # [0 0 1 0]]
||The matrices, tensors, scalars, and/or control tags to combine together using np.kron.|
|The resulting matrix.|