Skip to content

Version 0.4.0 released

Latest

Choose a tag to compare

@tiago939 tiago939 released this 28 Sep 14:24

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.