Source code for quchip.extensions.spaces

"""Reference device authored on a custom local operator space."""

from __future__ import annotations

from typing import Any, Literal

import jax.numpy as jnp

from quchip.declarative.models import DeviceModel
from quchip.declarative.ops import LocalOps
from quchip.declarative.parameters import UNBOUND, Scalar, parameter, setting
from quchip.devices.spaces import CustomSpace


def _spin_operators() -> dict[str, Any]:
    identity = jnp.eye(2, dtype=jnp.complex128)
    sigma_x = jnp.asarray([[0.0, 1.0], [1.0, 0.0]], dtype=jnp.complex128)
    sigma_y = jnp.asarray([[0.0, -1j], [1j, 0.0]], dtype=jnp.complex128)
    sigma_z = jnp.asarray([[1.0, 0.0], [0.0, -1.0]], dtype=jnp.complex128)
    sigma_plus = jnp.asarray([[0.0, 0.0], [1.0, 0.0]], dtype=jnp.complex128)
    sigma_minus = sigma_plus.conj().T
    return {
        "I": identity,
        "a": sigma_minus,
        "adag": sigma_plus,
        "n": sigma_plus @ sigma_minus,
        "charge": sigma_x,
        "sigma_x": sigma_x,
        "sigma_y": sigma_y,
        "sigma_z": sigma_z,
        "sigma_plus": sigma_plus,
        "sigma_minus": sigma_minus,
    }


[docs] class SpinHalf(DeviceModel): """Two-level spin with a user-defined local operator vocabulary.""" _type_prefix = "spin_half" _default_levels = 2 computational = True approximation = "Exact two-level spin Hamiltonian in a fixed custom basis." basis: Literal["native", "eigen"] | None = setting(default=None, kw_only=True) freq: Scalar = parameter(default=UNBOUND, positive=True, unit="GHz", symbol=r"\omega")
[docs] def local_space(self) -> CustomSpace: return CustomSpace(2, _spin_operators())
[docs] def validate(self) -> None: if self.levels != 2: raise ValueError( f"SpinHalf has a fixed two-level local space; levels must be 2, got {self.levels}." )
[docs] def local_hamiltonian(self, op: LocalOps, p: Any) -> Any: return -0.5 * p.freq * op.sigma_z
[docs] def charge_coupling_operator(self) -> Any: op = LocalOps(label=self.label, space=self.local_space(), device=self) return op["charge"]