Skip to content

Commit

Permalink
V4 Setters for the Gate class (#1535)
Browse files Browse the repository at this point in the history
* add and test setters

* use simple enum syntax
  • Loading branch information
MarquessV committed Mar 9, 2023
1 parent 9c7de67 commit 0488e08
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
11 changes: 6 additions & 5 deletions pyquil/quilatom.py
Original file line number Diff line number Diff line change
Expand Up @@ -576,15 +576,16 @@ def __init__(self, op1: ExpressionDesignator, op2: ExpressionDesignator):
def _from_rs_infix_expression(cls, infix_expression: quil_rs.InfixExpression):
left = _convert_to_py_parameter(infix_expression.left)
right = _convert_to_py_parameter(infix_expression.right)
if infix_expression.operator.is_plus():
print(infix_expression.operator)
if infix_expression.operator == quil_rs.InfixOperator.Plus:
return Add(left, right)
if infix_expression.operator.is_minus():
if infix_expression.operator == quil_rs.InfixOperator.Minus:
return Sub(left, right)
if infix_expression.operator.is_slash():
if infix_expression.operator == quil_rs.InfixOperator.Slash:
return Div(left, right)
if infix_expression.operator.is_star():
if infix_expression.operator == quil_rs.InfixOperator.Star:
return Mul(left, right)
if infix_expression.operator.is_caret():
if infix_expression.operator == quil_rs.InfixOperator.Caret:
return Pow(left, right)
raise ValueError(f"{type(infix_expression)} is not a valid InfixExpression")

Expand Down
8 changes: 8 additions & 0 deletions pyquil/quilbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,18 @@ def get_qubits(self, indices: bool = True) -> Set[QubitDesignator]:
def qubits(self):
return list(self.get_qubits(indices=False))

@qubits.setter
def qubits(self, qubits: Iterable[Union[Qubit, QubitPlaceholder, FormalArgument]]):
quil_rs.Gate.qubits.__set__(self, _convert_to_rs_qubits(qubits))

@property
def params(self):
return _convert_to_py_parameters(super().parameters)

@params.setter
def params(self, params: Iterable[ParameterDesignator]):
quil_rs.Gate.parameters.__set__(self, _convert_to_rs_expressions(params))

def get_qubit_indices(self) -> Set[int]:
return {qubit.as_fixed() for qubit in super().qubits}

Expand Down
4 changes: 4 additions & 0 deletions test/unit/test_quilbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,13 @@ def test_name(self, gate, name):

def test_params(self, gate, params):
assert gate.params == params
gate.params = [pi / 2]
assert gate.params == [pi / 2]

def test_qubits(self, gate, qubits):
assert gate.qubits == qubits
gate.qubits = [Qubit(123)]
assert gate.qubits == [Qubit(123)]

def test_get_qubits(self, gate, qubits):
assert gate.get_qubit_indices() == {q.index for q in qubits}
Expand Down

0 comments on commit 0488e08

Please sign in to comment.