Source code for romtools.workflows.sampling_methods

# pylint: disable=invalid-name

from typing import Protocol
import numpy as np
from scipy.stats import qmc


[docs] class Sampler(Protocol): ''' Generate UIID samples Returns np.ndarray of shape (number_of_samples, dimensionality) ''' def __call__(self, number_of_samples: int, dimensionality: int = 1, seed=None) -> np.ndarray: pass
########################################## # Sampling Methods ##########################################
[docs] def MonteCarloSampler(number_of_samples: int, dimensionality: int = 1, seed=None) -> np.ndarray: ''' Generate UIID Monte Carlo samples Conforms to the Sampler protocol ''' if seed is not None: np.random.seed(seed) return np.random.uniform(size=(number_of_samples, dimensionality))
[docs] def LatinHypercubeSampler(number_of_samples: int, dimensionality: int = 1, seed=None) -> np.ndarray: ''' Generate UIID LHS samples Conforms to the Sampler protocol ''' sampler = qmc.LatinHypercube(dimensionality, seed=seed) return sampler.random(n=number_of_samples)