From 94632b8575f0b6408d1d6ea5f4b43ba5c3026e1c Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 14 Mar 2025 13:51:40 +0000 Subject: [PATCH 1/3] raise error if no subplots passed --- autofit/aggregator/summary/aggregate_images.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autofit/aggregator/summary/aggregate_images.py b/autofit/aggregator/summary/aggregate_images.py index 37d5b2ab2..d8d279c61 100644 --- a/autofit/aggregator/summary/aggregate_images.py +++ b/autofit/aggregator/summary/aggregate_images.py @@ -190,6 +190,9 @@ def output_to_folder( The attribute of each fit to use as the name of the output file. OR a list of names, one for each fit. """ + if len(subplots) == 0: + raise ValueError("At least one subplot must be provided.") + folder.mkdir(exist_ok=True, parents=True) for i, result in enumerate(self._aggregator): From bdf7caa656f576af057a1ad8a3dca5b4d1407d54 Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 14 Mar 2025 14:39:14 +0000 Subject: [PATCH 2/3] fixing tests... --- autofit/aggregator/summary/aggregate_fits.py | 10 +- .../aggregator/summary/aggregate_images.py | 12 +-- .../summary_files/test_aggregate_fits.py | 22 +++-- .../summary_files/test_aggregate_images.py | 94 ++++++++++++------- 4 files changed, 84 insertions(+), 54 deletions(-) diff --git a/autofit/aggregator/summary/aggregate_fits.py b/autofit/aggregator/summary/aggregate_fits.py index 1039221bf..64f336624 100644 --- a/autofit/aggregator/summary/aggregate_fits.py +++ b/autofit/aggregator/summary/aggregate_fits.py @@ -51,7 +51,7 @@ def __init__(self, aggregator: Aggregator): @staticmethod def _hdus( result: SearchOutput, - *hdus: Enum, + hdus: List[Enum], ) -> List[fits.ImageHDU]: """ Extract the HDUs from a given fits for a given search. @@ -79,7 +79,7 @@ def _hdus( ) return row - def extract_fits(self, *hdus: Enum) -> List[fits.HDUList]: + def extract_fits(self, hdus: List[Enum]) -> List[fits.HDUList]: """ Extract the HDUs from the fits files for every search in the aggregator. @@ -96,15 +96,15 @@ def extract_fits(self, *hdus: Enum) -> List[fits.HDUList]: """ output = [fits.PrimaryHDU()] for result in self.aggregator: - output.extend(self._hdus(result, *hdus)) + output.extend(self._hdus(result, hdus)) return fits.HDUList(output) def output_to_folder( self, folder: Path, - *hdus: Enum, name: Union[str, List[str]], + hdus: List[Enum], ): """ Output the fits files for every search in the aggregator to a folder. @@ -133,7 +133,7 @@ def output_to_folder( [fits.PrimaryHDU()] + self._hdus( result, - *hdus, + hdus, ) ) with open(folder / f"{output_name}.fits", "wb") as file: diff --git a/autofit/aggregator/summary/aggregate_images.py b/autofit/aggregator/summary/aggregate_images.py index d8d279c61..8ddf411e8 100644 --- a/autofit/aggregator/summary/aggregate_images.py +++ b/autofit/aggregator/summary/aggregate_images.py @@ -122,7 +122,7 @@ def __init__( def extract_image( self, - *subplots: Union[Enum, List[Image.Image], Callable], + subplots: List[Union[Enum, List[Image.Image], Callable]], subplot_width: Optional[int] = sys.maxsize, ) -> Image.Image: """ @@ -154,7 +154,7 @@ def extract_image( self._matrix_for_result( i, result, - *subplots, + subplots, subplot_width=subplot_width, ) ) @@ -164,9 +164,9 @@ def extract_image( def output_to_folder( self, folder: Path, - *subplots: Union[SubplotFit, List[Image.Image], Callable], - subplot_width: Optional[int] = sys.maxsize, name: Union[str, List[str]], + subplots: List[Union[SubplotFit, List[Image.Image], Callable]], + subplot_width: Optional[int] = sys.maxsize, ): """ Output one subplot image for each fit in the aggregator. @@ -200,7 +200,7 @@ def output_to_folder( self._matrix_for_result( i, result, - *subplots, + subplots, subplot_width=subplot_width, ) ) @@ -216,7 +216,7 @@ def output_to_folder( def _matrix_for_result( i: int, result: SearchOutput, - *subplots: Union[SubplotFit, List[Image.Image], Callable], + subplots: List[Union[SubplotFit, List[Image.Image], Callable]], subplot_width: int = sys.maxsize, ) -> List[List[Image.Image]]: """ diff --git a/test_autofit/aggregator/summary_files/test_aggregate_fits.py b/test_autofit/aggregator/summary_files/test_aggregate_fits.py index da2e73426..ec56c7407 100644 --- a/test_autofit/aggregator/summary_files/test_aggregate_fits.py +++ b/test_autofit/aggregator/summary_files/test_aggregate_fits.py @@ -11,8 +11,10 @@ def make_summary(aggregator): def test_aggregate(summary): result = summary.extract_fits( - af.FitFITS.ModelImage, - af.FitFITS.ResidualMap, + [ + af.FitFITS.ModelImage, + af.FitFITS.ResidualMap, + ], ) assert len(result) == 5 @@ -21,9 +23,11 @@ def test_output_to_file(summary, output_directory): folder = output_directory / "fits" summary.output_to_folder( folder, - af.FitFITS.ModelImage, - af.FitFITS.ResidualMap, - name="id", + name="name", + hdus=[ + af.FitFITS.ModelImage, + af.FitFITS.ResidualMap, + ], ) assert len((list(folder.glob("*")))) == 2 @@ -31,9 +35,11 @@ def test_output_to_file(summary, output_directory): def test_list_of_names(summary, output_directory): summary.output_to_folder( output_directory, - af.FitFITS.ModelImage, - af.FitFITS.ResidualMap, - name=["one", "two"], + ["one", "two"], + [ + af.FitFITS.ModelImage, + af.FitFITS.ResidualMap, + ], ) assert [path.name for path in Path(output_directory).glob("*.fits")] == [ "one.fits", diff --git a/test_autofit/aggregator/summary_files/test_aggregate_images.py b/test_autofit/aggregator/summary_files/test_aggregate_images.py index dce18d8ea..3a9e5f34f 100644 --- a/test_autofit/aggregator/summary_files/test_aggregate_images.py +++ b/test_autofit/aggregator/summary_files/test_aggregate_images.py @@ -16,31 +16,41 @@ def aggregate(aggregator): def test(aggregate): result = aggregate.extract_image( - SubplotFit.Data, - SubplotFit.SourcePlaneZoomed, + [ + SubplotFit.Data, + SubplotFit.SourcePlaneZoomed, + ], ) assert result.size == (122, 120) assert result == aggregate.extract_image( - SubplotFit.Data, - SubplotFit.SourcePlaneZoomed, + [ + SubplotFit.Data, + SubplotFit.SourcePlaneZoomed, + ], ) def test_different_plots(aggregate): assert aggregate.extract_image( - SubplotFit.Data, - SubplotFit.SourcePlaneZoomed, + [ + SubplotFit.Data, + SubplotFit.SourcePlaneZoomed, + ], ) != aggregate.extract_image( - SubplotFit.SourcePlaneZoomed, - SubplotFit.Data, + [ + SubplotFit.SourcePlaneZoomed, + SubplotFit.Data, + ], ) def test_longer(aggregate): result = aggregate.extract_image( - SubplotFit.NormalizedResidualMap, - SubplotFit.SourcePlaneNoZoom, - SubplotFit.SourceModelImage, + [ + SubplotFit.NormalizedResidualMap, + SubplotFit.SourcePlaneNoZoom, + SubplotFit.SourceModelImage, + ], ) assert result.size == (183, 120) @@ -48,9 +58,11 @@ def test_longer(aggregate): def test_subplot_width(aggregate): result = aggregate.extract_image( - SubplotFit.NormalizedResidualMap, - SubplotFit.SourcePlaneNoZoom, - SubplotFit.SourceModelImage, + [ + SubplotFit.NormalizedResidualMap, + SubplotFit.SourcePlaneNoZoom, + SubplotFit.SourceModelImage, + ], subplot_width=2, ) @@ -60,10 +72,12 @@ def test_subplot_width(aggregate): def test_output_to_folder(aggregate, output_directory): aggregate.output_to_folder( output_directory, - SubplotFit.Data, - SubplotFit.SourcePlaneZoomed, - SubplotFit.SourceModelImage, - name="name", + "name", + [ + SubplotFit.Data, + SubplotFit.SourcePlaneZoomed, + SubplotFit.SourceModelImage, + ], ) assert list(Path(output_directory).glob("*.png")) @@ -71,10 +85,12 @@ def test_output_to_folder(aggregate, output_directory): def test_list_of_names(aggregate, output_directory): aggregate.output_to_folder( output_directory, - SubplotFit.Data, - SubplotFit.SourcePlaneZoomed, - SubplotFit.SourceModelImage, - name=["one", "two"], + ["one", "two"], + [ + SubplotFit.Data, + SubplotFit.SourcePlaneZoomed, + SubplotFit.SourceModelImage, + ], ) assert [path.name for path in Path(output_directory).glob("*.png")] == [ "two.png", @@ -89,10 +105,12 @@ def test_output_to_folder_name( ): aggregate.output_to_folder( output_directory, - SubplotFit.Data, - SubplotFit.SourcePlaneZoomed, - SubplotFit.SourceModelImage, - name="id", + "id", + [ + SubplotFit.Data, + SubplotFit.SourcePlaneZoomed, + SubplotFit.SourceModelImage, + ], ) id_ = next(iter(aggregator)).id @@ -107,10 +125,12 @@ def test_custom_images( images = [image for _ in aggregator] result = aggregate.extract_image( - SubplotFit.Data, - SubplotFit.SourcePlaneZoomed, - SubplotFit.SourceModelImage, - images, + [ + SubplotFit.Data, + SubplotFit.SourcePlaneZoomed, + SubplotFit.SourceModelImage, + images, + ] ) assert result.size == (193, 120) @@ -121,10 +141,12 @@ def make_image(output): return Image.new("RGB", (10, 10), "white") result = aggregate.extract_image( - SubplotFit.Data, - SubplotFit.SourcePlaneZoomed, - SubplotFit.SourceModelImage, - make_image, + [ + SubplotFit.Data, + SubplotFit.SourcePlaneZoomed, + SubplotFit.SourceModelImage, + make_image, + ] ) assert result.size == (193, 120) @@ -141,7 +163,9 @@ class SubplotFit(Enum): Data = (0, 0) result = aggregate.extract_image( - SubplotFit.Data, + [ + SubplotFit.Data, + ] ) assert result.size == (61, 120) From 3692e4ed2e4e7ab7e5cbb198f7d212724e3158e0 Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 14 Mar 2025 14:49:43 +0000 Subject: [PATCH 3/3] loosen constraint --- test_autofit/aggregator/summary_files/test_aggregate_fits.py | 4 ++-- .../aggregator/summary_files/test_aggregate_images.py | 2 +- test_autofit/conftest.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test_autofit/aggregator/summary_files/test_aggregate_fits.py b/test_autofit/aggregator/summary_files/test_aggregate_fits.py index ec56c7407..2c76227f8 100644 --- a/test_autofit/aggregator/summary_files/test_aggregate_fits.py +++ b/test_autofit/aggregator/summary_files/test_aggregate_fits.py @@ -23,13 +23,13 @@ def test_output_to_file(summary, output_directory): folder = output_directory / "fits" summary.output_to_folder( folder, - name="name", + name="id", hdus=[ af.FitFITS.ModelImage, af.FitFITS.ResidualMap, ], ) - assert len((list(folder.glob("*")))) == 2 + assert list(folder.glob("*")) def test_list_of_names(summary, output_directory): diff --git a/test_autofit/aggregator/summary_files/test_aggregate_images.py b/test_autofit/aggregator/summary_files/test_aggregate_images.py index 3a9e5f34f..f31b708ca 100644 --- a/test_autofit/aggregator/summary_files/test_aggregate_images.py +++ b/test_autofit/aggregator/summary_files/test_aggregate_images.py @@ -72,7 +72,7 @@ def test_subplot_width(aggregate): def test_output_to_folder(aggregate, output_directory): aggregate.output_to_folder( output_directory, - "name", + "id", [ SubplotFit.Data, SubplotFit.SourcePlaneZoomed, diff --git a/test_autofit/conftest.py b/test_autofit/conftest.py index bac54a0a6..2eeb884ae 100644 --- a/test_autofit/conftest.py +++ b/test_autofit/conftest.py @@ -68,7 +68,7 @@ def remove_output(): return remove_output -@pytest.fixture(autouse=True, scope="session") +@pytest.fixture(autouse=True) def do_remove_output(output_directory, remove_output): yield remove_output()