Skip to content

Commit 2e41016

Browse files
authored
Merge pull request #1314 from PyAutoLabs/feature/test-mode-fake-sample-count
fix: expand bypass-mode fake samples
2 parents f8bf8e7 + 1f49994 commit 2e41016

2 files changed

Lines changed: 36 additions & 10 deletions

File tree

autofit/non_linear/search/abstract_search.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -917,22 +917,27 @@ def _build_fake_samples(model, parameter_vector, log_likelihood):
917917
"""
918918
Build a minimal list of fake Sample objects for test mode bypass.
919919
920-
Creates two samples: the "best" at the prior median and a second
921-
with slightly perturbed parameters and worse likelihood, so that
922-
SamplesPDF methods like median_pdf work correctly.
920+
Creates a small deterministic sample set: the "best" at the prior
921+
median and additional slightly perturbed parameters with worse
922+
likelihoods. Four samples keeps bypass mode cheap while allowing
923+
downstream structural checks to exercise multi-batch sample handling.
923924
"""
924925
from autofit.non_linear.samples.sample import Sample
925926

926-
perturbed = [
927-
p * 1.001 if p != 0.0 else 0.001 for p in parameter_vector
928-
]
927+
parameter_lists = [parameter_vector]
928+
for scale in (1.001, 0.999, 1.002):
929+
parameter_lists.append(
930+
[p * scale if p != 0.0 else scale - 1.0 for p in parameter_vector]
931+
)
929932

930933
return Sample.from_lists(
931934
model=model,
932-
parameter_lists=[parameter_vector, perturbed],
933-
log_likelihood_list=[log_likelihood, log_likelihood - 1.0],
934-
log_prior_list=[0.0, 0.0],
935-
weight_list=[1.0, 0.5],
935+
parameter_lists=parameter_lists,
936+
log_likelihood_list=[
937+
log_likelihood - offset for offset in range(len(parameter_lists))
938+
],
939+
log_prior_list=[0.0] * len(parameter_lists),
940+
weight_list=[1.0, 0.5, 0.25, 0.125],
936941
)
937942

938943
@abstractmethod

test_autofit/non_linear/search/test_abstract_search.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,27 @@ def test__identifier_fields_differ_across_searches(self):
111111
assert "nwalkers" in emcee.__identifier_fields__
112112
assert "nlive" in dynesty.__identifier_fields__
113113

114+
def test__bypass_fake_samples_support_multi_batch_checks(self):
115+
model = af.Model(af.m.MockClassx2)
116+
parameter_vector = [1.0, 2.0]
117+
118+
sample_list = af.DynestyStatic._build_fake_samples(
119+
model=model,
120+
parameter_vector=parameter_vector,
121+
log_likelihood=-10.0,
122+
)
123+
124+
assert len(sample_list) == 4
125+
assert sample_list[0].parameter_lists_for_model(model) == parameter_vector
126+
assert sample_list[0].log_likelihood == -10.0
127+
assert [sample.log_likelihood for sample in sample_list] == [
128+
-10.0,
129+
-11.0,
130+
-12.0,
131+
-13.0,
132+
]
133+
assert all(sample.weight > 0.0 for sample in sample_list)
134+
114135

115136
class TestUpdaterPathsRefresh:
116137
"""

0 commit comments

Comments
 (0)