You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Point-source is the only autolens dataset type with zero visualization coverage of any flavour in autolens_workspace_test. Phase 1B of the JAX visualization roadmap fills the gap by adding NumPy baseline → JAX → live Nautilus JIT scripts mirroring the imaging analogues. Discovered while planning: al.AnalysisPoint.__init__ has the same **kwargs passthrough gap that PyAutoLens #500 just fixed on AnalysisInterferometer, so this is a Both task — library fix ships first, workspace scripts follow via library-first merge gate.
Plan
Library: 2-line **kwargs passthrough fix in al.AnalysisPoint.__init__ (mirrors PR #500's AnalysisInterferometer fix). Closes TypeError: got an unexpected keyword argument 'use_jax_for_visualization' that the JAX scripts would otherwise hit.
Workspace sub-step 1: NumPy baseline scripts/point_source/visualization.py — must land first since no NumPy regression baseline exists today.
Workspace sub-step 2: scripts/point_source/visualization_jax.py exercising the JIT-cached fit_for_visualization path, image-plane chi-squared only (source-plane is JIT-blocked per scripts/CLAUDE.md L132). Include enable_pytrees() + register_model(model) from the start; no try/except wrapper (lesson from PR fix: register_model in visualization_jax.py to actually exercise JIT path #85).
Workspace sub-step 3: scripts/point_source/modeling_visualization_jit.py — caching probe + live Nautilus. Explicit rmtree(output/<path_prefix>/<name>/) before Nautilus so reruns don't silently skip live sampling (lesson from PR feat: autolens interferometer JAX visualization scripts #87).
Call VisualizerPoint.visualize(...) (verify class name from autolens/point/model/visualizer.py).
Assert the expected PNG/subplot files land on disk.
Workspace sub-step 2 — JAX viz (image-plane only):
New file scripts/point_source/visualization_jax.py:
from autofit.jax.pytrees import enable_pytrees, register_model + enable_pytrees() at module level.
Same model/dataset as sub-step 1 but fit_positions_cls=FitPositionsImagePairAll (or equivalent image-plane variant per jax_likelihood_functions/point_source/image_plane.py).
register_model(model) after model is built.
al.AnalysisPoint(..., use_jax=True, use_jax_for_visualization=True) — depends on the library fix.
Call VisualizerPoint.visualize(...) directly. No try/except wrapper.
Assert fit.png (or equivalent) lands on disk.
Workspace sub-step 3 — Live Nautilus jit-cached:
New file scripts/point_source/modeling_visualization_jit.py:
Part 1 caching probe: build the model + analysis with linear profiles where the point-source model supports them; call analysis.fit_for_visualization(instance) twice, assert second is significantly faster.
Part 2 live Nautilus: same model, real (short) Nautilus run with n_live=50, n_like_max=1500, iterations_per_quick_update=500.
Explicit rmtree(output/scripts/point_source/images/modeling_visualization_jit/mge_linear/) before the Nautilus call so reruns don't silently resume from cached samples.csv (lesson from PR feat: autolens interferometer JAX visualization scripts #87).
Assert _jitted_fit_from is not None on the analysis post-search AND at least one fit.png produced.
Source-plane feasibility gate (decide late in implementation):
Probe whether FitPositionsSource + jax.jit(analysis.fit_from) succeeds. If it still raises (per scripts/CLAUDE.md L132), do NOT add a source-plane variant in this task — file a follow-up prompt. If it works, add scripts/point_source/visualization_jax_source_plane.py analogously.
Overview
Point-source is the only autolens dataset type with zero visualization coverage of any flavour in
autolens_workspace_test. Phase 1B of the JAX visualization roadmap fills the gap by adding NumPy baseline → JAX → live Nautilus JIT scripts mirroring the imaging analogues. Discovered while planning:al.AnalysisPoint.__init__has the same**kwargspassthrough gap that PyAutoLens #500 just fixed onAnalysisInterferometer, so this is a Both task — library fix ships first, workspace scripts follow via library-first merge gate.Plan
**kwargspassthrough fix inal.AnalysisPoint.__init__(mirrors PR #500'sAnalysisInterferometerfix). ClosesTypeError: got an unexpected keyword argument 'use_jax_for_visualization'that the JAX scripts would otherwise hit.scripts/point_source/visualization.py— must land first since no NumPy regression baseline exists today.scripts/point_source/visualization_jax.pyexercising the JIT-cachedfit_for_visualizationpath, image-plane chi-squared only (source-plane is JIT-blocked perscripts/CLAUDE.mdL132). Includeenable_pytrees()+register_model(model)from the start; notry/exceptwrapper (lesson from PR fix: register_model in visualization_jax.py to actually exercise JIT path #85).scripts/point_source/modeling_visualization_jit.py— caching probe + live Nautilus. Explicitrmtree(output/<path_prefix>/<name>/)before Nautilus so reruns don't silently skip live sampling (lesson from PR feat: autolens interferometer JAX visualization scripts #87).config/build/env_vars.yaml: addpoint_source/visualization_jax+point_source/modeling_visualization_jitoverrides.Detailed implementation plan
Affected Repositories
AnalysisPoint.__init__**kwargspassthrough)Work Classification
Both (library-first merge gate; workspace PR merges only after the library PR lands)
Branch Survey
Suggested branch:
feature/point-source-jax-vizWorktree root:
~/Code/PyAutoLabs-wt/point-source-jax-viz/(created later by/start_library)Implementation Steps
Library (PyAutoLens):
autolens/point/model/analysis.pylines 37-46 — add**kwargs,toAnalysisPoint.__init__parameter list.autolens/point/model/analysis.pyline 80 — forward**kwargsinsuper().__init__(cosmology=cosmology, use_jax=use_jax, **kwargs).pytest test_autolens/point/must pass (broader sweep too if affordable).Workspace sub-step 1 — NumPy baseline (autolens_workspace_test):
scripts/point_source/visualization.py:scripts/point_source/simulators/point_source.pyfor the dataset.al.AnalysisPoint(dataset=..., solver=..., use_jax=False, ...).VisualizerPoint.visualize(...)(verify class name fromautolens/point/model/visualizer.py).Workspace sub-step 2 — JAX viz (image-plane only):
scripts/point_source/visualization_jax.py:from autofit.jax.pytrees import enable_pytrees, register_model+enable_pytrees()at module level.fit_positions_cls=FitPositionsImagePairAll(or equivalent image-plane variant perjax_likelihood_functions/point_source/image_plane.py).register_model(model)after model is built.al.AnalysisPoint(..., use_jax=True, use_jax_for_visualization=True)— depends on the library fix.VisualizerPoint.visualize(...)directly. Notry/exceptwrapper.fit.png(or equivalent) lands on disk.Workspace sub-step 3 — Live Nautilus jit-cached:
scripts/point_source/modeling_visualization_jit.py:analysis.fit_for_visualization(instance)twice, assert second is significantly faster.n_live=50, n_like_max=1500, iterations_per_quick_update=500.rmtree(output/scripts/point_source/images/modeling_visualization_jit/mge_linear/)before the Nautilus call so reruns don't silently resume from cachedsamples.csv(lesson from PR feat: autolens interferometer JAX visualization scripts #87)._jitted_fit_from is not Noneon the analysis post-search AND at least onefit.pngproduced.Workspace env vars:
config/build/env_vars.yaml:pattern: "point_source/visualization_jax"→ unsetPYAUTO_DISABLE_JAX, PYAUTO_SMALL_DATASETS.pattern: "point_source/modeling_visualization_jit"→ unsetPYAUTO_DISABLE_JAX, PYAUTO_SMALL_DATASETS, PYAUTO_TEST_MODE, PYAUTO_FAST_PLOTS.Source-plane feasibility gate (decide late in implementation):
FitPositionsSource+jax.jit(analysis.fit_from)succeeds. If it still raises (perscripts/CLAUDE.mdL132), do NOT add a source-plane variant in this task — file a follow-up prompt. If it works, addscripts/point_source/visualization_jax_source_plane.pyanalogously.Key Files
PyAutoLens/autolens/point/model/analysis.py— 2-line**kwargsfixautolens_workspace_test/scripts/point_source/visualization.py(NEW)autolens_workspace_test/scripts/point_source/visualization_jax.py(NEW)autolens_workspace_test/scripts/point_source/modeling_visualization_jit.py(NEW)autolens_workspace_test/config/build/env_vars.yaml(EDIT — 2 new override entries)Reference patterns
AnalysisInterferometer.__init__**kwargsfix (same pattern)imaging/visualization_jax.pypost-register_modelpatterninterferometer/modeling_visualization_jit.pywithrmtreecleanupscripts/jax_likelihood_functions/point_source/image_plane.py— image-plane chi-squared (JIT works)scripts/jax_likelihood_functions/point_source/source_plane.py— source-plane (JIT blocked, reference for the feasibility probe)Original Prompt
Click to expand starting prompt
(elided — full text in PyAutoPrompt/issued/jax_viz_point_source_coverage.md)