Overview
Stand up a scripts/imaging/ tree in autogalaxy_workspace_test that mirrors the imaging integration tests in autolens_workspace_test, but targeted at the single-galaxy autogalaxy API. Ports a curated subset of four scripts (model_fit.py, modeling_visualization_jit.py, visualization.py, visualization_jax.py) — the remaining autolens imaging scripts (convolution.py, per-mesh modeling_visualization_jit_* variants, simulator/, config*/, images/) are intentionally skipped unless a ported script fails without them.
Task 9/9 of the epic tracked by #5.
Plan
- Create
scripts/imaging/ with an __init__.py and the four ported scripts.
- Strip lens/source splits — every script uses a single
ag.Galaxy inside ag.Galaxies, fit through ag.AnalysisImaging.
- Reuse the existing
dataset/imaging/jax_test/ (auto-simulated by scripts/jax_likelihood_functions/imaging/simulator.py) — no new simulators.
- Drop tracer-specific plotter calls (
subplot_tracer, positions/tracer comparisons) and rename aplt to autogalaxy.plot.
- Append the reliably-passing scripts to
smoke_tests.txt (expected: model_fit.py + visualization.py; JAX scripts promoted only after CI passes).
- Verify that PyAutoGalaxy's already-merged
_register_fit_imaging_pytrees covers the MGE JIT-visualization path. Only spawn a library PR if a linear_light_profile_intensity_dict_pytree KeyError surfaces (prompt notes this is likely a no-op).
Detailed implementation plan
Affected Repositories
- autogalaxy_workspace_test (primary)
- PyAutoGalaxy (library fallback only — only if
modeling_visualization_jit.py surfaces a pytree KeyError)
Work Classification
Workspace
Branch Survey
| Repository |
Current Branch |
Dirty? |
| ./autogalaxy_workspace_test |
main |
clean |
| ./PyAutoGalaxy |
main |
clean |
Recent PyAutoGalaxy branches: feature/fit-interferometer-pytree-mge, feature/fit-interferometer-pytree-mge-group, feature/fit-point-pytree — no overlap with this task.
Suggested branch: feature/ag-imaging-scripts
Worktree root: ~/Code/PyAutoLabs-wt/ag-imaging-scripts/ (created later by /start_workspace)
Implementation Steps
-
Worktree + branch
worktree_add ag-imaging-scripts autogalaxy_workspace_test (add PyAutoGalaxy only if a library fix surfaces).
- Branch:
feature/ag-imaging-scripts.
-
New files
scripts/imaging/__init__.py — empty.
scripts/imaging/model_fit.py — end-to-end model fit on dataset/imaging/jax_test. Single galaxy with a parametric (linear) ag.lp.Sersic bulge. Nautilus with n_live=50, n_like_max=300. Drop lens/pixelization/positions/adapt machinery. Assert result.max_log_likelihood_fit and aplt.subplot_fit_imaging work.
scripts/imaging/visualization.py — before-fit + per-source VisualizerImaging assertions. Three single-galaxy source variants: parametric Sersic, rectangular (ag.mesh.RectangularAdaptImage), Delaunay (ag.mesh.Delaunay). Use autogalaxy.imaging.model.visualizer.VisualizerImaging. Drop tracer-specific plots. Keep dataset/adapt/fit/inversion assertions.
scripts/imaging/visualization_jax.py — eager-JAX VisualizerImaging.visualize on a parametric MGE single-galaxy model. AnalysisImaging(dataset=dataset, use_jax=True, use_jax_for_visualization=True).
scripts/imaging/modeling_visualization_jit.py — two-part JIT caching probe + live Nautilus run with a single-galaxy MGE linear bulge (ag.lmp_linear.GaussianGradient via ag.lp_basis.Basis). Uses ag.model_util.mge_model_from if present; otherwise builds MGE manually. Assert _jitted_fit_from cache hits and fit.png lands under output/.
-
Config
- Only add
scripts/imaging/config/visualize/plots.yaml + scripts/imaging/config_source/visualize/plots.yaml if the default autogalaxy visualize/plots.yaml cannot gate the required outputs.
-
smoke_tests.txt
- Append
imaging/model_fit.py, imaging/visualization.py. Promote the JAX scripts only after they pass end-to-end on CI.
-
Testing
- From the worktree:
NUMBA_CACHE_DIR=/tmp/numba_cache MPLCONFIGDIR=/tmp/matplotlib python scripts/imaging/<script>.py.
- Then
/smoke_test with the extended smoke_tests.txt.
-
Library fallback
- Only if
modeling_visualization_jit.py hits a linear_light_profile_intensity_dict_pytree KeyError, spin out a PyAutoGalaxy PR mirroring the autolens fix.
Key Files
autogalaxy_workspace_test/scripts/imaging/__init__.py — new
autogalaxy_workspace_test/scripts/imaging/model_fit.py — port, single-galaxy parametric Sersic fit
autogalaxy_workspace_test/scripts/imaging/visualization.py — port, VisualizerImaging assertions
autogalaxy_workspace_test/scripts/imaging/visualization_jax.py — port, eager-JAX visualize
autogalaxy_workspace_test/scripts/imaging/modeling_visualization_jit.py — port, MGE JIT cache + live Nautilus
autogalaxy_workspace_test/smoke_tests.txt — append passing scripts
Original Prompt
Click to expand starting prompt
Create scripts/imaging/ in @autogalaxy_workspace_test with autogalaxy versions of a subset
of the autolens_workspace_test imaging scripts. Per the user's directive, only port four scripts:
model_fit.py
modeling_visualization_jit.py
visualization.py
visualization_jax.py
Do not port convolution.py, modeling_visualization_jit_delaunay.py,
modeling_visualization_jit_rectangular.py, or the full simulator/, config/, config_source/,
images/ trees unless individual scripts fail without them.
Reference
@autolens_workspace_test/scripts/imaging/
Strip lens/source split — use ag.Galaxy + ag.Galaxies + ag.ImagingAnalysis. The
visualization*.py scripts exercise the plotting API and are mostly mechanical renames
(al.* → ag.*, remove tracer-specific plots).
Scripts
imaging/model_fit.py — end-to-end model fit on a small imaging dataset. Use the same
PYAUTOFIT_TEST_MODE=2 flow as the autolens version.
imaging/modeling_visualization_jit.py — exercises analysis.fit_for_visualization under
jax.jit. Depends on PyAutoGalaxy pytree registration (task 3). If
linear_light_profile_intensity_dict_pytree is needed (autogalaxy side), spawn the library
fix first.
imaging/visualization.py — exercises the autogalaxy plotter API end-to-end. NumPy only.
imaging/visualization_jax.py — same, under JAX.
Dataset / config
Reuse an existing autogalaxy imaging dataset (check autogalaxy_workspace/dataset/imaging/). Add
a small config/ directory at scripts/imaging/config/ only if the default autogalaxy config
doesn't suffice.
Deliverables
autogalaxy_workspace_test/scripts/imaging/__init__.py
- The four scripts above.
- Appended to
smoke_tests.txt.
- Any PyAutoGalaxy library PRs for missing pytree registration (likely already covered by
task 3; spawn off if surfacing here).
Depends on
Task 3 (PyAutoGalaxy imaging pytree registration). model_fit.py and visualization.py can run
without it (NumPy path), but modeling_visualization_jit.py and visualization_jax.py cannot.
Umbrella issue
Task 9/9. Track under the epic issue on PyAutoLabs/autogalaxy_workspace_test.
Related: #5 (epic)
Overview
Stand up a
scripts/imaging/tree inautogalaxy_workspace_testthat mirrors the imaging integration tests inautolens_workspace_test, but targeted at the single-galaxy autogalaxy API. Ports a curated subset of four scripts (model_fit.py,modeling_visualization_jit.py,visualization.py,visualization_jax.py) — the remaining autolens imaging scripts (convolution.py, per-meshmodeling_visualization_jit_*variants,simulator/,config*/,images/) are intentionally skipped unless a ported script fails without them.Task 9/9 of the epic tracked by #5.
Plan
scripts/imaging/with an__init__.pyand the four ported scripts.ag.Galaxyinsideag.Galaxies, fit throughag.AnalysisImaging.dataset/imaging/jax_test/(auto-simulated byscripts/jax_likelihood_functions/imaging/simulator.py) — no new simulators.subplot_tracer, positions/tracer comparisons) and renameaplttoautogalaxy.plot.smoke_tests.txt(expected:model_fit.py+visualization.py; JAX scripts promoted only after CI passes)._register_fit_imaging_pytreescovers the MGE JIT-visualization path. Only spawn a library PR if alinear_light_profile_intensity_dict_pytreeKeyErrorsurfaces (prompt notes this is likely a no-op).Detailed implementation plan
Affected Repositories
modeling_visualization_jit.pysurfaces a pytreeKeyError)Work Classification
Workspace
Branch Survey
Recent PyAutoGalaxy branches:
feature/fit-interferometer-pytree-mge,feature/fit-interferometer-pytree-mge-group,feature/fit-point-pytree— no overlap with this task.Suggested branch:
feature/ag-imaging-scriptsWorktree root:
~/Code/PyAutoLabs-wt/ag-imaging-scripts/(created later by/start_workspace)Implementation Steps
Worktree + branch
worktree_add ag-imaging-scripts autogalaxy_workspace_test(add PyAutoGalaxy only if a library fix surfaces).feature/ag-imaging-scripts.New files
scripts/imaging/__init__.py— empty.scripts/imaging/model_fit.py— end-to-end model fit ondataset/imaging/jax_test. Single galaxy with a parametric (linear)ag.lp.Sersicbulge. Nautilus withn_live=50, n_like_max=300. Drop lens/pixelization/positions/adapt machinery. Assertresult.max_log_likelihood_fitandaplt.subplot_fit_imagingwork.scripts/imaging/visualization.py— before-fit + per-sourceVisualizerImagingassertions. Three single-galaxy source variants: parametric Sersic, rectangular (ag.mesh.RectangularAdaptImage), Delaunay (ag.mesh.Delaunay). Useautogalaxy.imaging.model.visualizer.VisualizerImaging. Drop tracer-specific plots. Keep dataset/adapt/fit/inversion assertions.scripts/imaging/visualization_jax.py— eager-JAXVisualizerImaging.visualizeon a parametric MGE single-galaxy model.AnalysisImaging(dataset=dataset, use_jax=True, use_jax_for_visualization=True).scripts/imaging/modeling_visualization_jit.py— two-part JIT caching probe + live Nautilus run with a single-galaxy MGE linear bulge (ag.lmp_linear.GaussianGradientviaag.lp_basis.Basis). Usesag.model_util.mge_model_fromif present; otherwise builds MGE manually. Assert_jitted_fit_fromcache hits andfit.pnglands underoutput/.Config
scripts/imaging/config/visualize/plots.yaml+scripts/imaging/config_source/visualize/plots.yamlif the default autogalaxyvisualize/plots.yamlcannot gate the required outputs.smoke_tests.txtimaging/model_fit.py,imaging/visualization.py. Promote the JAX scripts only after they pass end-to-end on CI.Testing
NUMBA_CACHE_DIR=/tmp/numba_cache MPLCONFIGDIR=/tmp/matplotlib python scripts/imaging/<script>.py./smoke_testwith the extendedsmoke_tests.txt.Library fallback
modeling_visualization_jit.pyhits alinear_light_profile_intensity_dict_pytreeKeyError, spin out a PyAutoGalaxy PR mirroring the autolens fix.Key Files
autogalaxy_workspace_test/scripts/imaging/__init__.py— newautogalaxy_workspace_test/scripts/imaging/model_fit.py— port, single-galaxy parametric Sersic fitautogalaxy_workspace_test/scripts/imaging/visualization.py— port,VisualizerImagingassertionsautogalaxy_workspace_test/scripts/imaging/visualization_jax.py— port, eager-JAX visualizeautogalaxy_workspace_test/scripts/imaging/modeling_visualization_jit.py— port, MGE JIT cache + live Nautilusautogalaxy_workspace_test/smoke_tests.txt— append passing scriptsOriginal Prompt
Click to expand starting prompt
Create
scripts/imaging/in @autogalaxy_workspace_test with autogalaxy versions of a subsetof the autolens_workspace_test imaging scripts. Per the user's directive, only port four scripts:
model_fit.pymodeling_visualization_jit.pyvisualization.pyvisualization_jax.pyDo not port
convolution.py,modeling_visualization_jit_delaunay.py,modeling_visualization_jit_rectangular.py, or the fullsimulator/,config/,config_source/,images/trees unless individual scripts fail without them.Reference
@autolens_workspace_test/scripts/imaging/
Strip lens/source split — use
ag.Galaxy+ag.Galaxies+ag.ImagingAnalysis. Thevisualization*.pyscripts exercise the plotting API and are mostly mechanical renames(
al.*→ag.*, remove tracer-specific plots).Scripts
imaging/model_fit.py— end-to-end model fit on a small imaging dataset. Use the samePYAUTOFIT_TEST_MODE=2flow as the autolens version.imaging/modeling_visualization_jit.py— exercisesanalysis.fit_for_visualizationunderjax.jit. Depends on PyAutoGalaxy pytree registration (task 3). Iflinear_light_profile_intensity_dict_pytreeis needed (autogalaxy side), spawn the libraryfix first.
imaging/visualization.py— exercises the autogalaxy plotter API end-to-end. NumPy only.imaging/visualization_jax.py— same, under JAX.Dataset / config
Reuse an existing autogalaxy imaging dataset (check
autogalaxy_workspace/dataset/imaging/). Adda small
config/directory atscripts/imaging/config/only if the default autogalaxy configdoesn't suffice.
Deliverables
autogalaxy_workspace_test/scripts/imaging/__init__.pysmoke_tests.txt.task 3; spawn off if surfacing here).
Depends on
Task 3 (PyAutoGalaxy imaging pytree registration).
model_fit.pyandvisualization.pycan runwithout it (NumPy path), but
modeling_visualization_jit.pyandvisualization_jax.pycannot.Umbrella issue
Task 9/9. Track under the epic issue on
PyAutoLabs/autogalaxy_workspace_test.Related: #5 (epic)