-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Check for gate parameter #12439
base: main
Are you sure you want to change the base?
Check for gate parameter #12439
Conversation
Thank you for opening a new pull request. Before your PR can be merged it will first need to pass continuous integration tests and be reviewed. Sometimes the review process can be slow, so please be patient. While you're waiting, please feel free to review other open PRs. While only a subset of people are authorized to approve pull requests for merging, everyone is encouraged to review open pull requests. Doing reviews helps reduce the burden on the core team and helps make the project's code better for everyone. One or more of the following people are relevant to this code:
|
Pull Request Test Coverage Report for Build 9136334258Details
💛 - Coveralls |
@@ -95,4 +95,4 @@ def get_calibration(self, node_op: CircuitInst, qubits: List) -> Union[Schedule, | |||
Raises: | |||
TranspilerError: When node is parameterized and calibration is raw schedule object. | |||
""" | |||
return self.target.get_calibration(node_op.name, tuple(qubits), *node_op.params) | |||
return self.target.get_calibration(node_op.name, tuple(qubits), None, *node_op.params) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewer's comment anticipated! :)
I am not super satisfied with putting None
here.
Here, the parameter node_op.params
has the actual list of float parameters to bind with the Gate's parameters stored in the target which is a parameter(variable). That is why I had to put None
just to keep the function's behavior similar to its previous version.
) | ||
|
||
def test_get_calibration_for_oper_with_param_pulse_with_param(self): | ||
args = {0.23, 0.123, 0.2} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Considering theta
maps to amp
, sigma
, and, beta
. The emphasis here is just to prove that multiple *args could be successfully bind if equal number of parameter(variable) present in the actual Schedule
@1ucian0 , pulse features are being deprecated in Qiskit, and being moved to Qiskit Dynamics, is this PR required anymore? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @MozammilQ , thanks for working on this! Yes, although Pulse is being deprecated in Qiskit 1.3 and will be removed in 2.0, it would still be good to have this as part of the extended support window for the 1.x series.
For moving forward please note the following:
- Update your branch to include all the recent changes including the move
Target
to Rust. We still haveTarget
class intarget.py
withhas_calibration
andget_calibration
there so your changes are still valid. - Once this PR is ready we will want to merge it into the 1.4 branch and not 2.0.
I also left some line comments after partially reviewing this.
) -> bool: | ||
"""Return whether the instruction (operation + qubits) defines a calibration. | ||
|
||
Args: | ||
operation_name: The name of the operation for the instruction. | ||
qargs: The tuple of qubit indices for the instruction. | ||
operation_params: The parameters for the Instruction. | ||
Even for a single parameter, provide as a list of float |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can omit this refinement as the type hint explicitly specs a list param and the code converts to list
from a scalar anyway.
@@ -907,15 +923,25 @@ def get_calibration( | |||
Args: | |||
operation_name: The name of the operation for the instruction. | |||
qargs: The tuple of qubit indices for the instruction. | |||
operation_name: The parameters for the instruction. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Duplicate entry for operation_name
, need to be removed
@@ -907,15 +923,25 @@ def get_calibration( | |||
Args: | |||
operation_name: The name of the operation for the instruction. | |||
qargs: The tuple of qubit indices for the instruction. | |||
operation_name: The parameters for the instruction. | |||
operation_params: The parameters for the Instruction. | |||
Even for a single parameter, provide as a list of float |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same comment as in has_calibration
--- | ||
fixes: | ||
- | | ||
Fixes an issue with :func:`Target.has_calibration` and :func:`Target.get_calibration` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixes an issue with :func:`Target.has_calibration` and :func:`Target.get_calibration` | |
Fixed an issue with :func:`Target.has_calibration` and :func:`Target.get_calibration` |
- | | ||
Fixes an issue with :func:`Target.has_calibration` and :func:`Target.get_calibration` | ||
when passed with a parameterized Gate doesn't work as expected. | ||
Refer to `qiskit/#11657 <https://github.com/Qiskit/qiskit/issues/11657>` and, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Refer to `qiskit/#11657 <https://github.com/Qiskit/qiskit/issues/11657>` and, | |
Refer to `qiskit/#11657 <https://github.com/Qiskit/qiskit/issues/11657>`__ and, |
Fixes an issue with :func:`Target.has_calibration` and :func:`Target.get_calibration` | ||
when passed with a parameterized Gate doesn't work as expected. | ||
Refer to `qiskit/#11657 <https://github.com/Qiskit/qiskit/issues/11657>` and, | ||
`qiskit/#11658 <https://github.com/Qiskit/qiskit/issues/11658>` for more information. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
`qiskit/#11658 <https://github.com/Qiskit/qiskit/issues/11658>` for more information. | |
`qiskit/#11658 <https://github.com/Qiskit/qiskit/issues/11658>` __ for more information. |
def get_calibration( | ||
self, | ||
operation_name: str, | ||
qargs: tuple[int, ...], | ||
operation_params: list[float] | None = None, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not ordering like this?
def get_calibration(
self,
operation_name: str,
qargs: tuple[int, ...],
*args: ParameterValueType,
operation_params: list[float] | None = None,
**kwargs: ParameterValueType,
) -> Schedule | ScheduleBlock:
Summary
This PR aims to fix an issue with
Target.has_calibration()
andTarget.get_calibration()
when passed with parameterized gates didn't work as expected.Refer to issues for more information.
#11658
#11657
Details and comments
To be precise,
Target.has_calibration()
didn't check if the calibration if present is present for a particular gate with a particular parameter,and,
Target.get_calibration()
didn't get the calibration for the gate if present is present for a particular gate with a particular parameter, when passed as a parameter asargs
, the method tried to bind thisargs
with a parameter in the schedule, which was not the intention of this particularargs
.So, the signature of
Target.has_calibration
includes a new argumentoperation_params
which has to be passed with the parameter of theGate
if the Gate is parameterized.Similarly, the signature of
Target.get_calibration
also includes a new argumentoperation_params
which has to be passed with the parameter of theGate
if the Gate is parameterized. In the case ofargs
argument in this function, it should be passed with the values to be bound with the parameter of the schedule which has been attached to this particular gate as its calibration.fixes #11658
fixes #11657