Simulate Trapped Ion Noise Model

I am trying to simulate the ionq noise model using Pennylane. I can run with without the noise model, but when passing it in it appears to not be supported. Is there a workaround to simulate the noise model of an IONQ device (I believe this capability is supported using Qiskit).

import pennylane as qml
from pennylane_ionq import ops

dev = qml.device(name = "ionq.simulator", noise_model = "harmony", shots=10, api_key ="xx", wires=2)

def circuit(x, y, z):
    qml.RX(x, wires=0)
    ops.YY(y, wires=[0,1])
    ops.ZZ(z, wires=[0,1])
    return qml.expval(qml.PauliZ(0))
TypeError                                 Traceback (most recent call last)
Cell In[38], line 4
      1 import pennylane as qml
      2 from pennylane_ionq import ops
----> 4 dev = qml.device(name = "ionq.simulator", noise_model = "harmony", shots=10, api_key ="xx", wires=2)
      6 @qml.qnode(dev)
      7 def circuit(x, y, z):
      8     qml.RX(x, wires=0)

File ~/anaconda3/envs/Braket/lib/python3.10/site-packages/pennylane/, in device(name, *args, **kwargs)
    364     raise DeviceError(
    365         f"The {name} plugin requires PennyLane versions {plugin_device_class.pennylane_requires}, "
    366         f"however PennyLane version {__version__} is installed."
    367     )
    369 # Construct the device
--> 370 dev = plugin_device_class(*args, **options)
    372 # Once the device is constructed, we set its custom expansion function if
    373 # any custom decompositions were specified.
    374 if custom_decomps is not None:

TypeError: SimulatorDevice.__init__() got an unexpected keyword argument 'noise_model'

Name: PennyLane
Version: 0.34.0
Summary: PennyLane is a Python quantum machine learning library by Xanadu Inc.
Home-page: GitHub - PennyLaneAI/pennylane: PennyLane is a cross-platform Python library for differentiable programming of quantum computers. Train a quantum computer the same way as a neural network.
License: Apache License 2.0
Location: /home/ec2-user/anaconda3/envs/Braket/lib/python3.10/site-packages
Requires: appdirs, autograd, autoray, cachetools, networkx, numpy, pennylane-lightning, requests, rustworkx, scipy, semantic-version, toml, typing-extensions
Required-by: amazon-braket-algorithm-library, amazon-braket-pennylane-plugin, PennyLane-IonQ, PennyLane-Lightning

Platform info: Linux-5.10.192-183.736.amzn2.x86_64-x86_64-with-glibc2.26
Python version: 3.10.13
Numpy version: 1.25.2
Scipy version: 1.12.0
Installed devices:

  • lightning.qubit (PennyLane-Lightning-0.34.0)
  • default.gaussian (PennyLane-0.34.0)
  • default.mixed (PennyLane-0.34.0)
  • default.qubit (PennyLane-0.34.0)
  • default.qubit.autograd (PennyLane-0.34.0)
  • default.qubit.jax (PennyLane-0.34.0)
  • default.qubit.legacy (PennyLane-0.34.0)
  • (PennyLane-0.34.0)
  • default.qubit.torch (PennyLane-0.34.0)
  • default.qutrit (PennyLane-0.34.0)
  • null.qubit (PennyLane-0.34.0)
  • (amazon-braket-pennylane-plugin-1.23.0)
  • (amazon-braket-pennylane-plugin-1.23.0)
  • braket.local.ahs (amazon-braket-pennylane-plugin-1.23.0)
  • braket.local.qubit (amazon-braket-pennylane-plugin-1.23.0)
  • ionq.qpu (PennyLane-IonQ-0.34.0)
  • ionq.simulator (PennyLane-IonQ-0.34.0)

Hey @Daniel_Silver, welcome to the forum! :rocket:

The ionq.simulator device provides an ideal noiseless trapped-ion simulation; it doesn’t support adding noise, unfortunately. I suggest that if you want to simulate noise on a quantum circuit that you use default.mixed (qml.devices.default_mixed.DefaultMixed — PennyLane 0.34.0 documentation).

There are a few demos worth checking out as well:

Let me know if this helps!

Hi Isaac, thank you for the suggestions! I have been using the qiskit aer simulator to simulate noise models of superconducting machines, I was specifically hoping for a way to simulate the noise of trapped-ion machines, do you know if there is any workaround to simulate my Pennylane circuits on a noisy trapped-ion simulator?

That’s a great question! I’ll get back to you on that. Will talk to some people internally.

@Daniel_Silver unfortunately you’d be looking at a custom implementation here (which might be fun to do if you’ve ever wanted to contribute to an open source project!). Although it’s not trapped ions, you can use default.mixed and simulate noise :slight_smile:.

This is a bit late, but I figured out a “jank” way to use the noisy simulator IonQ provides through the following steps:

  1. Navigate to your file located in site-packagespennylane_ionq folder
  2. Open the file, go to the SimulatorDevice(IonQDevice) class,
  3. Edit the target variable target in the def __init__(self, wires, *, gateset="qis", shots=1024, api_key=None) function to simulator.aria-1 or simulator.harmony (whichever backend noise model you desire)
  4. Save the file and restart your kernel if you are programming through Jupyter Notebooks
  5. Wherever you create your backend device in your main file, instead of initializing your device as
    dev = qml.device("ionq.simulator.aria-1", api_key = " ", wires=num_wires), initialize it as dev = ionq.SimulatorDevice(wires=num_wires_circuit, shots=1000), and store your API key as an environment variable named IONQ_API_KEY. If you are using Jupyter Notebooks, you can do this through typing !IONQ_API_KEY = 1234ABCD. Do not put quotation marks around your Key.

Hope this helps!

1 Like

Hi @Dhruv_Srinivasan, welcome to the Forum and thank you for sharing your solution! :star_struck: :tada:

@Dhruv_Srinivasan welcome to the forum!

This worked for you? Do you have some sample code you could share that shows that you’re able to simulate noise? :open_mouth: