Coverage for src/causalspyne/noise_idiosyncratic.py: 80%
41 statements
« prev ^ index » next coverage.py v7.11.0, created at 2026-05-15 16:30 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2026-05-15 16:30 +0000
1import sys
2import numpy as np
5class Idiosyncratic:
6 def __init__(self, class_name, rng, dict_params=None):
7 """ """
8 dict_params = dict_params or {}
9 class_gen = getattr(sys.modules[__name__], class_name)
10 if bool(dict_params):
11 self.noise = class_gen(rng=rng,
12 dict_params=dict_params)
13 else:
14 self.noise = class_gen(rng=rng)
16 def gen(self, num_samples):
17 noise = self.noise.gen(num_samples)
18 return noise
21class Gaussian:
22 def __init__(self, rng, dict_params=None):
23 if dict_params is None:
24 dict_params = {"std": 1.0}
25 self.mean = 0.0
26 self.noise_std = dict_params["std"]
27 self.rng = rng
29 def gen(self, num_samples):
30 noise = self.rng.normal(loc=self.mean, scale=self.noise_std,
31 size=num_samples)
32 return noise
35class Gamma:
36 def __init__(self, rng, dict_params=None):
37 if dict_params is None:
38 dict_params = {"shape": 1, "scale": 2.0}
39 # shape: The shape parameter of the gamma distribution (k > 0)
40 # scale: The scale parameter of the gamma distribution
41 # (theta > 0, default is 1.0)
42 self.par_shape = dict_params["shape"]
43 self.par_scale = dict_params["scale"]
44 self.rng = rng
46 def gen(self, num_samples):
47 """
48 size: The number of samples to generate (optional)
49 """
50 noise = self.rng.gamma(shape=self.par_shape,
51 scale=self.par_scale,
52 size=num_samples)
53 return noise
56class Bernoulli:
57 def __init__(self, rng, dict_params=None):
58 if dict_params is None:
59 dict_params = {"p": 0.5}
60 self.p = dict_params["p"]
61 self.rng = rng
63 def gen(self, num_samples):
64 noise = self.rng.binomial(size=num_samples, p=self.p, n=1)
65 return noise