Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/samples summary in result #261

Merged
merged 9 commits into from
Apr 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions autolens/imaging/model/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,10 @@ def visualize(

def make_result(
self,
samples: af.SamplesPDF,
search_internal = None
samples_summary: af.SamplesSummary,
paths: af.AbstractPaths,
samples: Optional[af.SamplesPDF] = None,
search_internal: Optional[object] = None,
) -> ResultImaging:
"""
After the non-linear search is complete create its `Result`, which includes:
Expand All @@ -311,7 +313,7 @@ def make_result(
ResultImaging
The result of fitting the model to the imaging dataset, via a non-linear search.
"""
return ResultImaging(samples=samples, analysis=self, search_internal=search_internal)
return ResultImaging(samples_summary=samples_summary, paths=paths, samples=samples, search_internal=search_internal, analysis=self)

def save_attributes(self, paths: af.DirectoryPaths):
"""
Expand Down
14 changes: 12 additions & 2 deletions autolens/interferometer/model/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,13 @@ def visualize(self, paths: af.DirectoryPaths, instance, during_analysis):
except IndexError:
pass

def make_result(self, samples: af.SamplesPDF, search_internal=None):
def make_result(
self,
samples_summary: af.SamplesSummary,
paths: af.AbstractPaths,
samples: Optional[af.SamplesPDF] = None,
search_internal: Optional[object] = None,
):
"""
After the non-linear search is complete create its `Result`, which includes:

Expand All @@ -355,7 +361,11 @@ def make_result(self, samples: af.SamplesPDF, search_internal=None):
The result of fitting the model to the imaging dataset, via a non-linear search.
"""
return ResultInterferometer(
samples=samples, analysis=self, search_internal=search_internal
samples_summary=samples_summary,
paths=paths,
samples=samples,
analysis=self,
search_internal=search_internal
)

def save_attributes(self, paths: af.DirectoryPaths):
Expand Down
4 changes: 2 additions & 2 deletions autolens/lens/to_inversion.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def lp_linear_func_list_galaxy_dict(
)

for plane_index, galaxies in enumerate(self.planes):
plane_to_inversion = ag.GalaxiesToInversion(
galaxies_to_inversion = ag.GalaxiesToInversion(
galaxies=galaxies,
sky=self.sky,
dataset=self.dataset,
Expand All @@ -82,7 +82,7 @@ def lp_linear_func_list_galaxy_dict(
)

lp_linear_galaxy_dict_of_plane = (
plane_to_inversion.lp_linear_func_list_galaxy_dict
galaxies_to_inversion.lp_linear_func_list_galaxy_dict
)

lp_linear_galaxy_dict_list = {
Expand Down
12 changes: 9 additions & 3 deletions autolens/point/model/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,17 @@ def visualize(self, paths, instance, during_analysis):

def make_result(
self,
samples: af.SamplesPDF,
search_internal=None,
samples_summary: af.SamplesSummary,
paths: af.AbstractPaths,
samples: Optional[af.SamplesPDF] = None,
search_internal: Optional[object] = None,
):
return ResultPoint(
samples=samples, analysis=self, search_internal=search_internal
samples_summary=samples_summary,
paths=paths,
samples=samples,
search_internal=search_internal,
analysis=self,
)

def save_attributes(self, paths: af.DirectoryPaths):
Expand Down
4 changes: 2 additions & 2 deletions autolens/point/point_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,8 +232,8 @@ def grid_within_distance_of_source_plane_centre(
)

grid_within_distance_of_centre = grid_within_distance(
distances_1d=source_plane_distances,
grid_slim=grid,
distances_1d=np.asarray(source_plane_distances),
grid_slim=np.asarray(grid),
within_distance=distance,
)

Expand Down
13 changes: 10 additions & 3 deletions autolens/quantity/model/analysis.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
from typing import Optional

import autofit as af
import autogalaxy as ag
Expand Down Expand Up @@ -126,8 +127,10 @@ def visualize(

def make_result(
self,
samples: af.SamplesPDF,
search_internal=None,
samples_summary: af.SamplesSummary,
paths: af.AbstractPaths,
samples: Optional[af.SamplesPDF] = None,
search_internal: Optional[object] = None,
) -> ResultQuantity:
"""
After the non-linear search is complete create its `ResultQuantity`, which includes:
Expand Down Expand Up @@ -157,5 +160,9 @@ def make_result(
The result of fitting the model to the imaging dataset, via a non-linear search.
"""
return ResultQuantity(
samples=samples, analysis=self, search_internal=search_internal
samples_summary=samples_summary,
paths=paths,
samples=samples,
search_internal=search_internal,
analysis=self
)
8 changes: 3 additions & 5 deletions docs/api/plot.rst
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,9 @@ by **PyAutoGalaxy**.
:template: custom-class-template.rst
:recursive:

DynestyPlotter
UltraNestPlotter
EmceePlotter
ZeusPlotter
PySwarmsPlotter
NestPlotter
MCMCPlotter
OptimizePlotter

Plot Customization [aplt]
-------------------------
Expand Down
4 changes: 2 additions & 2 deletions docs/overview/overview_3_modeling.rst
Original file line number Diff line number Diff line change
Expand Up @@ -523,8 +523,8 @@ mass its name ``mass`` defined when making the ``Model`` above is used).

.. code-block:: python

search_plotter = aplt.DynestyPlotter(samples=result.samples)
search_plotter.corner()
search_plotter = aplt.NestPlotter(samples=result.samples)
search_plotter.corner_cornerpy()

Here is an example of how a PDF estimated for a lens model appears:

Expand Down
5 changes: 0 additions & 5 deletions test_autolens/aggregator/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,6 @@ def make_model():

@pytest.fixture(name="samples")
def make_samples(model):
galaxy_0 = al.Galaxy(redshift=0.5, light=al.lp.Sersic(centre=(0.0, 1.0)))
galaxy_1 = al.Galaxy(redshift=1.0, light=al.lp.Sersic())

tracer = al.Tracer(galaxies=[galaxy_0, galaxy_1])

parameters = [model.prior_count * [1.0], model.prior_count * [10.0]]

Expand All @@ -84,6 +80,5 @@ def make_samples(model):
return al.m.MockSamples(
model=model,
sample_list=sample_list,
max_log_likelihood_instance=tracer,
prior_means=[1.0] * model.prior_count,
)
72 changes: 33 additions & 39 deletions test_autolens/analysis/test_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,7 @@ def test__max_log_likelihood_tracer(
)
)

samples = al.m.MockSamples(
model=model,
max_log_likelihood_instance=tracer_x2_plane_7x7,
prior_means=[1.0] * model.prior_count,
)

search = al.m.MockSearch(name="test_search_2", samples=samples)
search = al.m.MockSearch(name="test_search_2")

result = search.fit(model=model, analysis=analysis_imaging_7x7)

Expand Down Expand Up @@ -58,9 +52,9 @@ def test__max_log_likelihood_positions_threshold(masked_imaging_7x7):
]
)

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = res.Result(samples=samples, analysis=analysis)
result = res.Result(samples_summary=samples_summary, analysis=analysis)

assert result.max_log_likelihood_positions_threshold == pytest.approx(
0.8309561230, 1.0e-4
Expand All @@ -76,9 +70,9 @@ def test__source_plane_light_profile_centre(analysis_imaging_7x7):

tracer = al.Tracer(galaxies=[lens, source])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = res.Result(samples=samples, analysis=analysis_imaging_7x7)
result = res.Result(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.source_plane_light_profile_centre.in_list == [(1.0, 2.0)]

Expand All @@ -94,9 +88,9 @@ def test__source_plane_light_profile_centre(analysis_imaging_7x7):

tracer = al.Tracer(galaxies=[lens, source_0, source_1])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = res.Result(samples=samples, analysis=analysis_imaging_7x7)
result = res.Result(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.source_plane_light_profile_centre.in_list == [(1.0, 2.0)]

Expand All @@ -110,17 +104,17 @@ def test__source_plane_light_profile_centre(analysis_imaging_7x7):

tracer = al.Tracer(galaxies=[lens, source_0, source_1])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = res.Result(samples=samples, analysis=analysis_imaging_7x7)
result = res.Result(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.source_plane_light_profile_centre.in_list == [(5.0, 6.0)]

tracer = al.Tracer(galaxies=[al.Galaxy(redshift=0.5)])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = res.Result(samples=samples, analysis=analysis_imaging_7x7)
result = res.Result(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.source_plane_light_profile_centre == None

Expand All @@ -137,9 +131,9 @@ def test__source_plane_inversion_centre(analysis_imaging_7x7):

tracer = al.Tracer(galaxies=[lens, source])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = ResultImaging(samples=samples, analysis=analysis_imaging_7x7)
result = ResultImaging(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert (
result.source_plane_inversion_centre.in_list[0]
Expand All @@ -155,9 +149,9 @@ def test__source_plane_inversion_centre(analysis_imaging_7x7):

tracer = al.Tracer(galaxies=[lens, source])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = ResultImaging(samples=samples, analysis=analysis_imaging_7x7)
result = ResultImaging(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.source_plane_inversion_centre == None

Expand All @@ -166,9 +160,9 @@ def test__source_plane_inversion_centre(analysis_imaging_7x7):

tracer = al.Tracer(galaxies=[lens, source])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = ResultImaging(samples=samples, analysis=analysis_imaging_7x7)
result = ResultImaging(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.source_plane_inversion_centre == None

Expand All @@ -189,9 +183,9 @@ def test__source_plane_centre(analysis_imaging_7x7):

tracer = al.Tracer(galaxies=[lens, source])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = ResultImaging(samples=samples, analysis=analysis_imaging_7x7)
result = ResultImaging(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.source_plane_centre.in_list[0] == pytest.approx(
(-0.916666, -0.916666), 1.0e-4
Expand Down Expand Up @@ -220,9 +214,9 @@ def test__image_plane_multiple_image_positions(analysis_imaging_7x7):

tracer = al.Tracer(galaxies=[lens, source])

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = ResultImaging(samples=samples, analysis=analysis_imaging_7x7)
result = ResultImaging(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

multiple_images = result.image_plane_multiple_image_positions

Expand All @@ -243,9 +237,9 @@ def test__image_plane_multiple_image_positions(analysis_imaging_7x7):
]
)

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = res.Result(samples=samples, analysis=analysis_imaging_7x7)
result = res.Result(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.image_plane_multiple_image_positions.in_list[0][0] == pytest.approx(
1.0004, 1.0e-2
Expand All @@ -268,9 +262,9 @@ def test__positions_threshold_from(analysis_imaging_7x7):
]
)

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = res.Result(samples=samples, analysis=analysis_imaging_7x7)
result = res.Result(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

assert result.positions_threshold_from() == pytest.approx(0.000973519, 1.0e-4)
assert result.positions_threshold_from(factor=5.0) == pytest.approx(
Expand All @@ -297,9 +291,9 @@ def test__positions_likelihood_from(analysis_imaging_7x7):
]
)

samples = al.m.MockSamples(max_log_likelihood_instance=tracer)
samples_summary = al.m.MockSamplesSummary(max_log_likelihood_instance=tracer)

result = res.Result(samples=samples, analysis=analysis_imaging_7x7)
result = res.Result(samples_summary=samples_summary, analysis=analysis_imaging_7x7)

positions_likelihood = result.positions_likelihood_from(
factor=0.1, minimum_threshold=0.2
Expand All @@ -317,21 +311,21 @@ def test__positions_likelihood_from(analysis_imaging_7x7):


def test__results_include_mask__available_as_property(
analysis_imaging_7x7, masked_imaging_7x7, samples_with_result
analysis_imaging_7x7, masked_imaging_7x7, samples_summary_with_result
):
result = res.ResultDataset(
samples=samples_with_result,
samples_summary=samples_summary_with_result,
analysis=analysis_imaging_7x7,
)

assert (result.mask == masked_imaging_7x7.mask).all()


def test__results_include_positions__available_as_property(
analysis_imaging_7x7, masked_imaging_7x7, samples_with_result
analysis_imaging_7x7, masked_imaging_7x7, samples_summary_with_result
):
result = res.ResultDataset(
samples=samples_with_result,
samples_summary=samples_summary_with_result,
analysis=analysis_imaging_7x7,
)

Expand All @@ -346,7 +340,7 @@ def test__results_include_positions__available_as_property(
)

result = res.ResultDataset(
samples=samples_with_result,
samples_summary=samples_summary_with_result,
analysis=analysis,
)

Expand All @@ -362,7 +356,7 @@ def test___image_dict(analysis_imaging_7x7):
instance.galaxies = galaxies

result = ResultImaging(
samples=al.m.MockSamples(max_log_likelihood_instance=instance),
samples_summary=al.m.MockSamplesSummary(max_log_likelihood_instance=instance),
analysis=analysis_imaging_7x7,
)

Expand Down
6 changes: 3 additions & 3 deletions test_autolens/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,6 @@ def make_include_all():
return fixtures.make_include_2d_all()


@pytest.fixture(name="samples_with_result")
def make_samples_with_result():
return fixtures.make_samples_with_result()
@pytest.fixture(name="samples_summary_with_result")
def make_samples_summary_with_result():
return fixtures.make_samples_summary_with_result()
Loading
Loading