From ec012e1e892fcb6ff3e466f27e8dec5029c75388 Mon Sep 17 00:00:00 2001 From: positr0nium Date: Wed, 19 Jun 2024 12:34:14 +0200 Subject: [PATCH] fixed a bug in the treatment of symbolic global phases --- src/qrisp/circuit/operation.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/qrisp/circuit/operation.py b/src/qrisp/circuit/operation.py index 3b74be36..d1e74ab5 100644 --- a/src/qrisp/circuit/operation.py +++ b/src/qrisp/circuit/operation.py @@ -127,7 +127,10 @@ def __init__( if isinstance(par, (float, int, np.floating, np.int32)): pass elif isinstance(par, Expr): - self.abstract_params = self.abstract_params.union(par.free_symbols) + if len(par.free_symbols): + self.abstract_params = self.abstract_params.union(par.free_symbols) + else: + par = float(par) else: raise Exception( f"Tried to create operation with parameters of type {type(par)}" @@ -438,7 +441,7 @@ def c_if(self, num_control=1, ctrl_state=-1): # for more information class U3Gate(Operation): def __init__(self, theta, phi, lam, name="u3", global_phase=0): - self.global_phase = global_phase + # Initialize Operation instance super().__init__( name=name, @@ -449,7 +452,11 @@ def __init__(self, theta, phi, lam, name="u3", global_phase=0): ) if isinstance(global_phase, Expr): - self.abstract_params = self.abstract_params.union(global_phase.free_symbols) + if len(global_phase.free_symbols): + self.abstract_params = self.abstract_params.union(global_phase.free_symbols) + else: + global_phase = float(global_phase) + self.global_phase = global_phase # Set parameters self.theta = self.params[0]