Skip to content
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
19 changes: 17 additions & 2 deletions autolens/imaging/model/visualizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,13 +231,28 @@ def visualize_combined(
if analyses is None:
return

# A mixed-dataset factor graph (e.g. imaging + weak lensing) routes every
# factor's analysis here; this combined subplot can only draw its own
# dataset type, so other analyses are skipped (each still visualizes its
# own fit individually).
from autolens.imaging.model.analysis import AnalysisImaging

pairs = [
(analysis, single_instance)
for analysis, single_instance in zip(analyses, instance)
if isinstance(analysis, AnalysisImaging)
]

if len(pairs) == 0:
return

plotter = PlotterImaging(
image_path=paths.image_path, title_prefix=analyses[0].title_prefix
image_path=paths.image_path, title_prefix=pairs[0][0].title_prefix
)

fit_list = [
analysis.fit_for_visualization(instance=single_instance)
for analysis, single_instance in zip(analyses, instance)
for analysis, single_instance in pairs
]

plotter.fit_imaging_combined(
Expand Down
19 changes: 17 additions & 2 deletions autolens/interferometer/model/visualizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,13 +201,28 @@ def visualize_combined(
if analyses is None:
return

# A mixed-dataset factor graph (e.g. imaging + weak lensing) routes every
# factor's analysis here; this combined subplot can only draw its own
# dataset type, so other analyses are skipped (each still visualizes its
# own fit individually).
from autolens.interferometer.model.analysis import AnalysisInterferometer

pairs = [
(analysis, single_instance)
for analysis, single_instance in zip(analyses, instance)
if isinstance(analysis, AnalysisInterferometer)
]

if len(pairs) == 0:
return

plotter = PlotterInterferometer(
image_path=paths.image_path, title_prefix=analyses[0].title_prefix
image_path=paths.image_path, title_prefix=pairs[0][0].title_prefix
)

fit_list = [
analysis.fit_for_visualization(instance=single_instance)
for analysis, single_instance in zip(analyses, instance)
for analysis, single_instance in pairs
]

plotter.fit_interferometer_combined(
Expand Down
41 changes: 41 additions & 0 deletions test_autolens/imaging/model/test_visualizer_mixed_graph.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import autoarray as aa
import autolens as al

from autolens.imaging.model.visualizer import VisualizerImaging


class _RaisingPaths:
"""visualize_combined must return before touching paths when no imaging analysis is present."""

@property
def image_path(self):
raise AssertionError("plotting was attempted for a graph with no imaging analyses")


def test__visualize_combined__skips_non_imaging_analyses():
"""
A mixed-dataset factor graph (e.g. imaging + weak) routes every factor's analysis into the
lead factor's Visualizer.visualize_combined; non-imaging analyses must be filtered out
rather than treated as FitImaging producers (which raised AttributeError before the fix).
"""
grid = aa.Grid2DIrregular(values=[(1.0, 1.0), (-1.0, 1.0)])
tracer = al.Tracer(
galaxies=[
al.Galaxy(
redshift=0.5,
mass=al.mp.IsothermalSph(einstein_radius=1.0),
),
al.Galaxy(redshift=1.0),
]
)
dataset = al.SimulatorShearYX(noise_sigma=0.1, seed=1).via_tracer_from(
tracer=tracer, grid=grid
)
analysis_weak = al.AnalysisWeak(dataset=dataset)

VisualizerImaging.visualize_combined(
analyses=[analysis_weak],
paths=_RaisingPaths(),
instance=[None],
during_analysis=True,
)
Loading