coniii.experimental package

Warning

These modules are work in progress and are not imported by import coniii. Their classes currently raise NotImplementedError on construction.

Experimental / work-in-progress samplers.

This module collects three samplers whose implementations have not been validated end-to-end. Constructing any of them currently raises NotImplementedError:

  • SWIsing — Swendsen-Wang cluster sampler for the Ising model (+/-1 basis).

  • HamiltonianMC — Hamiltonian Monte Carlo sampler whose default leapfrog helper is hardcoded for Heisenberg energies.

  • Heisenberg3DSampler — Heisenberg-3D MCMC sampler with spherical-vector moves.

Module-level helpers (calc_e, grad_e, grad_e_theta, cross, cross_, jit_sample, jit_sample_nearby_vector, pairwise_prod, sample_bonds, iter_cluster, spec_cluster, check_e_logp) are kept here because they are only consumed by the experimental classes above.

coniii.experimental.samplers.calc_e(theta, x)[source]

Heisenberg model energy.

Parameters:
  • theta (ndarray) – List of couplings Jij.

  • x (ndarray) – List of angles (theta_0, phi_0, theta_1, phi_1, …).

coniii.experimental.samplers.grad_e(theta, x)[source]

Derivatives wrt the angles of the spins.

coniii.experimental.samplers.grad_e_theta(theta, x)[source]

Derivatives wrt the couplings theta.

class coniii.experimental.samplers.SWIsing(n, theta, calc_e, nCpus=None, rng=None)[source]

Bases: Sampler

generate_sample_parallel(n_samples, n_iters, initial_state=None, n_cpus=None)[source]
Parameters:
  • n_samples

  • n_iters

  • initial_state (ndarray,None)

generate_sample(n_samples, n_iters, initial_state=None)[source]
Parameters:
  • n_samples

  • n_iters

  • initial_state (ndarray,None)

one_step(state)[source]
get_clusters(state)[source]

Get a random sample of clusters.

randomly_flip_clusters(state, clusters)[source]
print_cluster_size(n_iters)[source]
coniii.experimental.samplers.pairwise_prod(state)[source]
coniii.experimental.samplers.sample_bonds(p, r, state, J)[source]
Parameters:
  • p (ndarray) – Probability of bond formation.

  • r (ndarray) – Random numbers.

  • state

  • J

coniii.experimental.samplers.iter_cluster(adj)[source]

Cycle through all spins to get clusters.

coniii.experimental.samplers.spec_cluster(L, exact=True)[source]
Parameters:

L (ndarray) – Graph Laplacian

class coniii.experimental.samplers.HamiltonianMC(n, theta, calc_e, random_sample, grad_e=None, dt=0.01, leapfrogN=20, nCpus=0)[source]

Bases: Sampler

sample(x0, nBurn, saveHistory=False)[source]

Get a single sample by MC sampling from this Hamiltonian. Slow method

generate_sample(nSamples, nBurn=100, fast=True, x0=None)[source]

Generate nSamples from this Hamiltonian starting from random initial conditions from each sample.

coniii.experimental.samplers.jit_sample(theta, x0, nBurn, dt, leapfrogN, randNormal, randUnif)[source]

Get a single sample by MC sampling from this Hamiltonian.

Parameters:
  • theta (ndarray) – Parameters

  • x0 (ndarray) – Sample

  • nBurn (int)

  • dt (float)

  • leapfrogN (int)

  • randNormal (ndarray) – nBurn x ndim

  • randUnif (ndarray) – nBurn

class coniii.experimental.samplers.Heisenberg3DSampler(J, calc_e, random_sample)[source]

Bases: Sampler

Simple MC Sampling from Heisenberg model with a lot of helpful functions.

generate_sample()[source]
equilibrate_samples()[source]
sample_metropolis()[source]
sample_energy_min()[source]
generate_sample(nSamples, n_iters=100, **kwargs)[source]
Parameters:

sample_size (int)

equilibrate_samples(samples, n_iters, method='mc', nCpus=0)[source]
sample_metropolis(oldState, E0)[source]
Parameters:
  • s (ndarray) – State to perturb randomly.

  • energy (float) – Energy of configuration.

sample_nearby_vector(v, nSamples=1, otheta=None, ophi=None, sigma=0.1)[source]

Sample random vector that is nearby. It is important how you choose the width sigma. NOTE: code might be simplified by using arctan2 instead of arctan

Parameters:
  • v (ndarray) – xyz vector about which to sample random vectors

  • nSamples (int,1) – number of random samples

  • otheta (float,None) – polar angle for v

  • ophi (float,None) – azimuthal angle for v

  • sigma (float,.1) – width of Gaussian about v

sample_nearby_sample(X, **kwargs)[source]

Randomly move given state around for new metropolis sample.

grad_E(X)[source]

Gradient wrt theta and phi.

Parameters:

X (ndarray) – with dims (nSpins,2) with angles theta and phi

sample_energy_min(nFixed=0, rng=RandomState(MT19937) at 0x74D5C0B86A40, initialState=None, method='powell', **kwargs)[source]

Find local energy minimum given state in angular form.

classmethod to_dict(data, names)[source]

Arrange 3d samples into a dict of n x 3 arrays.

coniii.experimental.samplers.cross(vec1, vec2)[source]

Cross product of two 3D vectors.

coniii.experimental.samplers.cross_(vec1, vec2, result)[source]

Cross product of two 3D vectors (in-place).

coniii.experimental.samplers.jit_sample_nearby_vector(rseed, v, nSamples, otheta, ophi, sigma)[source]
coniii.experimental.samplers.check_e_logp(sample, calc_e)[source]

Boltzmann-type model with discrete state space should have E proportional to -logP. Calculate these for comparison.

Entropy-related utilities.

UNDER DEVELOPMENT — this module is a placeholder. cross_entropy() is a stub that returns None.

coniii.experimental.entropy.cross_entropy()[source]