Coverage for bilby/core/sampler/fake_sampler.py: 29%

31 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-05-06 04:57 +0000

1import numpy as np 

2 

3from ..result import read_in_result 

4from .base_sampler import Sampler 

5 

6 

7class FakeSampler(Sampler): 

8 """ 

9 A "fake" sampler that evaluates the likelihood at a list of 

10 configurations read from a posterior data file. 

11 

12 See base class for parameters. Added parameters are described below. 

13 

14 Parameters 

15 ========== 

16 sample_file: str 

17 A string pointing to the posterior data file to be loaded. 

18 """ 

19 

20 sampler_name = "fake_sampler" 

21 

22 default_kwargs = dict( 

23 verbose=True, logl_args=None, logl_kwargs=None, print_progress=True 

24 ) 

25 

26 def __init__( 

27 self, 

28 likelihood, 

29 priors, 

30 sample_file, 

31 outdir="outdir", 

32 label="label", 

33 use_ratio=False, 

34 plot=False, 

35 injection_parameters=None, 

36 meta_data=None, 

37 result_class=None, 

38 **kwargs 

39 ): 

40 super(FakeSampler, self).__init__( 

41 likelihood=likelihood, 

42 priors=priors, 

43 outdir=outdir, 

44 label=label, 

45 use_ratio=False, 

46 plot=False, 

47 skip_import_verification=True, 

48 injection_parameters=None, 

49 meta_data=None, 

50 result_class=None, 

51 **kwargs 

52 ) 

53 self._read_parameter_list_from_file(sample_file) 

54 self.result.outdir = outdir 

55 self.result.label = label 

56 

57 def _read_parameter_list_from_file(self, sample_file): 

58 """Read a list of sampling parameters from file. 

59 

60 The sample_file should be in bilby posterior HDF5 format. 

61 """ 

62 self.result = read_in_result(filename=sample_file) 

63 

64 def run_sampler(self): 

65 """Compute the likelihood for the list of parameter space points.""" 

66 self.sampler = "fake_sampler" 

67 

68 # Flushes the output to force a line break 

69 if self.kwargs["verbose"]: 

70 print("") 

71 

72 likelihood_ratios = [] 

73 posterior = self.result.posterior 

74 

75 for i in np.arange(posterior.shape[0]): 

76 sample = posterior.iloc[i] 

77 

78 self.likelihood.parameters = sample.to_dict() 

79 logl = self.likelihood.log_likelihood_ratio() 

80 sample.log_likelihood = logl 

81 likelihood_ratios.append(logl) 

82 

83 if self.kwargs["verbose"]: 

84 print( 

85 self.likelihood.parameters["log_likelihood"], 

86 likelihood_ratios[-1], 

87 self.likelihood.parameters["log_likelihood"] 

88 - likelihood_ratios[-1], 

89 ) 

90 

91 self.result.log_likelihood_evaluations = np.array(likelihood_ratios) 

92 

93 self.result.log_evidence = np.nan 

94 self.result.log_evidence_err = np.nan 

95 

96 return self.result