# -*- coding: utf-8 -*-

from __future__ import division, print_function

__all__ = ["State"]

import numpy as np


class State(object):

    __slots__ = "coords", "log_prob", "blobs", "random_state"

    def __init__(self, coords, log_prob=None, blobs=None, random_state=None):
        if hasattr(coords, "coords"):
            self.coords = coords.coords
            self.log_prob = coords.log_prob
            self.blobs = coords.blobs
            self.random_state = coords.random_state
            return

        self.coords = np.atleast_2d(coords)
        self.log_prob = log_prob
        self.blobs = blobs
        self.random_state = random_state

    def __repr__(self):
        return "State({0}, log_prob={1}, blobs={2}, random_state={3})".format(
            self.coords, self.log_prob, self.blobs, self.random_state
        )

    def __iter__(self):
        if self.blobs is None:
            return iter((self.coords, self.log_prob, self.random_state))
        return iter((self.coords, self.log_prob, self.random_state,
                     self.blobs))

@@ -129,16 +129,577 @@
 object):
+%0A    %22%22%22An ensemble MCMC sampler%0A%0A    Args:%0A        coords (ndarray%5Bnwalkers, ndim%5D): The current positions of the walkers%0A            in the parameter space.%0A        log_prob (ndarray%5Bnwalkers, ndim%5D, Optional): Log posterior%0A            probabilities for the  walkers at positions given by %60%60coords%60%60.%0A        blobs (Optional): The metadata %E2%80%9Cblobs%E2%80%9D associated with the current%0A            position. The value is only returned if lnpostfn returns blobs too.%0A        random_state (Optional): The current state of the random number%0A            generator.%0A    %22%22%22
 %0A%0A    __

add State docstring