From c1cd914bb7506bac0bde1ba8d19663fa7773e455 Mon Sep 17 00:00:00 2001 From: Sameer Dambal Date: Fri, 4 Aug 2023 10:55:12 -0500 Subject: [PATCH 01/13] Added a new feature in parameterexpression.py to display the sign of the expression inputted --- qiskit/circuit/parameterexpression.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/qiskit/circuit/parameterexpression.py b/qiskit/circuit/parameterexpression.py index dc7614a30586..c3369ca3d2d7 100644 --- a/qiskit/circuit/parameterexpression.py +++ b/qiskit/circuit/parameterexpression.py @@ -450,6 +450,12 @@ def log(self): from sympy import log as _log return self._call(_log) + + def sign(self): + from sympy import sign + val = self._symbol_expr + sign_value = sign(val) + return sign_value def __repr__(self): return f"{self.__class__.__name__}({str(self)})" From ba69739dde56494a4b20b2298694fec9016effb7 Mon Sep 17 00:00:00 2001 From: Sameer Dambal Date: Fri, 4 Aug 2023 14:13:52 -0500 Subject: [PATCH 02/13] added a release note --- ...-parameterexpression-57693dd69103dc8c.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml diff --git a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml new file mode 100644 index 000000000000..188e7d468a3c --- /dev/null +++ b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml @@ -0,0 +1,19 @@ +--- +prelude: > + New feature to display sign of a Parameter +features: + - | + Introduced a new feature that adds support for displaying the sign of the Parameter of the value of an expression of a Parameter class. + Instead of using numpy or other libraries, the user can use the instance of the ParameterExpression class to display the sign. + + It can be used as follows: + + from qiskit.circuit import ParameterExpression + + v = ParameterExpression(symbol_map={}, expr=-6) + print("Sign is: ", v.sign()) + + Note that the value passed to the 'expr' argument to ParameterExpression() must be an integer. + + Refer to for more details. + From 8cd50d20c6796c38120f4f92ecad37431d761c51 Mon Sep 17 00:00:00 2001 From: Sameer Dambal Date: Fri, 18 Aug 2023 12:17:05 -0500 Subject: [PATCH 03/13] added new method inside parameterexpression.py to return sign of parameter as parameterexpression return type --- qiskit/circuit/parameterexpression.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/qiskit/circuit/parameterexpression.py b/qiskit/circuit/parameterexpression.py index c3369ca3d2d7..9d4fdcc82a84 100644 --- a/qiskit/circuit/parameterexpression.py +++ b/qiskit/circuit/parameterexpression.py @@ -452,10 +452,15 @@ def log(self): return self._call(_log) def sign(self): - from sympy import sign - val = self._symbol_expr - sign_value = sign(val) - return sign_value + """"Sign of a ParameterExpression""" + if _optionals.HAS_SYMENGINE: + import symengine + + return self._call(symengine.sign) + else: + from sympy import sign as _sign + + return self._call(_sign) def __repr__(self): return f"{self.__class__.__name__}({str(self)})" From f67a731441d854ffb2660373d9699adf5e991dc1 Mon Sep 17 00:00:00 2001 From: Sameer Dambal Date: Fri, 18 Aug 2023 12:53:10 -0500 Subject: [PATCH 04/13] added a release note --- ...eature-parameterexpression-57693dd69103dc8c.yaml | 13 ++++++++----- test/python/circuit/test_parameters.py | 7 +++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml index 188e7d468a3c..ea3045e68b28 100644 --- a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml +++ b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml @@ -8,12 +8,15 @@ features: It can be used as follows: - from qiskit.circuit import ParameterExpression + from qiskit.circuit import Parameter - v = ParameterExpression(symbol_map={}, expr=-6) - print("Sign is: ", v.sign()) - - Note that the value passed to the 'expr' argument to ParameterExpression() must be an integer. + b = Parameter("phi") + sign_value = b.sign() + print("sign of Parameter is: ", sign_value) Refer to for more details. +fixes: + - | + Introduces a feature to display sign of a Parameter + Fixed `#10360 `_ diff --git a/test/python/circuit/test_parameters.py b/test/python/circuit/test_parameters.py index 31b73c55afca..7ccf2003f9a3 100644 --- a/test/python/circuit/test_parameters.py +++ b/test/python/circuit/test_parameters.py @@ -939,6 +939,13 @@ def test_rebinding_instruction_copy(self): self.assertEqual(expected1, output1) self.assertEqual(expected2, output2) + def test_sign_of_parameter(self): + """Test returning the sign of the value of the parameter""" + + b = Parameter("phi") + sign_of_parameter = b.sign() + print("sign of Parameter is: ", sign_of_parameter) + @combine(target_type=["gate", "instruction"], parameter_type=["numbers", "parameters"]) def test_decompose_propagates_bound_parameters(self, target_type, parameter_type): """Verify bind-before-decompose preserves bound values.""" From 2e0c6aa729c9e15f726dc39dd8c624773abfa6e9 Mon Sep 17 00:00:00 2001 From: Sameer Dambal Date: Wed, 23 Aug 2023 16:40:51 -0500 Subject: [PATCH 05/13] fixed some formatting issues using black --- docs/conf.py | 2 +- qiskit/circuit/parameterexpression.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 9dfbb3f73fcf..bb0b31e654fe 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -39,7 +39,7 @@ "reno.sphinxext", "sphinx_design", "matplotlib.sphinxext.plot_directive", - "sphinx.ext.doctest" + "sphinx.ext.doctest", ] templates_path = ["_templates"] diff --git a/qiskit/circuit/parameterexpression.py b/qiskit/circuit/parameterexpression.py index 9d4fdcc82a84..c5b2d6f93a95 100644 --- a/qiskit/circuit/parameterexpression.py +++ b/qiskit/circuit/parameterexpression.py @@ -450,9 +450,9 @@ def log(self): from sympy import log as _log return self._call(_log) - + def sign(self): - """"Sign of a ParameterExpression""" + """ "Sign of a ParameterExpression""" if _optionals.HAS_SYMENGINE: import symengine From d25140edd69ab6891fb39f6f3704dbaae30c60e1 Mon Sep 17 00:00:00 2001 From: SamD-1998 Date: Wed, 23 Aug 2023 16:52:06 -0500 Subject: [PATCH 06/13] Update releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml Co-authored-by: Will Shanks --- ...added-sign-feature-parameterexpression-57693dd69103dc8c.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml index ea3045e68b28..490730fdceed 100644 --- a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml +++ b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml @@ -1,6 +1,4 @@ --- -prelude: > - New feature to display sign of a Parameter features: - | Introduced a new feature that adds support for displaying the sign of the Parameter of the value of an expression of a Parameter class. From 80291964b24848cbac6f8266fce81770c5df0866 Mon Sep 17 00:00:00 2001 From: SamD-1998 Date: Wed, 23 Aug 2023 16:52:50 -0500 Subject: [PATCH 07/13] Update releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml Co-authored-by: Will Shanks --- ...ded-sign-feature-parameterexpression-57693dd69103dc8c.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml index 490730fdceed..1c83d53f7a7f 100644 --- a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml +++ b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml @@ -13,8 +13,4 @@ features: print("sign of Parameter is: ", sign_value) Refer to for more details. -fixes: - - | - Introduces a feature to display sign of a Parameter - Fixed `#10360 `_ From eb00264cbe76f3c8185830c129fb3cb42d0ed1d6 Mon Sep 17 00:00:00 2001 From: SamD-1998 Date: Wed, 23 Aug 2023 16:53:02 -0500 Subject: [PATCH 08/13] Update releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml Co-authored-by: Will Shanks --- ...ded-sign-feature-parameterexpression-57693dd69103dc8c.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml index 1c83d53f7a7f..5a18ec721a3d 100644 --- a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml +++ b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml @@ -1,8 +1,8 @@ --- features: - | - Introduced a new feature that adds support for displaying the sign of the Parameter of the value of an expression of a Parameter class. - Instead of using numpy or other libraries, the user can use the instance of the ParameterExpression class to display the sign. + Introduced a new feature that adds support for calculating the sign of the Parameter of the value of an expression of a Parameter class. + Instead of using numpy or other libraries, the user can use the instance of the ParameterExpression class to calculate the sign. It can be used as follows: From e4f2b4ddbe82f521b8f959cc4ccdf5fe27838966 Mon Sep 17 00:00:00 2001 From: Sameer Dambal Date: Wed, 23 Aug 2023 17:01:43 -0500 Subject: [PATCH 09/13] made suggested changes to test.parameters.py --- test/python/circuit/test_parameters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/python/circuit/test_parameters.py b/test/python/circuit/test_parameters.py index 7ccf2003f9a3..1b6c7d8fa390 100644 --- a/test/python/circuit/test_parameters.py +++ b/test/python/circuit/test_parameters.py @@ -944,7 +944,7 @@ def test_sign_of_parameter(self): b = Parameter("phi") sign_of_parameter = b.sign() - print("sign of Parameter is: ", sign_of_parameter) + self.assertEqual(sign_of_parameter.assign(b, -3), -1) @combine(target_type=["gate", "instruction"], parameter_type=["numbers", "parameters"]) def test_decompose_propagates_bound_parameters(self, target_type, parameter_type): From 53282807800186d7d19409138a6e8942f8f4b85a Mon Sep 17 00:00:00 2001 From: Will Shanks Date: Thu, 31 Aug 2023 20:41:18 -0400 Subject: [PATCH 10/13] Update qiskit/circuit/parameterexpression.py --- qiskit/circuit/parameterexpression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/circuit/parameterexpression.py b/qiskit/circuit/parameterexpression.py index c5b2d6f93a95..71b9fb7761a5 100644 --- a/qiskit/circuit/parameterexpression.py +++ b/qiskit/circuit/parameterexpression.py @@ -452,7 +452,7 @@ def log(self): return self._call(_log) def sign(self): - """ "Sign of a ParameterExpression""" + """Sign of a ParameterExpression""" if _optionals.HAS_SYMENGINE: import symengine From a02244b2a8366aaa4012bb80665ba9f9a5a411a0 Mon Sep 17 00:00:00 2001 From: SamD-1998 Date: Fri, 1 Sep 2023 10:42:08 -0500 Subject: [PATCH 11/13] Update releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml Co-authored-by: Will Shanks --- ...added-sign-feature-parameterexpression-57693dd69103dc8c.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml index 5a18ec721a3d..dd859012195b 100644 --- a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml +++ b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml @@ -4,7 +4,7 @@ features: Introduced a new feature that adds support for calculating the sign of the Parameter of the value of an expression of a Parameter class. Instead of using numpy or other libraries, the user can use the instance of the ParameterExpression class to calculate the sign. - It can be used as follows: + It can be used as follows:: from qiskit.circuit import Parameter From 651912b4f8eb8999f02db47531f43621bb76e382 Mon Sep 17 00:00:00 2001 From: SamD-1998 Date: Fri, 1 Sep 2023 10:42:34 -0500 Subject: [PATCH 12/13] Update releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml Co-authored-by: Will Shanks --- ...added-sign-feature-parameterexpression-57693dd69103dc8c.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml index dd859012195b..badc822fe4d5 100644 --- a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml +++ b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml @@ -12,5 +12,5 @@ features: sign_value = b.sign() print("sign of Parameter is: ", sign_value) - Refer to for more details. + Refer to ` #10360 `__ for more details. From 981c4707347ae2269241485f06dc3abbc5fb5f47 Mon Sep 17 00:00:00 2001 From: Sameer Dambal Date: Fri, 1 Sep 2023 15:15:48 -0500 Subject: [PATCH 13/13] commiting suggested changes with updated email to clear CLA issues --- ...ure-parameterexpression-57693dd69103dc8c.yaml | 16 +++++++++------- test/python/circuit/test_parameters.py | 2 ++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml index badc822fe4d5..b9738207167c 100644 --- a/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml +++ b/releasenotes/notes/added-sign-feature-parameterexpression-57693dd69103dc8c.yaml @@ -1,16 +1,18 @@ --- features: - | - Introduced a new feature that adds support for calculating the sign of the Parameter of the value of an expression of a Parameter class. - Instead of using numpy or other libraries, the user can use the instance of the ParameterExpression class to calculate the sign. + Added support for expressing the sign of a :class: 'ParameterExpression' + Instead of assigning a concrete value and using ''numpy.sign'' or other library functions, the user can use the instance of the ParameterExpression + class to calculate the sign and can work with the sign before the expression is fully assigned. It can be used as follows:: - from qiskit.circuit import Parameter + from qiskit.circuit import Parameter - b = Parameter("phi") - sign_value = b.sign() - print("sign of Parameter is: ", sign_value) + b = Parameter("phi") + sign_value = b.sign() + print("sign of an unassigned Parameter is: ", sign_value) + print("Sign of a Parameter assigned to -3 is: ", sign_value.assign(b,-3)) - Refer to ` #10360 `__ for more details. + Refer to ' #10360'__ for more details. diff --git a/test/python/circuit/test_parameters.py b/test/python/circuit/test_parameters.py index 1b6c7d8fa390..b74eef431b2e 100644 --- a/test/python/circuit/test_parameters.py +++ b/test/python/circuit/test_parameters.py @@ -945,6 +945,8 @@ def test_sign_of_parameter(self): b = Parameter("phi") sign_of_parameter = b.sign() self.assertEqual(sign_of_parameter.assign(b, -3), -1) + self.assertEqual(sign_of_parameter.assign(b, 2), 1) + self.assertEqual(sign_of_parameter.assign(b, 0), 0) @combine(target_type=["gate", "instruction"], parameter_type=["numbers", "parameters"]) def test_decompose_propagates_bound_parameters(self, target_type, parameter_type):