Skip to content

feat: scripts/imaging/ — port model_fit + visualization + JIT visualizer scripts from autolens_workspace_test #10

@Jammy2211

Description

@Jammy2211

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

  1. Worktree + branch

    • worktree_add ag-imaging-scripts autogalaxy_workspace_test (add PyAutoGalaxy only if a library fix surfaces).
    • Branch: feature/ag-imaging-scripts.
  2. 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/.
  3. 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.
  4. smoke_tests.txt

    • Append imaging/model_fit.py, imaging/visualization.py. Promote the JAX scripts only after they pass end-to-end on CI.
  5. 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.
  6. 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

  1. 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.
  2. 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.
  3. imaging/visualization.py — exercises the autogalaxy plotter API end-to-end. NumPy only.
  4. 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

  1. autogalaxy_workspace_test/scripts/imaging/__init__.py
  2. The four scripts above.
  3. Appended to smoke_tests.txt.
  4. 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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions