def iplot_state(quantum_state, method='city', figsize=None): """Plot the quantum state. Args: quantum_state (ndarray): statevector or density matrix representation of a quantum state. method (str): Plotting method to use. figsize (tuple): Figure size in pixels. Raises: VisualizationError: if the input is not a statevector or density matrix, or if the state is not an multi-qubit quantum state. """ warnings.warn( "iplot_state is deprecated, and will be removed in \ the 0.9 release. Use the iplot_state_ * functions \ instead.", DeprecationWarning) rho = _validate_input_state(quantum_state) if method == "city": iplot_state_city(rho, figsize=figsize) elif method == "paulivec": iplot_state_paulivec(rho, figsize=figsize) elif method == "qsphere": iplot_state_qsphere(rho, figsize=figsize) elif method == "bloch": iplot_bloch_multivector(rho, figsize=figsize) elif method == "hinton": iplot_state_hinton(rho, figsize=figsize) else: raise VisualizationError('Invalid plot state method.')
def bit_string_index(text): """Return the index of a string of 0s and 1s.""" n = len(text) k = text.count("1") if text.count("0") != n - k: raise VisualizationError("s must be a string of 0 and 1") ones = [pos for pos, char in enumerate(text) if char == "1"] return lex_index(n, k, ones)
def _validate_input_state(quantum_state): """Validates the input to state visualization functions. Args: quantum_state (ndarray): Input state / density matrix. Returns: rho: A 2d numpy array for the density matrix. Raises: VisualizationError: Invalid input. """ rho = np.asarray(quantum_state) if rho.ndim == 1: rho = np.outer(rho, np.conj(rho)) # Check the shape of the input is a square matrix shape = np.shape(rho) if len(shape) != 2 or shape[0] != shape[1]: raise VisualizationError("Input is not a valid quantum state.") # Check state is an n-qubit state num = int(np.log2(rho.shape[0])) if 2 ** num != rho.shape[0]: raise VisualizationError("Input is not a multi-qubit quantum state.") return rho
def lex_index(n, k, lst): """Return the lex index of a combination.. Args: n (int): the total number of options . k (int): The number of elements. lst (list): list Returns: int: returns int index for lex order Raises: VisualizationError: if length of list is not equal to k """ if len(lst) != k: raise VisualizationError("list should have length k") comb = list(map(lambda x: n - 1 - x, lst)) dualm = sum([n_choose_k(comb[k - 1 - i], i + 1) for i in range(k)]) return int(dualm)