State

The eryn.state.State carries the information around for all walkers at a given step. The individual branches are carried in eryn.state.Branch class objects. A utility provided for state objects is the eryn.state.BranchSupplemental object. This object can carry information around the sampler while being indexed and moved around just like other sampler information. See the tutorial for more information.

class eryn.state.State(coords, inds=None, branch_supplemental=None, supplemental=None, log_like=None, log_prior=None, betas=None, blobs=None, random_state=None, copy=False)

Bases: object

The state of the ensemble during an MCMC run

Parameters:
  • coords (double ndarray[ntemps, nwalkers, nleaves_max, ndim], dict, or State) – The current positions of the walkers in the parameter space. If dict, need to use branch_names for the keys.

  • inds (bool ndarray[ntemps, nwalkers, nleaves_max] or dict, optional) – The information on which leaves are used and which are not used. A value of True means the specific leaf was used in this step. If dict, need to use branch_names for the keys. Input should be None if a complete State object is input for coords. (default: None)

  • branch_supplemental (object) – BranchSupplemental object specific to this branch. (default: None)

  • log_like (ndarray[ntemps, nwalkers], optional) – Log likelihoods for the walkers at positions given by coords. Input should be None if a complete State object is input for coords. (default: None)

  • log_prior (ndarray[ntemps, nwalkers], optional) – Log priors for the walkers at positions given by coords. Input should be None if a complete State object is input for coords. (default: None)

  • betas (ndarray[ntemps], optional) – Temperatures in the sampler at the current step. Input should be None if a complete State object is input for coords. (default: None)

  • blobs (ndarray[ntemps, nwalkers, nblobs], Optional) – The metadata “blobs” associated with the current position. The value is only returned if lnpostfn returns blobs too. Input should be None if a complete State object is input for coords. (default: None)

  • random_state (Optional) – The current state of the random number generator. Input should be None if a complete State object is input for coords. (default: None)

  • copy (bool, optional) – If True, copy the the arrays in the former State obhect.

Raises:

ValueError – Dimensions of inputs or input types are incorrect.

property branches_inds

Get the inds from all branch objects returned as a dictionary with branch_names as keys.

property branches_coords

Get the coords from all branch objects returned as a dictionary with branch_names as keys.

property branches_supplemental

Get the branch.supplemental from all branch objects returned as a dictionary with branch_names as keys.

property branch_names

Get the branch names in this state.

get_log_posterior(temper: bool = False)

Get the posterior probability

Parameters:

temper (bool, optional) – If True, apply tempering to the posterior computation.

Returns:

Log of the posterior probability.

Return type:

np.ndarray[ntemps, nwalkers]

class eryn.state.Branch(coords, inds=None, branch_supplemental=None)

Bases: object

Special container for one branch (model)

This class is a key component of Eryn. It this type of object that allows for different models to be considered simultaneously within an MCMC run.

Parameters:
  • coords (4D double np.ndarray[ntemps, nwalkers, nleaves_max, ndim]) – The coordinates in parameter space of all walkers.

  • inds (3D bool np.ndarray[ntemps, nwalkers, nleaves_max], optional) – The information on which leaves are used and which are not used. A value of True means the specific leaf was used in this step. Parameters from unused walkers are still kept. When they are output to the backend, the backend saves a special number (default: np.nan) for all coords related to unused leaves at that step. If None, inds will fill with all True values. (default: None)

  • branch_supplemental (object) – BranchSupplemental object specific to this branch. (default: None)

Raises:

ValueErrorinds has wrong shape or number of leaves is less than zero.

property nleaves

Number of leaves for each walker

class eryn.state.BranchSupplemental(obj_info: dict, base_shape: tuple, copy: bool = False)

Bases: object

Special object to carry information through sampler.

The BranchSupplemental object is a holder of information that is passed through the sampler. It can also be indexed similar to other quantities carried throughout the sampler.

This indexing is based on the base_shape. You can store many objects that have the same base shape and then index across all of them. For example, if you want to store individual leaf information, the base shape will be (ntemps, nwalkers, nleaves_max). If you want to store a 2D array per individual leaf, the overall shape will be (ntemps, nwalkers, nleaves_max, dim2_extra, dim1_extra). Another type of information is stored in a class object (for example). Using numpy object arrays, ntemps * nwalkers * nleaves_max number of class objects can be stored in the array. Then, using special indexing functions, information can be updated/accessed across all objects stored simultaneously. If you index this class, it will give you back a dictionary with all objects stored indexed for each leaf. So if you index (0, 0, 0) in our running example, you will get back a dictionary with one 2D array and one class object from the numpy object array.

All of these objects are stored in self.holder.

Parameters:
  • obj_info (dict) – Initial information for storage. Keys are the names to be stored under and values are arrays. These arrays should have a base shape that is equivalent to base_shape, meaning array.shape[:len(base_shape)] == self.base_shape. The dimensions beyond the base shape can be anything.

  • base_shape (tuple) – Base shape for indexing. Objects stored in the supplemental object will have a shape that at minimum is equivalent to base_shape.

  • copy (bool, optional) – If True, copy whatever information is given in before it is stored. if False, store directly the input information. (default: False)

holder

All of the objects stored for this supplemental object.

Type:

dict

add_objects(obj_info: dict, copy=False)

Add objects to the holder.

Parameters:
  • obj_info (dict) – Information for storage. Keys are the names to be stored under and values are arrays. These arrays should have a base shape that is equivalent to base_shape, meaning array.shape[:len(base_shape)] == self.base_shape. The dimensions beyond the base shape can be anything.

  • copy (bool, optional) – If True, copy whatever information is given in before it is stored. if False, store directly the input information. (default: False)

Raises:

ValueError – Shape matching issues.

remove_objects(names)

Remove objects from the holder.

Parameters:

names (str or list of str) – Strings associated with information to delete. Please note it does not return the information.

Raises:

ValueError – Input issues.

property contained_objects

The list of keys of contained objects.

take_along_axis(indices, axis: int, skip_names=[])

Take information from contained arrays along an axis.

See `numpy.take_along_axis <https://numpy.org/doc/stable/reference/generated/numpy.take_along_axis.html>`_.

Parameters:
  • indices (xp.ndarray) – Indices to take along each 1d slice of arr. This must match the dimension of self.base_shape, but other dimensions only need to broadcast against self.base_shape.

  • axis (int) – The axis to take 1d slices along.

  • skip_names (list of str, optional) – By default, this function returns the results for all stored objects. This list gives the strings of objects to leave behind and not return.

Returns:

Keys are names of stored objects and values are the proper array slices.

Return type:

dict

put_along_axis(indices, values_in: dict, axis: int)

Put information information into contained arrays along an axis.

See `numpy.put_along_axis <https://numpy.org/doc/stable/reference/generated/numpy.put_along_axis.html>`_.

Please note this function is not implemented in cupy, so this is a custom implementation for both cupy and numpy.

Parameters:
  • indices (xp.ndarray) – Indices to put values along each 1d slice of arr. This must match

  • self.base_shape (the dimension of)

  • against (but other dimensions only need to broadcast)

  • self.base_shape.

  • axis (int) – The axis to put 1d slices along.

  • values_in (dict) – Keys are the objects contained to update. Values are the arrays of these objects with shape and dimension that can broadcast to match that of indices.

property flat

Get flattened arrays from the stored objects.

Here “flat” is in relation to self.base_shape. Beyond self.base_shape, the shape is mainted.