-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Better initial_layout validation #5526
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
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kdk
approved these changes
Dec 18, 2020
molar-volume
pushed a commit
to molar-volume/qiskit-terra
that referenced
this pull request
Dec 26, 2020
Co-authored-by: Kevin Krsulich <kevin.krsulich@ibm.com>
mergify bot
added a commit
that referenced
this pull request
Jan 13, 2021
* 1. params are required in convert method in GradientBased and HessianBased subclasses 2. fix on handling params of type ParameterExpression * Update qiskit/opflow/gradients/gradient.py Co-authored-by: Julien Gacon <gaconju@gmail.com> * passmanager(..., callback=...) parameter removed (#5522) * passmanager callback removal * unused-import * reno * better initial_layout validation (#5526) Co-authored-by: Kevin Krsulich <kevin.krsulich@ibm.com> * 1) unit tests modified to test ParameterVector input for Gradient, NaturalGradient, QFI and Hessian 2) index method added to ParameterVector 3) handling of ParameterVector changed for Hessian to be consistent with list params * Hessian with respect to vector-like params returns matrix, unit test modified accordingly * Add PiecewiseChebyshev arithmetic circuit (#5364) * general polynomial approximation * release notes * fix qubit re-allocation * fix re-calling build * Update qiskit/circuit/library/arithmetic/piecewise_chebyshev.py Co-authored-by: Julien Gacon <gaconju@gmail.com> * Update qiskit/circuit/library/arithmetic/piecewise_chebyshev.py Co-authored-by: Julien Gacon <gaconju@gmail.com> * Update qiskit/circuit/library/arithmetic/piecewise_chebyshev.py Co-authored-by: Julien Gacon <gaconju@gmail.com> * fix indentation lint error * move tests to library module * Add suggestions from code review Co-authored-by: Julien Gacon <gaconju@gmail.com> * Ensure aux_operator eigenvalues are normalized (#5496) As reported on multiple occasions in Qiskit Aqua ([1], [2]), the eigenvalues of the auxiliary operators are not correctly normalized when the QASM backend is used. This commit fixes this short-coming by applying the same normalization to the VQE's eigenstate when obtained from a QASM backend (in which case this is a dictionary) as done by the `CircuitSampler` in its `sample_circuits` function. The case of the statevector backend is unaffected by this change, as it will return the eigenstate as a list. A unittest is added which asserts this behavior. [1]: https://github.com/Qiskit/qiskit-aqua/issues/1460 [2]: qiskit-community/qiskit-aqua#1467 Co-authored-by: Julien Gacon <gaconju@gmail.com> Co-authored-by: Julien Gacon <gaconju@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> * Hessian with respect to vector-like param returns matrix, unit test modified accordingly Co-authored-by: Julien Gacon <gaconju@gmail.com> Co-authored-by: Luciano Bello <luciano.bello@ibm.com> Co-authored-by: Kevin Krsulich <kevin.krsulich@ibm.com> Co-authored-by: Almudena Carrera Vazquez <almudenacarreravazquez@hotmail.com> Co-authored-by: Max Rossmannek <oss@zurich.ibm.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Follow me down this rabbit hole. I'll be your guide:
@kdk noticed that the test
test.python.compiler.test_transpiler.TestTranspile.test_wrong_initial_layout
was passing for the wrong reasons (problem 1). Here is the test:https://github.com/Qiskit/qiskit-terra/blob/a46af7daa86b2d9c21f79dc5a1bfc1a09fcc3d4f/test/python/compiler/test_transpiler.py#L410-L427
Indeed, this tries to transpile on a badly defined
initial_layout
parameter. However,transpile(qc, backend, initial_layout=bad_initial_layout)
raises with the following message:This exception is raised by
EnlargeWithAncilla
because is trying to addQuantumRegister(3, 'q')
(frominitial_layout
into the dag that already hasQuantumRegister(2, 'q')
.That happens because
FullAncillaAllocation
wrongly allowedQuantumRegister(3, 'q')
to be part of the layout (problem 2).FullAncillaAllocation
should check that the register mentioned in the layout also exist in the circuit.When that validation was added,
SabreLayout
was raising because it was trying to use a layout withancillas
. The error occurred in this loop:https://github.com/Qiskit/qiskit-terra/blob/54c8870623e28cb3f9f4eb92828fb8fd5f9dde49/qiskit/transpiler/passes/layout/sabre_layout.py#L97-L107
The
PassManager
in this code is changing theinitial_layout
variable in-place (Problem 3).Here is a summary of this PR:
test_wrong_initial_layout
to test what it suppose to test.FullAncillaAllocation
withinital_layout
validation. And test it.SetLayout
, copy the layout object to avoid changinginitial_layout
in-place.