Samplers
The samplers subpackage provides configuration sampling strategies.
Base Classes
- class qvartools.samplers.sampler.SamplerResult(configs, counts=<factory>, metadata=<factory>, log_probs=None, wall_time=0.0)[source]
Bases:
objectImmutable container for sampler output.
- Parameters:
configs (
torch.Tensor) – Sampled configurations, shape(n_samples, n_sites). Each row is a computational-basis state with entries in{0, 1}.counts (
dict) – Mapping from bitstring representation to occurrence count. Keys are strings of'0'and'1'characters.metadata (
dict) – Additional sampler-specific information (e.g. unique count, sampling time, flow parameters).log_probs (
torch.TensororNone, optional) – Log-probabilities of the sampled configurations, shape(n_samples,).Nonewhen the sampler does not provide probabilities.wall_time (
float, optional) – Wall-clock time in seconds spent generating the samples (default0.0).
- configs
- Type:
- log_probs
- Type:
torch.TensororNone
Examples
>>> result = SamplerResult(configs=torch.zeros(10, 4, dtype=torch.int64)) >>> result.configs.shape torch.Size([10, 4])
- class qvartools.samplers.sampler.Sampler[source]
Bases:
ABCAbstract base class for all configuration samplers.
Every subclass must implement
sample(), which draws a set of computational-basis configurations and returns aSamplerResult.
Classical Samplers
- class qvartools.samplers.classical.nf_sampler.NFSampler(flow, nqs=None, hamiltonian=None, device='cpu')[source]
Bases:
SamplerNormalizing-flow-based configuration sampler.
Wraps a trained normalizing flow to generate discrete binary configurations. Optionally uses an NQS for importance weighting or a Hamiltonian for local-energy estimation.
- Parameters:
flow (
nn.Module) – A trained normalizing-flow model. Must implementsample(batch_size)returning(all_configs, unique_configs).nqs (
nn.ModuleorNone, optional) – A neural quantum state for importance weighting. If provided, configurations are weighted by|psi(x)|^2.hamiltonian (
HamiltonianorNone, optional) – The Hamiltonian for energy-based metadata. If provided, the sampler computes local energy statistics.device (
str, optional) – Torch device for sampling (default"cpu").
- flow
The flow model.
- Type:
nn.Module
- device
Active device.
- Type:
Examples
>>> sampler = NFSampler(flow=trained_flow) >>> result = sampler.sample(1000) >>> result.configs.shape torch.Size([1000, 10])
- sample(n_samples)[source]
Draw configuration samples from the trained flow.
- Parameters:
n_samples (
int) – Number of samples to draw.- Returns:
Sampled configurations with bitstring counts and metadata.
- Return type:
SamplerResult- Raises:
ValueError – If
n_samples < 1.
Quantum Samplers
- class qvartools.samplers.quantum.trotter_sampler.TrotterSampler(hamiltonian, n_trotter_steps=10, time_step=0.1, initial_state=None)[source]
Bases:
SamplerTrotterized time-evolution sampler.
Evolves an initial state under the Hamiltonian via \(|\psi(t)\rangle = e^{-iHt} |\psi_0\rangle\) and samples computational-basis configurations from the Born-rule distribution \(p(x) = |\langle x | \psi(t) \rangle|^2\).
Uses
scipy.sparse.linalg.expm_multiply()for the matrix exponential, which is efficient for sparse Hamiltonians.- Parameters:
hamiltonian (
Hamiltonian) – The system Hamiltonian.n_trotter_steps (
int, optional) – Number of Trotter steps in the time evolution (default10).time_step (
float, optional) – Time step per Trotter step (default0.1).initial_state (
np.ndarrayorNone, optional) – Initial state vector. IfNone, uses the first computational- basis state (index 0).
- hamiltonian
The Hamiltonian.
- Type:
Hamiltonian
Examples
>>> sampler = TrotterSampler(hamiltonian, n_trotter_steps=5) >>> result = sampler.sample(1000) >>> result.configs.shape[0] 1000
- sample(n_samples)[source]
Sample configurations from the evolved state.
- Parameters:
n_samples (
int) – Number of configuration samples to draw.- Returns:
Sampled configurations with bitstring counts and metadata.
- Return type:
SamplerResult- Raises:
ValueError – If
n_samples < 1.RuntimeError – If the evolved state has near-zero norm.