BioCMAMC-ST
MC::Distributions::ProbabilityLaw Concept Reference

Concept for probability distribution laws. More...

#include <prng_extension.hpp>

Concept definition

template<typename T, typename F, class DeviceType>
FloatingPointType<F> && requires(const T& obj, Kokkos::Random_XorShift1024<DeviceType>& gen) {
{ obj.draw(gen) } -> std::same_as<F>;
{ obj.mean() } -> std::same_as<F>;
{ obj.var() } -> std::same_as<F>;
{ obj.skewness() } -> std::same_as<F>;
}
Definition traits.hpp:20
Concept for probability distribution laws.
Definition prng_extension.hpp:47

Detailed Description

Concept for probability distribution laws.

The ProbabilityLaw concept defines the requirements for a type T to model a probability distribution with floating-point computations. It ensures that the type provides methods for drawing random samples and computing common statistical measures such as mean, variance, and skewness.

Template Parameters
TThe type representing a probability distribution.
FThe floating-point type used for computations.
DeviceTypeThe execution device type for random number generation.

Requirements:

  • T must support sampling using a Kokkos random number generator.
  • T must provide methods to compute statistical properties:
    • mean(): Returns the expected value (mean) of the distribution.
    • var(): Returns the variance of the distribution.
    • skewness(): Returns the skewness, measuring asymmetry.

Example usage:

struct NormalDistribution {
double mean() const { return mu; }
double var() const { return sigma * sigma; }
double skewness() const { return 0.0; }
double draw(Kokkos::Random_XorShift1024<DeviceType>& gen) {return 0.; }
};
static_assert(ProbabilityLaw<NormalDistribution, double, DeviceType>);