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

1import sys 

2import numpy as np 

3 

4 

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) 

15 

16 def gen(self, num_samples): 

17 noise = self.noise.gen(num_samples) 

18 return noise 

19 

20 

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 

28 

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 

33 

34 

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 

45 

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 

54 

55 

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 

62 

63 def gen(self, num_samples): 

64 noise = self.rng.binomial(size=num_samples, p=self.p, n=1) 

65 return noise