From 94dd7aab7edbf72754464e7359d853f73825ad9f Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Mon, 6 Apr 2026 19:27:12 +0100 Subject: [PATCH] perf: reduce unit test runtime from 82s to 28s MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move 17 aggregator tests to autogalaxy_workspace_test as integration scripts. Monkeypatch plt.tight_layout and plt.colorbar in plot_patch fixture to skip expensive matplotlib internals. Reduce interferometer grid sizes (51x51→31x31), UV wavelengths (7→3), and MGE test gaussian counts. Co-Authored-By: Claude Opus 4.6 (1M context) --- test_autogalaxy/aggregator/__init__.py | 0 test_autogalaxy/aggregator/conftest.py | 93 -------- .../aggregator/ellipse/__init__.py | 0 .../aggregator/ellipse/conftest.py | 98 -------- .../ellipse/test_aggregator_ellipses.py | 89 ------- .../ellipse/test_aggregator_fit_ellipse.py | 91 -------- .../ellipse/test_aggregator_multipoles.py | 94 -------- .../aggregator/imaging/__init__.py | 0 .../imaging/test_aggregator_fit_imaging.py | 218 ------------------ .../imaging/test_aggregator_imaging.py | 61 ----- .../aggregator/interferometer/__init__.py | 0 .../test_aggregator_fit_interferometer.py | 153 ------------ .../test_aggregator_interferometer.py | 66 ------ .../aggregator/test_aggregator_galaxies.py | 87 ------- test_autogalaxy/analysis/test_model_util.py | 8 +- test_autogalaxy/conftest.py | 3 + .../test_simulate_and_fit_interferometer.py | 10 +- .../interferometer/test_simulator.py | 12 +- 18 files changed, 18 insertions(+), 1065 deletions(-) delete mode 100644 test_autogalaxy/aggregator/__init__.py delete mode 100644 test_autogalaxy/aggregator/conftest.py delete mode 100644 test_autogalaxy/aggregator/ellipse/__init__.py delete mode 100644 test_autogalaxy/aggregator/ellipse/conftest.py delete mode 100644 test_autogalaxy/aggregator/ellipse/test_aggregator_ellipses.py delete mode 100644 test_autogalaxy/aggregator/ellipse/test_aggregator_fit_ellipse.py delete mode 100644 test_autogalaxy/aggregator/ellipse/test_aggregator_multipoles.py delete mode 100644 test_autogalaxy/aggregator/imaging/__init__.py delete mode 100644 test_autogalaxy/aggregator/imaging/test_aggregator_fit_imaging.py delete mode 100644 test_autogalaxy/aggregator/imaging/test_aggregator_imaging.py delete mode 100644 test_autogalaxy/aggregator/interferometer/__init__.py delete mode 100644 test_autogalaxy/aggregator/interferometer/test_aggregator_fit_interferometer.py delete mode 100644 test_autogalaxy/aggregator/interferometer/test_aggregator_interferometer.py delete mode 100644 test_autogalaxy/aggregator/test_aggregator_galaxies.py diff --git a/test_autogalaxy/aggregator/__init__.py b/test_autogalaxy/aggregator/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/test_autogalaxy/aggregator/conftest.py b/test_autogalaxy/aggregator/conftest.py deleted file mode 100644 index 43fc14484..000000000 --- a/test_autogalaxy/aggregator/conftest.py +++ /dev/null @@ -1,93 +0,0 @@ -import pytest -from os import path -import os -import shutil - -from autoconf import conf -import autofit as af -import autogalaxy as ag - -from autoconf.conf import with_config -from autofit.non_linear.samples import Sample - - -@pytest.fixture(autouse=True) -def set_test_mode(): - os.environ["PYAUTOFIT_TEST_MODE"] = "1" - yield - del os.environ["PYAUTOFIT_TEST_MODE"] - - -def clean(database_file): - database_sqlite = path.join(conf.instance.output_path, f"{database_file}.sqlite") - - if path.exists(database_sqlite): - os.remove(database_sqlite) - - result_path = path.join(conf.instance.output_path, database_file) - - if path.exists(result_path): - shutil.rmtree(result_path) - - -@with_config( - "general", - "output", - "samples_to_csv", - value=True, -) -def aggregator_from(database_file, analysis, model, samples): - result_path = path.join(conf.instance.output_path, database_file) - - clean(database_file=database_file) - - search = ag.m.MockSearch( - samples=samples, - result=ag.m.MockResult(model=model, samples=samples), - ) - search.paths = af.DirectoryPaths(path_prefix=database_file) - search.fit(model=model, analysis=analysis) - - analysis.visualize_before_fit(paths=search.paths, model=model) - - database_file = path.join(conf.instance.output_path, f"{database_file}.sqlite") - - agg = af.Aggregator.from_database(filename=database_file) - agg.add_directory(directory=result_path) - - return agg - - -@pytest.fixture(name="model") -def make_model(): - dataset_model = af.Model(ag.DatasetModel) - dataset_model.background_sky_level = af.UniformPrior( - lower_limit=0.5, upper_limit=1.5 - ) - - return af.Collection( - dataset_model=dataset_model, - galaxies=af.Collection( - g0=af.Model(ag.Galaxy, redshift=0.5, light=ag.lp.Sersic), - g1=af.Model(ag.Galaxy, redshift=1.0, light=ag.lp.Sersic), - ), - ) - - -@pytest.fixture(name="samples") -def make_samples(model): - parameters = [model.prior_count * [1.0], model.prior_count * [10.0]] - - sample_list = Sample.from_lists( - model=model, - parameter_lists=parameters, - log_likelihood_list=[1.0, 2.0], - log_prior_list=[0.0, 0.0], - weight_list=[0.0, 1.0], - ) - - return ag.m.MockSamples( - model=model, - prior_means=[1.0] * model.prior_count, - sample_list=sample_list, - ) diff --git a/test_autogalaxy/aggregator/ellipse/__init__.py b/test_autogalaxy/aggregator/ellipse/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/test_autogalaxy/aggregator/ellipse/conftest.py b/test_autogalaxy/aggregator/ellipse/conftest.py deleted file mode 100644 index 92b0503f6..000000000 --- a/test_autogalaxy/aggregator/ellipse/conftest.py +++ /dev/null @@ -1,98 +0,0 @@ -import pytest -from os import path -import os -import shutil - -from autoconf import conf -import autofit as af -import autogalaxy as ag -from autoconf.conf import with_config -from autofit.non_linear.samples import Sample - - -@pytest.fixture(autouse=True) -def set_test_mode(): - os.environ["PYAUTOFIT_TEST_MODE"] = "1" - yield - del os.environ["PYAUTOFIT_TEST_MODE"] - - -def clean(database_file): - - database_sqlite = path.join(conf.instance.output_path, f"{database_file}.sqlite") - - if path.exists(database_sqlite): - os.remove(database_sqlite) - - result_path = path.join(conf.instance.output_path, database_file) - - if path.exists(result_path): - shutil.rmtree(result_path) - - -@with_config( - "general", - "output", - "samples_to_csv", - value=True, -) -def aggregator_from(database_file, analysis, model, samples): - result_path = path.join(conf.instance.output_path, database_file) - - clean(database_file=database_file) - - search = ag.m.MockSearch( - samples=samples, - result=ag.m.MockResult(model=model, samples=samples), - ) - search.paths = af.DirectoryPaths(path_prefix=database_file) - search.fit(model=model, analysis=analysis) - - analysis.visualize_before_fit(paths=search.paths, model=model) - - database_file = path.join(conf.instance.output_path, f"{database_file}.sqlite") - - agg = af.Aggregator.from_database(filename=database_file) - agg.add_directory(directory=result_path) - - return agg - - -@pytest.fixture(name="model") -def make_model(): - ellipse_list = af.Collection(af.Model(ag.Ellipse) for _ in range(2)) - - for i, ellipse in enumerate(ellipse_list): - ellipse.major_axis = i - - multipole_list = [] - - for i in range(len(ellipse_list)): - multipole_1 = af.Model(ag.EllipseMultipole) - multipole_1.m = 1 - - multipole_2 = af.Model(ag.EllipseMultipole) - multipole_2.m = 2 - - multipole_list.append([multipole_1, multipole_2]) - - return af.Collection(ellipses=ellipse_list, multipoles=multipole_list) - - -@pytest.fixture(name="samples") -def make_samples(model): - parameters = [model.prior_count * [1.0], model.prior_count * [10.0]] - - sample_list = Sample.from_lists( - model=model, - parameter_lists=parameters, - log_likelihood_list=[1.0, 2.0], - log_prior_list=[0.0, 0.0], - weight_list=[0.0, 1.0], - ) - - return ag.m.MockSamples( - model=model, - prior_means=[1.0] * model.prior_count, - sample_list=sample_list, - ) diff --git a/test_autogalaxy/aggregator/ellipse/test_aggregator_ellipses.py b/test_autogalaxy/aggregator/ellipse/test_aggregator_ellipses.py deleted file mode 100644 index 5a5e995a1..000000000 --- a/test_autogalaxy/aggregator/ellipse/test_aggregator_ellipses.py +++ /dev/null @@ -1,89 +0,0 @@ -import autogalaxy as ag - -from test_autogalaxy.aggregator.conftest import clean, aggregator_from - -database_file = "db_ellipses" - - -def test__ellipses_randomly_drawn_via_pdf_gen_from( - masked_imaging_7x7, - samples, - model, -): - clean(database_file=database_file) - - analysis = ag.AnalysisEllipse(dataset=masked_imaging_7x7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - ellipses_agg = ag.agg.EllipsesAgg(aggregator=agg) - ellipses_pdf_gen = ellipses_agg.randomly_drawn_via_pdf_gen_from(total_samples=2) - - i = 0 - - for ellipses_gen in ellipses_pdf_gen: - for ellipses_lists_list in ellipses_gen: - ellipse_list = ellipses_lists_list[0] - - i += 1 - - assert ellipse_list[0].centre == (10.0, 10.0) - assert ellipse_list[0].major_axis == 0 - assert ellipse_list[1].major_axis == 1 - - assert i == 2 - - clean(database_file=database_file) - - -def test__ellipses_all_above_weight_gen( - masked_imaging_7x7, - samples, - model, -): - clean(database_file=database_file) - - analysis = ag.AnalysisEllipse(dataset=masked_imaging_7x7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - ellipses_agg = ag.agg.EllipsesAgg(aggregator=agg) - ellipses_pdf_gen = ellipses_agg.all_above_weight_gen_from(minimum_weight=-1.0) - weight_pdf_gen = ellipses_agg.weights_above_gen_from(minimum_weight=-1.0) - - i = 0 - - for ellipses_gen, weight_gen in zip(ellipses_pdf_gen, weight_pdf_gen): - for ellipses_lists_list in ellipses_gen: - ellipse_list = ellipses_lists_list[0] - - i += 1 - - if i == 1: - assert ellipse_list[0].centre == (1.0, 1.0) - else: - assert ellipse_list[0].centre == (10.0, 10.0) - - assert ellipse_list[0].major_axis == 0 - assert ellipse_list[1].major_axis == 1 - - for weight in weight_gen: - if i == 0: - assert weight == 0.0 - - if i == 1: - assert weight == 1.0 - - assert i == 2 - - clean(database_file=database_file) diff --git a/test_autogalaxy/aggregator/ellipse/test_aggregator_fit_ellipse.py b/test_autogalaxy/aggregator/ellipse/test_aggregator_fit_ellipse.py deleted file mode 100644 index d799bb446..000000000 --- a/test_autogalaxy/aggregator/ellipse/test_aggregator_fit_ellipse.py +++ /dev/null @@ -1,91 +0,0 @@ -from pathlib import Path - -import pytest - -import autogalaxy as ag -import autofit as af -from uuid import uuid4 -from autoconf import conf -from autoconf.conf import with_config - -from test_autogalaxy.aggregator.conftest import clean, aggregator_from - -database_file = "db_fit_ellipse" - - -@pytest.fixture(name="agg_7x7") -@with_config( - "general", - "output", - "samples_to_csv", - value=True, -) -def make_agg_7x7(samples, model, analysis_ellipse_7x7): - output_path = Path(conf.instance.output_path) - - search = ag.m.MockSearch( - samples=samples, result=ag.m.MockResult(model=model, samples=samples) - ) - file_prefix = str(uuid4()) - search.paths = af.DirectoryPaths(path_prefix=file_prefix) - search.fit(model=model, analysis=analysis_ellipse_7x7) - - analysis_ellipse_7x7.visualize_before_fit(paths=search.paths, model=model) - - database_file = output_path / f"{file_prefix}.sqlite" - - agg = af.Aggregator.from_database(filename=database_file) - agg.add_directory(directory=output_path / file_prefix) - return agg - - -def test__fit_ellipse_randomly_drawn_via_pdf_gen_from__analysis_has_single_dataset( - agg_7x7, -): - fit_agg = ag.agg.FitEllipseAgg(aggregator=agg_7x7) - fit_pdf_gen = fit_agg.randomly_drawn_via_pdf_gen_from(total_samples=2) - - i = 0 - - for fit_gen in fit_pdf_gen: - for fit_lists_list in fit_gen: - # Only one `Analysis` so take first and only dataset. - fit_list = fit_lists_list[0] - - i += 1 - - assert fit_list[0].ellipse.major_axis == 0 - assert fit_list[1].ellipse.major_axis == 1 - - assert fit_list[0].multipole_list[0].m == 1 - assert fit_list[0].multipole_list[1].m == 2 - assert fit_list[1].multipole_list[0].m == 1 - assert fit_list[1].multipole_list[1].m == 2 - - assert i == 2 - - clean(database_file=database_file) - - -def test__fit_ellipse_all_above_weight_gen(agg_7x7): - fit_agg = ag.agg.FitEllipseAgg(aggregator=agg_7x7) - fit_pdf_gen = fit_agg.all_above_weight_gen_from(minimum_weight=-1.0) - - i = 0 - - for fit_gen in fit_pdf_gen: - for fit_lists_list in fit_gen: - # Only one `Analysis` so take first and only dataset. - fit_list = fit_lists_list[0] - - i += 1 - - if i == 1: - assert fit_list[0].ellipse.centre == (1.0, 1.0) - - if i == 2: - assert fit_list[0].ellipse.centre == (10.0, 10.0) - - assert i == 2 - - clean(database_file=database_file) diff --git a/test_autogalaxy/aggregator/ellipse/test_aggregator_multipoles.py b/test_autogalaxy/aggregator/ellipse/test_aggregator_multipoles.py deleted file mode 100644 index f4a75e561..000000000 --- a/test_autogalaxy/aggregator/ellipse/test_aggregator_multipoles.py +++ /dev/null @@ -1,94 +0,0 @@ -import autogalaxy as ag - -from test_autogalaxy.aggregator.conftest import clean, aggregator_from - -database_file = "db_multipoles" - - -def test__multipoles_randomly_drawn_via_pdf_gen_from( - masked_imaging_7x7, - samples, - model, -): - clean(database_file=database_file) - - analysis = ag.AnalysisEllipse(dataset=masked_imaging_7x7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - multipoles_agg = ag.agg.MultipolesAgg(aggregator=agg) - multipoles_pdf_gen = multipoles_agg.randomly_drawn_via_pdf_gen_from(total_samples=2) - - i = 0 - - for multipoles_gen in multipoles_pdf_gen: - for multipoles_lists_list in multipoles_gen: - multipole_list = multipoles_lists_list[0] - - i += 1 - - assert multipole_list[0][0].m == 1 - assert multipole_list[0][1].m == 2 - assert multipole_list[1][0].m == 1 - assert multipole_list[1][1].m == 2 - - assert i == 2 - - clean(database_file=database_file) - - -def test__multipoles_all_above_weight_gen( - masked_imaging_7x7, - samples, - model, -): - clean(database_file=database_file) - - analysis = ag.AnalysisEllipse(dataset=masked_imaging_7x7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - multipoles_agg = ag.agg.MultipolesAgg(aggregator=agg) - multipoles_pdf_gen = multipoles_agg.all_above_weight_gen_from(minimum_weight=-1.0) - weight_pdf_gen = multipoles_agg.weights_above_gen_from(minimum_weight=-1.0) - - i = 0 - - for multipoles_gen, weight_gen in zip(multipoles_pdf_gen, weight_pdf_gen): - for multipoles_lists_list in multipoles_gen: - multipole_list = multipoles_lists_list[0] - - i += 1 - - if i == 1: - assert multipole_list[0][0].m == 1 - assert multipole_list[0][1].m == 2 - assert multipole_list[1][0].m == 1 - assert multipole_list[1][1].m == 2 - - else: - assert multipole_list[0][0].m == 1 - assert multipole_list[0][1].m == 2 - assert multipole_list[1][0].m == 1 - assert multipole_list[1][1].m == 2 - - for weight in weight_gen: - if i == 0: - assert weight == 0.0 - - if i == 1: - assert weight == 1.0 - - assert i == 2 - - clean(database_file=database_file) diff --git a/test_autogalaxy/aggregator/imaging/__init__.py b/test_autogalaxy/aggregator/imaging/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/test_autogalaxy/aggregator/imaging/test_aggregator_fit_imaging.py b/test_autogalaxy/aggregator/imaging/test_aggregator_fit_imaging.py deleted file mode 100644 index bc7f6710d..000000000 --- a/test_autogalaxy/aggregator/imaging/test_aggregator_fit_imaging.py +++ /dev/null @@ -1,218 +0,0 @@ -from pathlib import Path - -import pytest - -import autogalaxy as ag -import autofit as af -from uuid import uuid4 -from autoconf import conf -from autoconf.conf import with_config - -from test_autogalaxy.aggregator.conftest import clean, aggregator_from - -database_file = "db_fit_imaging" - - -@pytest.fixture(name="agg_7x7") -@with_config( - "general", - "output", - "samples_to_csv", - value=True, -) -def make_agg_7x7(samples, model, analysis_imaging_7x7): - output_path = Path(conf.instance.output_path) - - search = ag.m.MockSearch( - samples=samples, result=ag.m.MockResult(model=model, samples=samples) - ) - file_prefix = str(uuid4()) - search.paths = af.DirectoryPaths(path_prefix=file_prefix) - search.fit(model=model, analysis=analysis_imaging_7x7) - - analysis_imaging_7x7.visualize_before_fit(paths=search.paths, model=model) - - database_file = output_path / f"{file_prefix}.sqlite" - - agg = af.Aggregator.from_database(filename=database_file) - agg.add_directory(directory=output_path / file_prefix) - return agg - - -def test__fit_imaging__max_log_likelihood__analysis_has_single_dataset( - agg_7x7, -): - fit_agg = ag.agg.FitImagingAgg(aggregator=agg_7x7) - fit_max_lh_gen = fit_agg.max_log_likelihood_gen_from() - - for ( - fit_list - ) in ( - fit_max_lh_gen - ): # Only Max LH sample so fit_list contains 1 lists of a single fit. - - assert fit_list[0].galaxies[0].redshift == 0.5 - assert fit_list[0].galaxies[0].light.centre == (10.0, 10.0) - - assert fit_list[0].dataset_model.background_sky_level == 10.0 - - clean(database_file=database_file) - - -def test__fit_imaging__randomly_drawn_via_pdf_gen_from__analysis_has_single_dataset( - agg_7x7, -): - fit_agg = ag.agg.FitImagingAgg(aggregator=agg_7x7) - fit_pdf_gen = fit_agg.randomly_drawn_via_pdf_gen_from(total_samples=3) - - i = 0 - - for fit_list_gen in fit_pdf_gen: # 1 Dataset so just one fit - for ( - fit_list - ) in ( - fit_list_gen - ): # Iterate over each total_samples=3, each with two fits for each analysis. - - i += 1 - - # Check fit for each `Analysis` so take first and only dataset. - assert fit_list[0].galaxies[0].redshift == 0.5 - assert fit_list[0].galaxies[0].light.centre == (10.0, 10.0) - assert fit_list[0].dataset_model.background_sky_level == 10.0 - - assert i == 3 - - clean(database_file=database_file) - - -# TODO : These need to use FactorGraphModel - - -# def test__fit_imaging__max_log_likelihood_gen_from__analysis_multi( -# analysis_imaging_7x7, samples, model -# ): -# -# analysis_factor_list = [] -# -# for i, analysis in enumerate([analysis_imaging_7x7, analysis_imaging_7x7]): -# -# model_analysis = model.copy() -# analysis_factor = af.AnalysisFactor(prior_model=model_analysis, analysis=analysis) -# -# analysis_factor_list.append(analysis_factor) -# -# factor_graph = af.FactorGraphModel(*analysis_factor_list) -# -# agg = aggregator_from( -# database_file=database_file, -# analysis=factor_graph, -# model=factor_graph.global_prior_model, -# samples=samples, -# ) -# -# fit_agg = ag.agg.FitImagingAgg(aggregator=agg) -# -# fit_max_lh_gen = fit_agg.max_log_likelihood_gen_from() -# -# for fit_list in fit_max_lh_gen: # Only Max LH sample so fit_list contains 1 lists of the 2 fit (one for each analysis). -# -# assert fit_list[0].galaxies[0].redshift == 0.5 -# assert fit_list[0].galaxies[0].light.centre == (10.0, 10.0) -# -# assert fit_list[1].galaxies[0].redshift == 0.5 -# assert fit_list[1].galaxies[0].light.centre == (10.0, 10.0) -# -# clean(database_file=database_file) -# -# def test__fit_imaging__randomly_drawn_via_pdf_gen_from__analysis_multi( -# analysis_imaging_7x7, samples, model -# ): -# agg = aggregator_from( -# database_file=database_file, -# analysis=analysis_imaging_7x7 + analysis_imaging_7x7, -# model=model, -# samples=samples, -# ) -# -# fit_agg = ag.agg.FitImagingAgg(aggregator=agg) -# fit_pdf_gen = fit_agg.randomly_drawn_via_pdf_gen_from(total_samples=3) -# -# i = 0 -# -# for fit_gen in fit_pdf_gen: # 1 Dataset so just one fit -# for fit_list in fit_gen: # Iterate over each total_samples=3, each with two fits for each analysis. -# i += 1 -# -# assert fit_list[0].galaxies[0].redshift == 0.5 -# assert fit_list[0].galaxies[0].light.centre == (10.0, 10.0) -# -# assert fit_list[1].galaxies[0].redshift == 0.5 -# assert fit_list[1].galaxies[0].light.centre == (10.0, 10.0) -# -# assert i == 3 -# -# clean(database_file=database_file) - - -def test__fit_imaging_all_above_weight_gen(agg_7x7): - fit_agg = ag.agg.FitImagingAgg(aggregator=agg_7x7) - fit_pdf_gen = fit_agg.all_above_weight_gen_from(minimum_weight=-1.0) - - i = 0 - - for fit_gen in fit_pdf_gen: - for fit_list in fit_gen: - i += 1 - - if i == 1: - assert fit_list[0].galaxies[0].redshift == 0.5 - assert fit_list[0].galaxies[0].light.centre == (1.0, 1.0) - - if i == 2: - assert fit_list[0].galaxies[0].redshift == 0.5 - assert fit_list[0].galaxies[0].light.centre == (10.0, 10.0) - - assert i == 2 - - clean(database_file=database_file) - - -def test__fit_imaging__adapt_images(agg_7x7, adapt_images_7x7): - fit_agg = ag.agg.FitImagingAgg(aggregator=agg_7x7) - fit_pdf_gen = fit_agg.randomly_drawn_via_pdf_gen_from(total_samples=2) - - i = 0 - - for fit_gen in fit_pdf_gen: - for fit_list in fit_gen: - i += 1 - - assert ( - list(fit_list[0].adapt_images.galaxy_image_dict.values())[0] - == list(adapt_images_7x7.galaxy_name_image_dict.values())[0] - ).all() - - print( - list( - fit_list[0].adapt_images.galaxy_image_plane_mesh_grid_dict.values() - )[0] - ) - print( - list(adapt_images_7x7.galaxy_name_image_plane_mesh_grid_dict.values())[ - 0 - ] - ) - - assert ( - list( - fit_list[0].adapt_images.galaxy_image_plane_mesh_grid_dict.values() - )[0] - == list( - adapt_images_7x7.galaxy_name_image_plane_mesh_grid_dict.values() - )[0] - ).all() - - assert i == 2 - - # clean(database_file=database_file) diff --git a/test_autogalaxy/aggregator/imaging/test_aggregator_imaging.py b/test_autogalaxy/aggregator/imaging/test_aggregator_imaging.py deleted file mode 100644 index 14e225292..000000000 --- a/test_autogalaxy/aggregator/imaging/test_aggregator_imaging.py +++ /dev/null @@ -1,61 +0,0 @@ -import autogalaxy as ag - -from test_autogalaxy.aggregator.conftest import clean, aggregator_from - -database_file = "db_imaging" - - -def test__dataset_generator_from_aggregator__analysis_has_single_dataset( - image_7x7, psf_3x3, noise_map_7x7, mask_2d_7x7, samples, model -): - imaging = ag.Imaging( - data=image_7x7, - psf=psf_3x3, - noise_map=noise_map_7x7, - over_sample_size_lp=5, - over_sample_size_pixelization=3, - ) - - masked_imaging_7x7 = imaging.apply_mask(mask=mask_2d_7x7) - - analysis = ag.AnalysisImaging(dataset=masked_imaging_7x7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - dataset_agg = ag.agg.ImagingAgg(aggregator=agg) - dataset_gen = dataset_agg.dataset_gen_from() - - for dataset_list in dataset_gen: - assert (dataset_list[0].data == masked_imaging_7x7.data).all() - assert dataset_list[0].grids.over_sample_size_lp.slim[0] == 5 - assert dataset_list[0].grids.over_sample_size_pixelization.slim[0] == 3 - - clean(database_file=database_file) - - -# TODO : Use FactorGraphmodel - -# -# def test__dataset_generator_from_aggregator__analysis_multi( -# analysis_imaging_7x7, samples, model -# ): -# agg = aggregator_from( -# database_file=database_file, -# analysis=analysis_imaging_7x7 + analysis_imaging_7x7, -# model=model, -# samples=samples, -# ) -# -# dataset_agg = ag.agg.ImagingAgg(aggregator=agg) -# dataset_gen = dataset_agg.dataset_gen_from() -# -# for dataset_list in dataset_gen: -# assert (dataset_list[0].data == analysis_imaging_7x7.dataset.data).all() -# assert (dataset_list[1].data == analysis_imaging_7x7.dataset.data).all() -# -# clean(database_file=database_file) diff --git a/test_autogalaxy/aggregator/interferometer/__init__.py b/test_autogalaxy/aggregator/interferometer/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/test_autogalaxy/aggregator/interferometer/test_aggregator_fit_interferometer.py b/test_autogalaxy/aggregator/interferometer/test_aggregator_fit_interferometer.py deleted file mode 100644 index 603224c1b..000000000 --- a/test_autogalaxy/aggregator/interferometer/test_aggregator_fit_interferometer.py +++ /dev/null @@ -1,153 +0,0 @@ -import autogalaxy as ag - -from test_autogalaxy.aggregator.conftest import clean, aggregator_from - -database_file = "db_fit_interferometer" - - -def test__fit_interferometer_randomly_drawn_via_pdf_gen_from( - interferometer_7, - samples, - model, -): - analysis = ag.AnalysisInterferometer(dataset=interferometer_7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - fit_agg = ag.agg.FitInterferometerAgg(aggregator=agg) - fit_pdf_gen = fit_agg.randomly_drawn_via_pdf_gen_from(total_samples=2) - - i = 0 - - for fit_gen in fit_pdf_gen: - for fit_list in fit_gen: - i += 1 - - assert fit_list[0].galaxies[0].redshift == 0.5 - assert fit_list[0].galaxies[0].light.centre == (10.0, 10.0) - - assert fit_list[0].dataset_model.background_sky_level == 10.0 - - assert i == 2 - - clean(database_file=database_file) - - -# TODO : These need to use FactorGraphModel - -# def test__fit_interferometer_randomly_drawn_via_pdf_gen_from__analysis_multi( -# analysis_interferometer_7, samples, model -# ): -# -# agg = aggregator_from( -# database_file=database_file, -# analysis=analysis_interferometer_7 + analysis_interferometer_7, -# model=model, -# samples=samples, -# ) -# -# fit_agg = ag.agg.FitInterferometerAgg(aggregator=agg) -# fit_pdf_gen = fit_agg.randomly_drawn_via_pdf_gen_from( -# total_samples=2 -# ) -# -# i = 0 -# -# for fit_gen in fit_pdf_gen: -# for fit_list in fit_gen: -# i += 1 -# -# assert fit_list[0].galaxies[0].redshift == 0.5 -# assert fit_list[0].galaxies[0].light.centre == (10.0, 10.0) -# -# assert fit_list[1].galaxies[0].redshift == 0.5 -# assert fit_list[1].galaxies[0].light.centre == (10.0, 10.0) -# -# assert i == 2 -# -# clean(database_file=database_file) - - -def test__fit_interferometer_all_above_weight_gen(interferometer_7, samples, model): - clean(database_file=database_file) - - analysis = ag.AnalysisInterferometer(dataset=interferometer_7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - fit_agg = ag.agg.FitInterferometerAgg(aggregator=agg) - fit_pdf_gen = fit_agg.all_above_weight_gen_from(minimum_weight=-1.0) - - i = 0 - - for fit_gen in fit_pdf_gen: - for fit_list in fit_gen: - i += 1 - - if i == 1: - assert fit_list[0].galaxies[0].redshift == 0.5 - assert fit_list[0].galaxies[0].light.centre == (1.0, 1.0) - - if i == 2: - assert fit_list[0].galaxies[0].redshift == 0.5 - assert fit_list[0].galaxies[0].light.centre == (10.0, 10.0) - - assert i == 2 - - clean(database_file=database_file) - - -def test__fit_interferometer__adapt_images( - interferometer_7, - samples, - model, - adapt_images_7x7, -): - analysis = ag.AnalysisInterferometer( - dataset=interferometer_7, adapt_images=adapt_images_7x7, use_jax=False - ) - analysis._adapt_images = adapt_images_7x7 - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - fit_agg = ag.agg.FitInterferometerAgg(aggregator=agg) - fit_pdf_gen = fit_agg.randomly_drawn_via_pdf_gen_from(total_samples=2) - - i = 0 - - for fit_gen in fit_pdf_gen: - for fit_list in fit_gen: - i += 1 - - assert ( - list(fit_list[0].adapt_images.galaxy_image_dict.values())[0] - == list(adapt_images_7x7.galaxy_name_image_dict.values())[0] - ).all() - - assert ( - list( - fit_list[0].adapt_images.galaxy_image_plane_mesh_grid_dict.values() - )[0] - == list( - adapt_images_7x7.galaxy_name_image_plane_mesh_grid_dict.values() - )[0] - ).all() - - assert i == 2 - - clean(database_file=database_file) diff --git a/test_autogalaxy/aggregator/interferometer/test_aggregator_interferometer.py b/test_autogalaxy/aggregator/interferometer/test_aggregator_interferometer.py deleted file mode 100644 index debb99cf5..000000000 --- a/test_autogalaxy/aggregator/interferometer/test_aggregator_interferometer.py +++ /dev/null @@ -1,66 +0,0 @@ -import autogalaxy as ag - -from test_autogalaxy.aggregator.conftest import clean, aggregator_from - -database_file = "db_interferometer" - - -def test__interferometer_generator_from_aggregator__analysis_has_single_dataset( - visibilities_7, - visibilities_noise_map_7, - uv_wavelengths_7x2, - mask_2d_7x7, - samples, - model, -): - interferometer_7 = ag.Interferometer( - data=visibilities_7, - noise_map=visibilities_noise_map_7, - uv_wavelengths=uv_wavelengths_7x2, - real_space_mask=mask_2d_7x7, - transformer_class=ag.TransformerDFT, - ) - - analysis = ag.AnalysisInterferometer(dataset=interferometer_7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - dataset_agg = ag.agg.InterferometerAgg(aggregator=agg) - dataset_gen = dataset_agg.dataset_gen_from() - - for dataset_list in dataset_gen: - assert (dataset_list[0].data == interferometer_7.data).all() - assert (dataset_list[0].real_space_mask == mask_2d_7x7).all() - assert isinstance(dataset_list[0].transformer, ag.TransformerDFT) - - clean(database_file=database_file) - - -# TODO : These need to use FactorGraphModel - - -# def test__interferometer_generator_from_aggregator__analysis_multi( -# analysis_interferometer_7, -# samples, -# model, -# ): -# agg = aggregator_from( -# database_file=database_file, -# analysis=analysis_interferometer_7 + analysis_interferometer_7, -# model=model, -# samples=samples, -# ) -# -# dataset_agg = ag.agg.InterferometerAgg(aggregator=agg) -# dataset_gen = dataset_agg.dataset_gen_from() -# -# for dataset_list in dataset_gen: -# assert (dataset_list[0].data == analysis_interferometer_7.dataset.data).all() -# assert (dataset_list[1].data == analysis_interferometer_7.dataset.data).all() -# -# clean(database_file=database_file) diff --git a/test_autogalaxy/aggregator/test_aggregator_galaxies.py b/test_autogalaxy/aggregator/test_aggregator_galaxies.py deleted file mode 100644 index 61a459c5b..000000000 --- a/test_autogalaxy/aggregator/test_aggregator_galaxies.py +++ /dev/null @@ -1,87 +0,0 @@ -import autogalaxy as ag - -from test_autogalaxy.aggregator.conftest import clean, aggregator_from - -database_file = "db_galaxies" - - -def test__galaxies_randomly_drawn_via_pdf_gen_from( - masked_imaging_7x7, - samples, - model, -): - clean(database_file=database_file) - - analysis = ag.AnalysisImaging(dataset=masked_imaging_7x7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - galaxies_agg = ag.agg.GalaxiesAgg(aggregator=agg) - galaxies_pdf_gen = galaxies_agg.randomly_drawn_via_pdf_gen_from(total_samples=2) - - i = 0 - - for galaxies_gen in galaxies_pdf_gen: - for galaxy_list in galaxies_gen: - i += 1 - - assert galaxy_list[0].g0.redshift == 0.5 - assert galaxy_list[0].g0.light.centre == (10.0, 10.0) - assert galaxy_list[0].g1.redshift == 1.0 - - assert i == 2 - - clean(database_file=database_file) - - -def test__galaxies_all_above_weight_gen( - masked_imaging_7x7, - samples, - model, -): - clean(database_file=database_file) - - analysis = ag.AnalysisImaging(dataset=masked_imaging_7x7, use_jax=False) - - agg = aggregator_from( - database_file=database_file, - analysis=analysis, - model=model, - samples=samples, - ) - - galaxies_agg = ag.agg.GalaxiesAgg(aggregator=agg) - galaxies_pdf_gen = galaxies_agg.all_above_weight_gen_from(minimum_weight=-1.0) - weight_pdf_gen = galaxies_agg.weights_above_gen_from(minimum_weight=-1.0) - - i = 0 - - for galaxies_gen, weight_gen in zip(galaxies_pdf_gen, weight_pdf_gen): - for galaxy_list in galaxies_gen: - i += 1 - - if i == 1: - assert galaxy_list[0].g0.redshift == 0.5 - assert galaxy_list[0].g0.light.centre == (1.0, 1.0) - assert galaxy_list[0].g1.redshift == 1.0 - - if i == 2: - assert galaxy_list[0].g0.redshift == 0.5 - assert galaxy_list[0].g0.light.centre == (10.0, 10.0) - assert galaxy_list[0].g1.redshift == 1.0 - - for weight in weight_gen: - if i == 0: - assert weight == 0.0 - - if i == 1: - assert weight == 1.0 - - assert i == 2 - - clean(database_file=database_file) diff --git a/test_autogalaxy/analysis/test_model_util.py b/test_autogalaxy/analysis/test_model_util.py index c8f34825f..71de80ef1 100644 --- a/test_autogalaxy/analysis/test_model_util.py +++ b/test_autogalaxy/analysis/test_model_util.py @@ -10,12 +10,12 @@ def test__mge_point_model_from__returns_basis_model_with_correct_gaussians(): mge_point_model_from should return an af.Model wrapping a Basis whose profile_list contains the requested number of linear Gaussian components. """ - model = ag.model_util.mge_point_model_from(pixel_scales=0.1, total_gaussians=5) + model = ag.model_util.mge_point_model_from(pixel_scales=0.1, total_gaussians=2) instance = model.instance_from_prior_medians() assert isinstance(instance, ag.lp_basis.Basis) - assert len(instance.profile_list) == 5 + assert len(instance.profile_list) == 2 def test__mge_point_model_from__sigma_values_span_correct_range(): @@ -24,7 +24,7 @@ def test__mge_point_model_from__sigma_values_span_correct_range(): logarithmically spaced. """ pixel_scales = 0.1 - total_gaussians = 10 + total_gaussians = 3 model = ag.model_util.mge_point_model_from( pixel_scales=pixel_scales, total_gaussians=total_gaussians @@ -41,7 +41,7 @@ def test__mge_point_model_from__shared_centre_and_ell_comps(): All Gaussians must share exactly the same centre prior objects and ell_comps prior objects so the model has only 4 free parameters total. """ - model = ag.model_util.mge_point_model_from(pixel_scales=0.1, total_gaussians=5) + model = ag.model_util.mge_point_model_from(pixel_scales=0.1, total_gaussians=2) gaussian_list = list(model.profile_list) diff --git a/test_autogalaxy/conftest.py b/test_autogalaxy/conftest.py index 45ca6de37..56a61a7b7 100644 --- a/test_autogalaxy/conftest.py +++ b/test_autogalaxy/conftest.py @@ -8,6 +8,7 @@ def pytest_configure(): from os import path import pytest from matplotlib import pyplot +from unittest.mock import MagicMock from autoconf import conf from autogalaxy import fixtures @@ -34,6 +35,8 @@ def make_plot_patch(monkeypatch): plot_patch = PlotPatch() monkeypatch.setattr(pyplot, "savefig", plot_patch) monkeypatch.setattr(matplotlib.figure.Figure, "savefig", plot_patch) + monkeypatch.setattr(pyplot, "tight_layout", lambda *a, **kw: None) + monkeypatch.setattr(pyplot, "colorbar", lambda *a, **kw: MagicMock()) return plot_patch diff --git a/test_autogalaxy/interferometer/test_simulate_and_fit_interferometer.py b/test_autogalaxy/interferometer/test_simulate_and_fit_interferometer.py index cea76846d..6c6163fce 100644 --- a/test_autogalaxy/interferometer/test_simulate_and_fit_interferometer.py +++ b/test_autogalaxy/interferometer/test_simulate_and_fit_interferometer.py @@ -10,7 +10,7 @@ def test__perfect_fit__chi_squared_0(): grid = ag.Grid2D.uniform( - shape_native=(51, 51), + shape_native=(31, 31), pixel_scales=0.1, over_sample_size=1, ) @@ -24,7 +24,7 @@ def test__perfect_fit__chi_squared_0(): ) simulator = ag.SimulatorInterferometer( - uv_wavelengths=np.ones(shape=(7, 2)), + uv_wavelengths=np.ones(shape=(3, 2)), transformer_class=ag.TransformerDFT, exposure_time=300.0, noise_if_add_noise_false=1.0, @@ -58,7 +58,7 @@ def test__perfect_fit__chi_squared_0(): ) real_space_mask = ag.Mask2D.all_false( - shape_native=(51, 51), + shape_native=(31, 31), pixel_scales=0.1, ) @@ -78,7 +78,7 @@ def test__perfect_fit__chi_squared_0(): assert fit.chi_squared == pytest.approx(0.0) pixelization = ag.Pixelization( - mesh=ag.mesh.RectangularUniform(shape=(7, 7)), + mesh=ag.mesh.RectangularUniform(shape=(5, 5)), regularization=ag.reg.Constant(coefficient=0.0001), ) @@ -142,7 +142,7 @@ def test__simulate_interferometer_data_and_fit__known_likelihood(): def test__linear_light_profiles_agree_with_standard_light_profiles(): grid = ag.Grid2D.uniform( - shape_native=(51, 51), + shape_native=(31, 31), pixel_scales=0.1, over_sample_size=1, ) diff --git a/test_autogalaxy/interferometer/test_simulator.py b/test_autogalaxy/interferometer/test_simulator.py index 9532262bb..847accb70 100644 --- a/test_autogalaxy/interferometer/test_simulator.py +++ b/test_autogalaxy/interferometer/test_simulator.py @@ -17,7 +17,7 @@ def test__simulator__via_galaxies_from__data_matches_via_image(): galaxies = ag.Galaxies(galaxies=[galaxy_0, galaxy_1]) simulator = ag.SimulatorInterferometer( - uv_wavelengths=np.ones(shape=(7, 2)), + uv_wavelengths=np.ones(shape=(3, 2)), exposure_time=10000.0, noise_sigma=0.1, noise_seed=1, @@ -46,7 +46,7 @@ def test__simulator__via_galaxies_from__uv_wavelengths_match_via_image(): galaxies = ag.Galaxies(galaxies=[galaxy_0, galaxy_1]) simulator = ag.SimulatorInterferometer( - uv_wavelengths=np.ones(shape=(7, 2)), + uv_wavelengths=np.ones(shape=(3, 2)), exposure_time=10000.0, noise_sigma=0.1, noise_seed=1, @@ -75,7 +75,7 @@ def test__simulator__via_galaxies_from__noise_map_matches_via_image(): galaxies = ag.Galaxies(galaxies=[galaxy_0, galaxy_1]) simulator = ag.SimulatorInterferometer( - uv_wavelengths=np.ones(shape=(7, 2)), + uv_wavelengths=np.ones(shape=(3, 2)), exposure_time=10000.0, noise_sigma=0.1, noise_seed=1, @@ -112,7 +112,7 @@ def test__simulator__simulate_from_source_galaxy__data_matches_via_image(): grid = ag.Grid2D.uniform(shape_native=(11, 11), pixel_scales=0.05) simulator = ag.SimulatorInterferometer( - uv_wavelengths=np.ones(shape=(7, 2)), + uv_wavelengths=np.ones(shape=(3, 2)), exposure_time=10000.0, noise_sigma=0.1, noise_seed=1, @@ -151,7 +151,7 @@ def test__simulator__simulate_from_source_galaxy__uv_wavelengths_match_via_image grid = ag.Grid2D.uniform(shape_native=(11, 11), pixel_scales=0.05) simulator = ag.SimulatorInterferometer( - uv_wavelengths=np.ones(shape=(7, 2)), + uv_wavelengths=np.ones(shape=(3, 2)), exposure_time=10000.0, noise_sigma=0.1, noise_seed=1, @@ -190,7 +190,7 @@ def test__simulator__simulate_from_source_galaxy__noise_map_matches_via_image(): grid = ag.Grid2D.uniform(shape_native=(11, 11), pixel_scales=0.05) simulator = ag.SimulatorInterferometer( - uv_wavelengths=np.ones(shape=(7, 2)), + uv_wavelengths=np.ones(shape=(3, 2)), exposure_time=10000.0, noise_sigma=0.1, noise_seed=1,