From a0890c8f3032a7c8a03495cd87f12328f5eb44b7 Mon Sep 17 00:00:00 2001 From: Astlaan Date: Sun, 24 Nov 2019 19:55:09 +0100 Subject: [PATCH 1/3] Add support for gate time in circuit_builder.__lt__ Modified the conditions which check len(gate_desc) in order to support gate_desc with 'time' and or 'return_flag' --- qsoverlay/circuit_builder.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/qsoverlay/circuit_builder.py b/qsoverlay/circuit_builder.py index e24320b..cc9a75a 100644 --- a/qsoverlay/circuit_builder.py +++ b/qsoverlay/circuit_builder.py @@ -228,9 +228,19 @@ def __lt__(self, gate_desc): num_qubits = self.gate_dic[gate_name]['num_qubits'] user_kws = self.gate_dic[gate_name]['user_kws'] + time = None if len(gate_desc) == len(user_kws) + num_qubits + 2: + if type(gate_desc[-1]) is bool: + return_flag = gate_desc[-1] + else: + return_flag = False + time = gate_desc[-1] + elif len(gate_desc) == len(user_kws) + num_qubits + 3: + assert gate_desc[-1] == bool + assert gate_desc[-2] == float or gate_desc[-2] == int return_flag = gate_desc[-1] + time = gate_desc[-2] else: assert len(gate_desc) == len(user_kws) + num_qubits + 1 return_flag = False @@ -239,6 +249,8 @@ def __lt__(self, gate_desc): kwargs = {kw: arg for kw, arg in zip(user_kws, gate_desc[num_qubits+1:])} + if time: + kwargs['time'] = time return self.add_gate(gate_name, qubit_list, return_flag=return_flag, **kwargs) From 7234253841a853380e80423b755aeee67b4b5beb Mon Sep 17 00:00:00 2001 From: Astlaan Date: Sun, 24 Nov 2019 20:08:23 +0100 Subject: [PATCH 2/3] Add missing time support to gate_functions.py Added the extra time parameter in the (X_gate, Y_gate, Z_gate, had_from_rot, CNOT_from_CZ, CRX_from_CZ) functions during the 'builder < ' call, so that the these gates are created with the correct time tag. (circuit_builder.__lt__ was modified in the previous commit to allow for this. --- qsoverlay/gate_functions.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/qsoverlay/gate_functions.py b/qsoverlay/gate_functions.py index 1881e85..719adce 100644 --- a/qsoverlay/gate_functions.py +++ b/qsoverlay/gate_functions.py @@ -8,36 +8,36 @@ def X_gate(builder, bit, time): - builder < ('RX', bit, -pi) + builder < ('RX', bit, -pi, time) def Y_gate(builder, bit, time): - builder < ('RY', bit, -pi) + builder < ('RY', bit, -pi, time) def Z_gate(builder, bit, time): - builder < ('RZ', bit, -pi) + builder < ('RZ', bit, -pi, time) def had_from_rot(builder, bit, time): """Creates a Hadamard gate from two rotations.""" - builder < ('RX', bit, -pi) - builder < ('RY', bit, -pi / 2) + builder < ('RX', bit, -pi, time) + builder < ('RY', bit, -pi / 2, time) def CNOT_from_CZ(builder, bit0, bit1, time): """Creates a CNOT gate from a CZ gate""" - builder < ('RY', bit1, -pi / 2) - builder < ('CZ', bit0, bit1) - builder < ('RY', bit1, pi / 2) + builder < ('RY', bit1, -pi / 2, time) + builder < ('CZ', bit0, bit1, time) + builder < ('RY', bit1, pi / 2, time) def CRX_from_CZ(builder, bit0, bit1, angle, time): """Creates a CNOT gate from a CZ gate""" - builder < ('RY', bit1, -pi / 2) - builder < ('RZ', bit0, -angle / 2) - builder < ('CPhase', bit0, bit1, angle) - builder < ('RY', bit1, pi / 2) + builder < ('RY', bit1, -pi / 2, time) + builder < ('RZ', bit0, -angle / 2, time) + builder < ('CPhase', bit0, bit1, angle, time) + builder < ('RY', bit1, pi / 2, time) def insert_CZ(builder, From ff29a52fe9483c5f245eee50707c594999d87436 Mon Sep 17 00:00:00 2001 From: Astlaan Date: Sat, 8 Feb 2020 16:42:54 +0100 Subject: [PATCH 3/3] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 024c497..7758dba 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ +NOTE: +Always specify gate time, ex `b.gate('X', ['1'], time = 10)`, where the `b` is a builder instance, and the time is the middle temporal of the gate's execution. +Plus, always correct the builder class timing at the end: +``` +b.times = {'1': 20} +``` + Installation ------------