kron_with_controls(*factors: Union[numpy.ndarray, complex, float]) → numpy.ndarray¶
Computes the kronecker product of a sequence of values and control tags.Use
cirq.CONTROL_TAGto represent controls. Any entry of the outputcorresponding to a situation where the control is not satisfied willbe overwritten by identity matrix elements.The control logic works by imbuing NaN with the meaning “failed to meet oneor more controls”. The normal kronecker product then spreads the per-itemNaNs to all the entries in the product that need to be replaced by identitymatrix elements. This method rewrites those NaNs. Thus CONTROL_TAG can bethe matrix [[NaN, 0], [0, 1]] or equivalently [[NaN, NaN], [NaN, 1]].Because this method re-interprets NaNs as control-failed elements, it won’tpropagate error-indicating NaNs from its input to its output in the wayyou’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]]
*factors – The matrices, tensors, scalars, and/or control tags to combine together using np.kron.
The resulting matrix.