Repository navigation
QuForge now supports noisy quantum circuit simulation via Monte Carlo trajectories, generalized to arbitrary qudit dimension.
What's new
Noise channels for qudits
- Depolarizing channel using Heisenberg–Weyl operators, generalized to any dimension d
- Pure dephasing channel
- Amplitude damping (cascaded decay) for d-level systems
- Thermal relaxation (T1/T2), combining amplitude damping and dephasing
- Custom channels from user-supplied Kraus operators
- Channel composition
Example
import quforge.quforge as qf
noise = qf.NoiseModel()
noise.add_all_qudit_error('RX', qf.depolarizing(0.01, d=3))
noise.add_all_qudit_error('CNOT', qf.depolarizing(0.02, d=3, num_qudits=2))
circ = qf.Circuit(dim=3, wires=4, noise_model=noise, n_trajectories=1024)
circ.RX(index=[0])
circ.CNOT(index=[0, 1])
state = qf.State('0-0-0-0', dim=3)
psi_batch = circ(state) # (1024, 81, 1)
hist = qf.noisy_measure(psi_batch, dim_list=[3]*4)
exp_val = qf.trajectory_expectation(psi_batch, observable)Key design decisions
- Trajectories over density matrices. Memory scales as d^n per trajectory instead of d^2n for a density matrix. GPU batching across trajectories is natural with PyTorch.
- Differentiable through unitaries. Gate gradients flow through each trajectory via standard backpropagation, enabling noise-aware variational optimization (VQE/QAOA) without any additional machinery.
- Dimension-agnostic. Every channel, the noise model, and the trajectory engine work for any qudit dimension.