Physical parameters of the C12 system

C12’s quantum computer is based on optimized spin qubits. The spin qubit is realized from electrons trapped in a double quantum dot suspended on carbon nanotubes (CNTs) embedded in a silicon nanocircuit and microwave cavity.

Different physical parameters influence the behavior of our emulator and, consequentially, our gates. Therefore, they can strongly influence the fidelity of the used gate set.

[1]:
from c12_callisto_clients.api.client import Request

from c12_callisto_clients.user_configs import UserConfigs
import os
user_auth_token = os.getenv("C12_TOKEN")
configs = UserConfigs.parse_obj({"token" : user_auth_token})
# Create the request instance
# Constructor of the Request class also accepts the verbose parameter, which can be use for more detailed output of the methods.

request = Request(auth_token=user_auth_token, verbose=False)
[2]:
# Getting the physical parameters of the C12 system
physical_params = request.get_params()

for key, value in physical_params.items():
    print(f"{key} = {value['value']} ({value['unit']})")
B_sym = 0.245 (T)
B_asym = 0.245 (T)
epsilon = 0.0 (V)
half_delta_g = 300e6 (Hz)
omega_b = 14.1e6 (Hz)
omega_t = 19.9e9 (Hz)
omega_s = 12.3e9 (Hz)
lambda_nu_b = 1.5e-05 (Hz)
lambda_nu_t = 5e-08 (Hz)
lambda_nu_s = 2e-07 (Hz)
Q_c = 1e4 (none)
Q_nu_b = 1e2 (none)
Q_nu_t = 1e5 (none)
Q_nu_s = 1e5 (none)
T = 20e-3 (K)
Omega_d = 500e6 (Hz)
power_spect_const = 0.00117 (GHz^2)
time_k = 0.5 (none)
noisy = 1 (none)

Changing the physical parameters and passing them when running the emulation is achievable. By doing that, the emulation will be run using the given set of parameters. You can only pass the parameters you want to change. The other ones are going to have the default value.

It is crucial to notice that changing the physical parameters permanently is impossible! They will have default values until they are changed during the start of the emulation.

[3]:
# For more information see notebooks 2 & 3
from c12simulator_clients.user_configs import UserConfigs
from c12simulator_clients.qiskit_back.c12sim_provider import C12SimProvider

configs = UserConfigs.parse_obj({"token" : user_auth_token, "verbose": False})
c12_simulator_provider = C12SimProvider(configs)
c12_simulator_backend = c12_simulator_provider.get_backend('c12sim-iswap')

from qiskit import QuantumCircuit

circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)

[3]:
<qiskit.circuit.instructionset.InstructionSet at 0x7f5b04588400>
[4]:
# To change the physical parameters we need to create a Python dictionary with the key (parm name) and value (param value) pairs

new_params = {
    "noisy" : 0
}

c12_job = c12_simulator_backend.run(circuit, shots=10000, physical_params=str(new_params))
c12_result = c12_job.result()
c12_counts = c12_result.get_counts()
print(f"C12 simulation counts: {c12_counts}")
C12 simulation counts: {'00': 5029, '11': 4971}
[5]:
# To change the physical parameters we need to create a python dictionary with the key (parm name) and value (param value) pairs

new_params = {
    "noisy" : 1
}

c12_job = c12_simulator_backend.run(circuit, shots=10000, physical_params=str(new_params))
c12_result = c12_job.result()
c12_counts = c12_result.get_counts()
print(f"C12 simulation counts: {c12_counts}")
C12 simulation counts: {'00': 4951, '01': 7, '10': 9, '11': 5033}
[8]:
# Also, it  is possible that some given parameters are outside the ranges that are making them physically impossible
from c12simulator_clients.qiskit_back.exceptions import C12SimJobError
new_params = {
    "Omega_d" : 600e10
}

c12_job = c12_simulator_backend.run(circuit, shots=10000, physical_params=str(new_params))
try:
    c12_result = c12_job.result()
    c12_counts = c12_result.get_counts()
    print(f"C12 simulation counts: {c12_counts}")
except C12SimJobError:
    print(c12_job.error_message()) # Error number 1010 is because the values for the parameters are outside the range

---------------------------------------------------------------------------
C12SimJobError                            Traceback (most recent call last)
Cell In[8], line 10
      8 try:
      9     c12_job = c12_simulator_backend.run(circuit, shots=10000, physical_params=str(new_params))
---> 10     c12_result = c12_job.result()
     11     c12_counts = c12_result.get_counts()
     12     print(f"C12 simulation counts: {c12_counts}")

File ~/.miniconda3/lib/python3.11/site-packages/c12_callisto_clients/qiskit_back/c12sim_job.py:228, in C12SimJob.result(self, timeout, wait)
    223         raise C12SimJobError(
    224             f"Unable to retrieve result for job {self._job_id}. Job was cancelled"
    225         )
    227     if self._status is JobStatus.ERROR:
--> 228         raise C12SimJobError(
    229             f"Unable to retrieve result for job {self._job_id}. "
    230             f"Job finished with an error state. "
    231             f"Use error_message() method to get more details."
    232         )
    233 self.refresh()
    234 self._result = Result(
    235     backend_name=self._backend,
    236     backend_version=self._backend.version,
   (...)
    241     status=self._status,
    242 )

C12SimJobError: Unable to retrieve result for job a7fde476-a75c-454f-9837-7bc2cd225c9c. Job finished with an error state. Use error_message() method to get more details.
[9]:
print(c12_job.error_message())
Error: 1007
[ ]: