Coverage for jaxquantum/devices/superconducting/ideal_qubit.py: 0%
32 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-17 21:51 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-17 21:51 +0000
1"""IdealQubit."""
3from flax import struct
4from jax import config
7from jaxquantum.devices.base.base import Device, BasisTypes, HamiltonianTypes
8from jaxquantum.core.operators import identity, sigmaz, sigmax, sigmay, sigmam, sigmap
10config.update("jax_enable_x64", True)
13@struct.dataclass
14class IdealQubit(Device):
15 """
16 Ideal qubit Device.
17 """
19 @classmethod
20 def param_validation(cls, N, N_pre_diag, params, hamiltonian, basis):
21 """This can be overridden by subclasses."""
22 assert basis == BasisTypes.fock, (
23 "IdealQubit is a two-level system defined in the Fock basis."
24 )
25 assert hamiltonian == HamiltonianTypes.full, (
26 "IdealQubit requires a full Hamiltonian."
27 )
28 assert N == N_pre_diag == 2, "IdealQubit is a two-level system."
29 assert "ω" in params, "IdealQubit requires a frequency parameter 'ω'."
31 def common_ops(self):
32 """Written in the linear basis."""
33 ops = {}
35 assert self.N_pre_diag == 2
36 assert self.N == 2
38 N = self.N_pre_diag
39 ops["id"] = identity(N)
40 ops["sigmaz"] = sigmaz()
41 ops["sigmax"] = sigmax()
42 ops["sigmay"] = sigmay()
43 ops["sigmam"] = sigmam()
44 ops["sigmap"] = sigmap()
46 return ops
48 def get_linear_ω(self):
49 """Get frequency of linear terms."""
50 return self.params["ω"]
52 def get_H_linear(self):
53 """Return linear terms in H."""
54 w = self.get_linear_ω()
55 return (w / 2) * self.linear_ops["sigma_z"]
57 def get_H_full(self):
58 """Return full H in linear basis."""
59 return self.get_H_linear()