Skip to content
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

Error in Parameter Handling #256

Closed
nquetschlich opened this issue Feb 7, 2024 · 7 comments
Closed

Error in Parameter Handling #256

nquetschlich opened this issue Feb 7, 2024 · 7 comments
Assignees

Comments

@nquetschlich
Copy link

nquetschlich commented Feb 7, 2024

Hi there,

when experimenting with compiling a parameterized quantum circuit partly with Qiskit and partly with TKET using the following example:

from pytket.extensions.qiskit import qiskit_to_tk, tk_to_qiskit 
from pytket.passes import CliffordSimp
from qiskit.circuit.library import TwoLocal
from qiskit import transpile

qc = TwoLocal(1, "ry", "cz", reps=1, entanglement="linear")
qc_transpiled = transpile(qc, basis_gates=["sx", "rz", "cx", "x"], optimization_level=3)

tket_qc = qiskit_to_tk(qc_transpiled)
CliffordSimp().apply(tket_qc)
transformed_qc = tk_to_qiskit(tket_qc)

qc_transpiled_again = transpile(transformed_qc, basis_gates=["sx", "rz", "cx", "x"])

qc_transpiled_again = qc_transpiled_again.assign_parameters({qc_transpiled_again.parameters[i]: 0 for i in range(len(qc_transpiled_again.parameters))})

I face a TypeError: could not cast expression to complex error.
Apparently, there is some error in the parameter handling in combination with sympy. When executing

expr = qc_transpiled_again.data._circuit._data[2].operation.definition.data._circuit.global_phase
assigned_expr = expr.assign(qc_transpiled_again.parameters[0],1).assign(qc_transpiled_again.parameters[1],1)
print(assigned_expr)
print(assigned_expr._symbol_expr)
print(assigned_expr.is_real())

the expression is apparently not real, although the symbolic representation can be reduced to a real number. Even a assigned_expr._symbol_expr.evalf() does not reduce the assigned_expr and returns -0.5*(3.14159265358979 - 2*atan2(-0.841470984807895, 0.540302305868143)). Maybe the atan2 causes the problem?

I used Qiskit v0.45.3, pytket_qiskit v0.48.0 using python 3.11 under Mac OS v14.2.1.

@nquetschlich
Copy link
Author

Hi there,

unfortunately, the error still persists in pytket-qiskit v0.50.0 with qiskit v1.0.2. However, the error message is now a bit different: TypeError: EvalfMixin.evalf() got an unexpected keyword argument 'real'

It would be highly appreciated if you could have a look into this issue, since it currently prevents a smooth combination of compilation passes from both qiskit and tket within our MQT Predictor framework.

@nquetschlich
Copy link
Author

Interestingly, when I try to convert the quantum circuit after the tket CliffordSimp() via dumping and then loading via the qasm format using

from qiskit import QuantumCircuit
from pytket.qasm import circuit_to_qasm_str

transformed_qc = QuantumCircuit.from_qasm_str(circuit_to_qasm_str(tket_qc))

I get a different error: QASM2ParseError: "'atan2' is not a parameter or custom instruction defined in this scope"

@cqc-melf
Copy link
Collaborator

Thank you for reporting this, I will take a look and try to understand what is going on

@nquetschlich
Copy link
Author

Thank you for reporting this, I will take a look and try to understand what is going on

Thanks a lot for that. I was wondering whether you already had the time to have a look?

@cqc-melf
Copy link
Collaborator

cqc-melf commented Apr 5, 2024

Hi @nquetschlich
Thank you for being so patient, the issues was a bit tricky.
I have been able to reduce this to a problem in qiskit interacting with sympy and I have submitted a bug report.
I will keep an eye on this and try to update as soon as this is fixed.
More details can be found at: Qiskit/qiskit#12144

@cqc-melf
Copy link
Collaborator

cqc-melf commented Apr 5, 2024

The issue in qiskit was caused by an updated and what we were trying in the conversion is not expected to work any more.

I have updated that now and put out a release candidate.

Can you please check if this solved all the issues you have?

You can install it with pip install pytket-qiskit==0.51.1rc0

@nquetschlich
Copy link
Author

The issue in qiskit was caused by an updated and what we were trying in the conversion is not expected to work any more.

I have updated that now and put out a release candidate.

Can you please check if this solved all the issues you have?

You can install it with pip install pytket-qiskit==0.51.1rc0

Thanks a lot for fixing this issue. I tried it out and it works.

@cqc-melf cqc-melf closed this as completed Apr 9, 2024
@cqc-melf cqc-melf self-assigned this Apr 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants