From e912506375f7feee84ad13e8082b601c446c32d8 Mon Sep 17 00:00:00 2001 From: Daniel Tsvetkov Date: Wed, 4 Dec 2019 17:26:41 +0100 Subject: [PATCH] some docs --- lib_q_computer.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib_q_computer.py b/lib_q_computer.py index 21e9ac3..0085040 100644 --- a/lib_q_computer.py +++ b/lib_q_computer.py @@ -1,5 +1,6 @@ import numpy as np +# Raw matrixes to be used for initialization of qubits and gates __0 = [[1], [0]] @@ -40,10 +41,21 @@ _CNOT = [ class State(object): + """Represents a quantum state""" def __init__(self, matrix_state): + """ + Can be initialized with a matrix, e.g. for |0> this is [[0],[1]] + :param matrix_state: a matrix representing the quantum state + """ self.matrix_state = np.array(matrix_state) def __getitem__(self, item): + """ + Kind of hacky way to store a substate of an item for use in Gate operations + so that one can use state[0] and the encompassing operator can access this. + :param item: + :return: + """ if item >= len(self): raise IndexError self.item = item @@ -70,9 +82,11 @@ def kron(_list): class Gate(State): def on(self, state): """ - Applies - :param state: another state (e.g. H(q1) or a list of states (e.g. for CNOT([q1, q2])) - :return: + Applies a gate operation on a state. + If applying to a substate, use the index of the substate, e.g. `H.on(bell[0])` will apply the Hadamard gate + on the 0th qubit of the `bell` state. + :param state: another state (e.g. `H.on(q1)` or a list of states (e.g. for `CNOT.on([q1, q2])`) + :return: the state after the application of the Gate """ this_state = self.matrix_state if type(state) == list: @@ -81,7 +95,8 @@ class Gate(State): other_state = state.matrix_state if this_state.shape[1] != other_state.shape[0]: # The two arrays are different sizes - # Use the Kronicker product of Identity with the state.item + # Use the Kronicker product of Identity with the state.item where + # state.item is the substate larger_side = max(this_state.shape[1], this_state.shape[0]) _list = [this_state if i == state.item else _I for i in range(larger_side)] this_state = kron(_list)