From df89ab76e4e23147045a489dfe53b86fdb745b25 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Thu, 30 Jul 2026 10:06:59 +0100 Subject: [PATCH 1/2] docs: correct false simulator-JAX claims (registration, eager-on-JAX, NUFFT) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The autogalaxy half of PyAutoLabs/autolens_workspace#379. All measured against the installed stack. 1. "The simulator handles pytree registration internally" — no simulator registers pytrees anywhere, so the documented @jax.jit wrap fails with `TypeError ... value is of type Galaxies`. Unimplementable as worded too: JAX flattens jitted arguments at trace time, before entering the callee. The correct call is now named — autogalaxy.jax.register_galaxies_classes, added in PyAutoGalaxy#537 for exactly this gap. 2. "eager via_galaxies_from(...) already runs on JAX" — returns a numpy.ndarray-backed dataset, not jax.Array. 3. The @jax.jit recipe fails even WITH registration, inside autoarray (preprocess.py:153, then array_2d_util.py). Separate library bug, filed separately; docs now point at the eager call instead. 4. Two separate stale NUFFT claims: guides/using_jax.py said TransformerNUFFT is not JAX-traceable (shipped backwards in #181 this morning), and interferometer/simulator.py said it is pynufft-backed with nufftax "a research path". Per autoarray's own error text TransformerNUFFT IS the default JAX-native nufftax-backed transformer (nufftax 0.3.1 installed); TransformerNUFFTPyNUFFT is the legacy pynufft one. Why this went unnoticed: both __JAX Variant__ recipes live inside ```python fences (prose, not executed cells) and neither simulator.py is in smoke_tests.txt, so `dataset_jax = simulate(galaxies)` looked like a working call while never running. Same failure mode as the six likelihood_function.py __JAX__ blocks removed in #181. Refs PyAutoLabs/autolens_workspace#379 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01CWqjHGXUut25TEB8octU8H --- notebooks/guides/using_jax.ipynb | 31 ++++++++------- notebooks/imaging/simulator.ipynb | 34 ++++++++-------- notebooks/interferometer/simulator.ipynb | 49 +++++++++++++----------- scripts/guides/using_jax.py | 31 ++++++++------- scripts/imaging/simulator.py | 34 ++++++++-------- scripts/interferometer/simulator.py | 49 +++++++++++++----------- workspace_index.json | 6 +-- 7 files changed, 124 insertions(+), 110 deletions(-) diff --git a/notebooks/guides/using_jax.ipynb b/notebooks/guides/using_jax.ipynb index 4c1d12e4..9a4421a0 100644 --- a/notebooks/guides/using_jax.ipynb +++ b/notebooks/guides/using_jax.ipynb @@ -44,27 +44,28 @@ "\n", "__Writing @jax.jit Yourself__\n", "\n", - "Pass `use_jax=True` to a simulator constructor and wrap your call in `@jax.jit` when you want to render many\n", - "datasets fast \u2014 parameter sweeps, mock-data studies, batch figure generation:\n", + "Pass `use_jax=True` to a simulator constructor to run the image calculation through JAX, for parameter sweeps,\n", + "mock-data studies or batch figure generation:\n", "\n", "```python\n", - "import jax\n", - "\n", "simulator = ag.SimulatorImaging(\n", " exposure_time=300.0, psf=psf, background_sky_level=0.1, use_jax=True\n", ")\n", "\n", - "@jax.jit\n", - "def simulate(galaxies):\n", - " return simulator.via_galaxies_from(galaxies=galaxies, grid=grid)\n", + "dataset = simulator.via_galaxies_from(galaxies=galaxies, grid=grid)\n", "```\n", "\n", - "The simulator handles pytree registration internally, so you write nothing JAX-specific beyond the decorator.\n", - "Note that eager `simulator.via_galaxies_from(galaxies, grid)` (no `@jax.jit`) already runs on JAX and is\n", - "sufficient for one-off simulations \u2014 the `@jax.jit` wrap only pays off when you call the function many times.\n", + "**Wrapping that call in `@jax.jit` does not currently work.** Two things stop it, and it is worth knowing which\n", + "is which:\n", + "\n", + "- **You must register the pytrees yourself first.** Nothing in the library does it for you, and nothing can: JAX\n", + " flattens a jitted function's arguments at trace time, *before* entering the callee, so a simulator that\n", + " registered internally would already be too late. The one-time call is\n", + " `autogalaxy.jax.register_galaxies_classes(galaxies)`.\n", + "- **Even with that, the jitted simulator call fails inside autoarray** on array sites that do not yet thread\n", + " `xp` \u2014 see PyAutoLabs/PyAutoArray for the tracked issue. Until it is fixed, use the eager call above.\n", "\n", - "The per-dataset-type `simulator.py` scripts (`scripts/imaging/simulator.py`,\n", - "`scripts/interferometer/simulator.py`) each show this pattern in their `__JAX Variant__` section.\n", + "Note the eager call returns a dataset whose `.data.array` is a `numpy.ndarray`, not a `jax.Array`.\n", "\n", "__Custom Likelihood Functions__\n", "\n", @@ -117,8 +118,10 @@ "Omit `xp=jnp` and the fit falls back to NumPy internals, raising `TracerArrayConversionError` the moment JAX\n", "traces it.\n", "\n", - "For interferometer data the same shape applies with `ag.FitInterferometer`, with one constraint: use\n", - "`TransformerDFT` (the default). `TransformerNUFFT` is not JAX-traceable.\n", + "For interferometer data the same shape applies with `ag.FitInterferometer`. Both `TransformerDFT` and the\n", + "nufftax-backed `TransformerNUFFT` are JAX-traceable, so either works; only the legacy pynufft-backed\n", + "`TransformerNUFFTPyNUFFT` is not. Note the defaults differ by class: `Interferometer` (what a fit uses) defaults\n", + "to `TransformerNUFFT`, while `SimulatorInterferometer` defaults to `TransformerDFT`.\n", "\n", "**Via `Fitness` \u2014 the production path.** A non-linear search does not call your function; it calls a `Fitness`\n", "object, which maps a raw parameter vector to a model instance, calls the analysis, and returns the figure of\n", diff --git a/notebooks/imaging/simulator.ipynb b/notebooks/imaging/simulator.ipynb index 6d4aaca0..47a5999a 100644 --- a/notebooks/imaging/simulator.ipynb +++ b/notebooks/imaging/simulator.ipynb @@ -481,14 +481,11 @@ "\n", "__JAX Variant__\n", "\n", - "For an order-of-magnitude speedup on large or repeated simulations\n", - "(parameter sweeps, mock-data studies, batch figure generation), construct\n", - "the simulator with `use_jax=True` and wrap your call in `@jax.jit`. The\n", - "simulator handles pytree registration internally.\n", + "For large or repeated simulations (parameter sweeps, mock-data studies,\n", + "batch figure generation), construct the simulator with `use_jax=True` so\n", + "the image calculation runs through JAX:\n", "\n", "```python\n", - "import jax\n", - "\n", "simulator_jax = ag.SimulatorImaging(\n", " exposure_time=300.0,\n", " psf=psf,\n", @@ -497,20 +494,23 @@ " use_jax=True,\n", ")\n", "\n", - "@jax.jit\n", - "def simulate(galaxies):\n", - " return simulator_jax.via_galaxies_from(galaxies=galaxies, grid=grid)\n", - "\n", - "dataset_jax = simulate(galaxies) # Imaging with jax.Array data\n", + "dataset_jax = simulator_jax.via_galaxies_from(galaxies=galaxies, grid=grid)\n", "```\n", "\n", - "The `dataset_jax.data.array` is a `jax.Array`; `aplt.fits_imaging` and the\n", - "plotters call `numpy.asarray()` internally, so saving / plotting works\n", - "without manual conversion.\n", + "The returned `dataset_jax.data.array` is a `numpy.ndarray`. `aplt.fits_imaging`\n", + "and the plotters call `numpy.asarray()` internally, so saving / plotting\n", + "works either way.\n", + "\n", + "**Wrapping the call in `@jax.jit` does not currently work.** Two separate\n", + "things stop it:\n", "\n", - "Note: eager `simulator_jax.via_galaxies_from(galaxies, grid)` (no `@jax.jit`)\n", - "already runs on JAX and is sufficient for one-off simulations. The\n", - "`@jax.jit` wrap is only beneficial when you call the function many times.\n", + "- **Pytree registration is yours to do, before the first jitted call** \u2014\n", + " `autogalaxy.jax.register_galaxies_classes(galaxies)`. Nothing in the\n", + " library does it for you, and nothing can: JAX flattens a jitted\n", + " function's arguments at trace time, before entering the callee.\n", + "- **Even with that, the jitted call fails inside autoarray** on array sites\n", + " that do not yet thread `xp`. Tracked in PyAutoArray; until it is fixed,\n", + " use the eager call above.\n", "\n", "See `scripts/guides/data_structures.py` for the broader \"JIT-it-\n", "yourself\" pattern." diff --git a/notebooks/interferometer/simulator.ipynb b/notebooks/interferometer/simulator.ipynb index 8f4a4942..6201533e 100644 --- a/notebooks/interferometer/simulator.ipynb +++ b/notebooks/interferometer/simulator.ipynb @@ -388,41 +388,46 @@ "__JAX Variant__\n", "\n", "For fast repeated interferometer simulations, construct the simulator\n", - "with `use_jax=True` and wrap the call in `@jax.jit`. The simulator\n", - "handles pytree registration internally.\n", + "with `use_jax=True` so the image calculation and transform run through\n", + "JAX:\n", "\n", "```python\n", - "import jax\n", "import jax.numpy as jnp\n", "\n", "simulator_jax = ag.SimulatorInterferometer(\n", " uv_wavelengths=uv_wavelengths,\n", " exposure_time=300.0,\n", " noise_sigma=0.1,\n", - " transformer_class=ag.TransformerDFT, # NUFFT (pynufft) is not JAX-traceable\n", " use_jax=True,\n", ")\n", "\n", - "@jax.jit\n", - "def simulate(galaxies):\n", - " galaxy_obj = ag.Galaxies(galaxies=galaxies)\n", - " image = galaxy_obj.image_2d_from(grid=real_space_grid, xp=jnp)\n", - " return simulator_jax.via_image_from(image=image)\n", - "\n", - "dataset_jax = simulate(galaxies) # Interferometer with jax.Array visibilities\n", + "image = ag.Galaxies(galaxies=galaxies).image_2d_from(\n", + " grid=real_space_grid, xp=jnp\n", + ")\n", + "dataset_jax = simulator_jax.via_image_from(image=image)\n", "```\n", "\n", - "Two notes:\n", - "\n", - "- Use `TransformerDFT` (the default) under JAX. `TransformerNUFFT`\n", - " (pynufft) is faster on large UV sets but is not JAX-traceable; the\n", - " `nufftax` replacement is a research path (see\n", - " `autolens_workspace_test/scripts/interferometer/nufft.py`).\n", - "- Eager `simulator_jax.via_image_from(image)` already runs on JAX without\n", - " the `@jax.jit` wrap; the JIT only matters for repeated calls.\n", - "\n", - "See `scripts/guides/data_structures.py` for the broader \"JIT-it-\n", - "yourself\" pattern." + "**Wrapping the call in `@jax.jit` does not currently work.** Two separate\n", + "things stop it:\n", + "\n", + "- **Pytree registration is yours to do, before the first jitted call** \u2014\n", + " `autogalaxy.jax.register_galaxies_classes(galaxies)`. Nothing in the\n", + " library does it for you, and nothing can: JAX flattens a jitted\n", + " function's arguments at trace time, before entering the callee.\n", + "- **Even with that, the jitted call fails inside autoarray** on array\n", + " sites that do not yet thread `xp`. Tracked in PyAutoArray; until it is\n", + " fixed, use the eager call above.\n", + "\n", + "On transformers: `TransformerDFT` (the `SimulatorInterferometer` default)\n", + "and the nufftax-backed `TransformerNUFFT` (the `Interferometer` default,\n", + "so what a fit uses) are both JAX-traceable. Only the legacy pynufft-backed\n", + "`TransformerNUFFTPyNUFFT` is not \u2014 see\n", + "`autolens_workspace_test/scripts/interferometer/nufft.py` for the parity\n", + "work.\n", + "\n", + "See `scripts/guides/using_jax.py` for the full picture and\n", + "`scripts/guides/data_structures.py` for the broader \"JIT-it-yourself\"\n", + "pattern." ] } ], diff --git a/scripts/guides/using_jax.py b/scripts/guides/using_jax.py index 8232065b..ea807174 100644 --- a/scripts/guides/using_jax.py +++ b/scripts/guides/using_jax.py @@ -39,27 +39,28 @@ __Writing @jax.jit Yourself__ -Pass `use_jax=True` to a simulator constructor and wrap your call in `@jax.jit` when you want to render many -datasets fast — parameter sweeps, mock-data studies, batch figure generation: +Pass `use_jax=True` to a simulator constructor to run the image calculation through JAX, for parameter sweeps, +mock-data studies or batch figure generation: ```python -import jax - simulator = ag.SimulatorImaging( exposure_time=300.0, psf=psf, background_sky_level=0.1, use_jax=True ) -@jax.jit -def simulate(galaxies): - return simulator.via_galaxies_from(galaxies=galaxies, grid=grid) +dataset = simulator.via_galaxies_from(galaxies=galaxies, grid=grid) ``` -The simulator handles pytree registration internally, so you write nothing JAX-specific beyond the decorator. -Note that eager `simulator.via_galaxies_from(galaxies, grid)` (no `@jax.jit`) already runs on JAX and is -sufficient for one-off simulations — the `@jax.jit` wrap only pays off when you call the function many times. +**Wrapping that call in `@jax.jit` does not currently work.** Two things stop it, and it is worth knowing which +is which: + +- **You must register the pytrees yourself first.** Nothing in the library does it for you, and nothing can: JAX + flattens a jitted function's arguments at trace time, *before* entering the callee, so a simulator that + registered internally would already be too late. The one-time call is + `autogalaxy.jax.register_galaxies_classes(galaxies)`. +- **Even with that, the jitted simulator call fails inside autoarray** on array sites that do not yet thread + `xp` — see PyAutoLabs/PyAutoArray for the tracked issue. Until it is fixed, use the eager call above. -The per-dataset-type `simulator.py` scripts (`scripts/imaging/simulator.py`, -`scripts/interferometer/simulator.py`) each show this pattern in their `__JAX Variant__` section. +Note the eager call returns a dataset whose `.data.array` is a `numpy.ndarray`, not a `jax.Array`. __Custom Likelihood Functions__ @@ -112,8 +113,10 @@ def log_likelihood(instance): Omit `xp=jnp` and the fit falls back to NumPy internals, raising `TracerArrayConversionError` the moment JAX traces it. -For interferometer data the same shape applies with `ag.FitInterferometer`, with one constraint: use -`TransformerDFT` (the default). `TransformerNUFFT` is not JAX-traceable. +For interferometer data the same shape applies with `ag.FitInterferometer`. Both `TransformerDFT` and the +nufftax-backed `TransformerNUFFT` are JAX-traceable, so either works; only the legacy pynufft-backed +`TransformerNUFFTPyNUFFT` is not. Note the defaults differ by class: `Interferometer` (what a fit uses) defaults +to `TransformerNUFFT`, while `SimulatorInterferometer` defaults to `TransformerDFT`. **Via `Fitness` — the production path.** A non-linear search does not call your function; it calls a `Fitness` object, which maps a raw parameter vector to a model instance, calls the analysis, and returns the figure of diff --git a/scripts/imaging/simulator.py b/scripts/imaging/simulator.py index a253b24b..05ee8a70 100644 --- a/scripts/imaging/simulator.py +++ b/scripts/imaging/simulator.py @@ -251,14 +251,11 @@ __JAX Variant__ -For an order-of-magnitude speedup on large or repeated simulations -(parameter sweeps, mock-data studies, batch figure generation), construct -the simulator with `use_jax=True` and wrap your call in `@jax.jit`. The -simulator handles pytree registration internally. +For large or repeated simulations (parameter sweeps, mock-data studies, +batch figure generation), construct the simulator with `use_jax=True` so +the image calculation runs through JAX: ```python -import jax - simulator_jax = ag.SimulatorImaging( exposure_time=300.0, psf=psf, @@ -267,20 +264,23 @@ use_jax=True, ) -@jax.jit -def simulate(galaxies): - return simulator_jax.via_galaxies_from(galaxies=galaxies, grid=grid) - -dataset_jax = simulate(galaxies) # Imaging with jax.Array data +dataset_jax = simulator_jax.via_galaxies_from(galaxies=galaxies, grid=grid) ``` -The `dataset_jax.data.array` is a `jax.Array`; `aplt.fits_imaging` and the -plotters call `numpy.asarray()` internally, so saving / plotting works -without manual conversion. +The returned `dataset_jax.data.array` is a `numpy.ndarray`. `aplt.fits_imaging` +and the plotters call `numpy.asarray()` internally, so saving / plotting +works either way. + +**Wrapping the call in `@jax.jit` does not currently work.** Two separate +things stop it: -Note: eager `simulator_jax.via_galaxies_from(galaxies, grid)` (no `@jax.jit`) -already runs on JAX and is sufficient for one-off simulations. The -`@jax.jit` wrap is only beneficial when you call the function many times. +- **Pytree registration is yours to do, before the first jitted call** — + `autogalaxy.jax.register_galaxies_classes(galaxies)`. Nothing in the + library does it for you, and nothing can: JAX flattens a jitted + function's arguments at trace time, before entering the callee. +- **Even with that, the jitted call fails inside autoarray** on array sites + that do not yet thread `xp`. Tracked in PyAutoArray; until it is fixed, + use the eager call above. See `scripts/guides/data_structures.py` for the broader "JIT-it- yourself" pattern. diff --git a/scripts/interferometer/simulator.py b/scripts/interferometer/simulator.py index 4e5696b0..14184680 100644 --- a/scripts/interferometer/simulator.py +++ b/scripts/interferometer/simulator.py @@ -191,39 +191,44 @@ __JAX Variant__ For fast repeated interferometer simulations, construct the simulator -with `use_jax=True` and wrap the call in `@jax.jit`. The simulator -handles pytree registration internally. +with `use_jax=True` so the image calculation and transform run through +JAX: ```python -import jax import jax.numpy as jnp simulator_jax = ag.SimulatorInterferometer( uv_wavelengths=uv_wavelengths, exposure_time=300.0, noise_sigma=0.1, - transformer_class=ag.TransformerDFT, # NUFFT (pynufft) is not JAX-traceable use_jax=True, ) -@jax.jit -def simulate(galaxies): - galaxy_obj = ag.Galaxies(galaxies=galaxies) - image = galaxy_obj.image_2d_from(grid=real_space_grid, xp=jnp) - return simulator_jax.via_image_from(image=image) - -dataset_jax = simulate(galaxies) # Interferometer with jax.Array visibilities +image = ag.Galaxies(galaxies=galaxies).image_2d_from( + grid=real_space_grid, xp=jnp +) +dataset_jax = simulator_jax.via_image_from(image=image) ``` -Two notes: - -- Use `TransformerDFT` (the default) under JAX. `TransformerNUFFT` - (pynufft) is faster on large UV sets but is not JAX-traceable; the - `nufftax` replacement is a research path (see - `autolens_workspace_test/scripts/interferometer/nufft.py`). -- Eager `simulator_jax.via_image_from(image)` already runs on JAX without - the `@jax.jit` wrap; the JIT only matters for repeated calls. - -See `scripts/guides/data_structures.py` for the broader "JIT-it- -yourself" pattern. +**Wrapping the call in `@jax.jit` does not currently work.** Two separate +things stop it: + +- **Pytree registration is yours to do, before the first jitted call** — + `autogalaxy.jax.register_galaxies_classes(galaxies)`. Nothing in the + library does it for you, and nothing can: JAX flattens a jitted + function's arguments at trace time, before entering the callee. +- **Even with that, the jitted call fails inside autoarray** on array + sites that do not yet thread `xp`. Tracked in PyAutoArray; until it is + fixed, use the eager call above. + +On transformers: `TransformerDFT` (the `SimulatorInterferometer` default) +and the nufftax-backed `TransformerNUFFT` (the `Interferometer` default, +so what a fit uses) are both JAX-traceable. Only the legacy pynufft-backed +`TransformerNUFFTPyNUFFT` is not — see +`autolens_workspace_test/scripts/interferometer/nufft.py` for the parity +work. + +See `scripts/guides/using_jax.py` for the full picture and +`scripts/guides/data_structures.py` for the broader "JIT-it-yourself" +pattern. """ diff --git a/workspace_index.json b/workspace_index.json index 2823f29a..be066cca 100644 --- a/workspace_index.json +++ b/workspace_index.json @@ -853,10 +853,7 @@ "likelihood_function.py", "scripts/guides/data_structures.py", "scripts/imaging/likelihood_function.py", - "scripts/imaging/simulator.py", "scripts/interferometer/likelihood_function.py", - "scripts/interferometer/simulator.py", - "simulator.py", "start_here.py" ], "notebook": "notebooks/guides/using_jax.ipynb", @@ -2411,7 +2408,8 @@ ], "cross_refs": [ "autolens_workspace_test/scripts/interferometer/nufft.py", - "scripts/guides/data_structures.py" + "scripts/guides/data_structures.py", + "scripts/guides/using_jax.py" ], "notebook": "notebooks/interferometer/simulator.ipynb", "path": "scripts/interferometer/simulator.py", From c2b47fd88a241ff6d172b8bdd53a44eb48b3c3b9 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Thu, 30 Jul 2026 10:16:23 +0100 Subject: [PATCH 2/2] docs: make README folder refs repo-relative (unblocks the widened navigator gate) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PyAutoHands#213 ("gate relative folder references in README prose") merged at 08:28:46Z, seven minutes after this repo's main last passed Navigator Check (1abfc8c8, 08:21:38Z). navigator_check.yml is consumed @main, so this PR was the first to run under the widened gate and it flagged 5 pre-existing references: scripts/README.md:1 -> autogalaxy_workspace/scripts scripts/README.md:4 -> autogalaxy_workspace/notebooks scripts/interferometer/features/linear_light_profiles/README.md -> autogalaxy_workspace/scripts/imaging/features/... scripts/interferometer/features/multi_gaussian_expansion/README.md -> ditto scripts/interferometer/features/shapelets/README.md -> ditto None were touched by this PR; all are unchanged on main, which will fail its next run too. They are genuine drift rather than a checker false positive: autolens_workspace words the same sentences repo-relative ("The `scripts` folder") and passes the identical gate, while this repo used the repo-name-prefixed form, which cannot resolve from the repo root because the root IS autogalaxy_workspace. Dropped the `autogalaxy_workspace/` prefix from those 5 folder references. References to `autogalaxy_workspace/README.md` are left alone — the gate covers folder refs only, and autolens_workspace keeps that form too. The notebooks/ README mirrors are generated from scripts/, so generate.py propagated the change. Refs PyAutoLabs/autolens_workspace#379 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01CWqjHGXUut25TEB8octU8H --- notebooks/README.md | 4 ++-- .../interferometer/features/linear_light_profiles/README.md | 2 +- .../features/multi_gaussian_expansion/README.md | 2 +- notebooks/interferometer/features/shapelets/README.md | 2 +- scripts/README.md | 4 ++-- .../interferometer/features/linear_light_profiles/README.md | 2 +- .../features/multi_gaussian_expansion/README.md | 2 +- scripts/interferometer/features/shapelets/README.md | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/notebooks/README.md b/notebooks/README.md index ee0c7abe..63b66fe4 100644 --- a/notebooks/README.md +++ b/notebooks/README.md @@ -1,7 +1,7 @@ -The `autogalaxy_workspace/scripts` folder contains the packages for different science use-cases, where each package +The `scripts` folder contains the packages for different science use-cases, where each package only contains Python scripts (e.g. `.py` files) illustrating how to perform a specific task. -For Jupyter Notebook examples illustrating the same use-cases, see the `autogalaxy_workspace/notebooks` folder. +For Jupyter Notebook examples illustrating the same use-cases, see the `notebooks` folder. Refer to the `autogalaxy_workspace/README.md` file or the readthedocs documentation for a description of which folder you should go into next if you are unsure. diff --git a/notebooks/interferometer/features/linear_light_profiles/README.md b/notebooks/interferometer/features/linear_light_profiles/README.md index ded9aff5..86e4dda6 100644 --- a/notebooks/interferometer/features/linear_light_profiles/README.md +++ b/notebooks/interferometer/features/linear_light_profiles/README.md @@ -25,4 +25,4 @@ A full guide to result analysis is given at `autogalaxy_workspace/*/guides/resul # Imaging Equivalent For the CCD-imaging version of these scripts, see -`autogalaxy_workspace/scripts/imaging/features/linear_light_profiles`. +`scripts/imaging/features/linear_light_profiles`. diff --git a/notebooks/interferometer/features/multi_gaussian_expansion/README.md b/notebooks/interferometer/features/multi_gaussian_expansion/README.md index e732b459..4fabe7d7 100644 --- a/notebooks/interferometer/features/multi_gaussian_expansion/README.md +++ b/notebooks/interferometer/features/multi_gaussian_expansion/README.md @@ -27,4 +27,4 @@ A full guide to result analysis is given at `autogalaxy_workspace/*/guides/resul # Imaging Equivalent For the CCD-imaging version of these scripts, see -`autogalaxy_workspace/scripts/imaging/features/multi_gaussian_expansion`. +`scripts/imaging/features/multi_gaussian_expansion`. diff --git a/notebooks/interferometer/features/shapelets/README.md b/notebooks/interferometer/features/shapelets/README.md index c3f2de6d..ba0f55c6 100644 --- a/notebooks/interferometer/features/shapelets/README.md +++ b/notebooks/interferometer/features/shapelets/README.md @@ -27,4 +27,4 @@ A full guide to result analysis is given at `autogalaxy_workspace/*/guides/resul # Imaging Equivalent -For the CCD-imaging version of these scripts, see `autogalaxy_workspace/scripts/imaging/features/shapelets`. +For the CCD-imaging version of these scripts, see `scripts/imaging/features/shapelets`. diff --git a/scripts/README.md b/scripts/README.md index ee0c7abe..63b66fe4 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,7 +1,7 @@ -The `autogalaxy_workspace/scripts` folder contains the packages for different science use-cases, where each package +The `scripts` folder contains the packages for different science use-cases, where each package only contains Python scripts (e.g. `.py` files) illustrating how to perform a specific task. -For Jupyter Notebook examples illustrating the same use-cases, see the `autogalaxy_workspace/notebooks` folder. +For Jupyter Notebook examples illustrating the same use-cases, see the `notebooks` folder. Refer to the `autogalaxy_workspace/README.md` file or the readthedocs documentation for a description of which folder you should go into next if you are unsure. diff --git a/scripts/interferometer/features/linear_light_profiles/README.md b/scripts/interferometer/features/linear_light_profiles/README.md index ded9aff5..86e4dda6 100644 --- a/scripts/interferometer/features/linear_light_profiles/README.md +++ b/scripts/interferometer/features/linear_light_profiles/README.md @@ -25,4 +25,4 @@ A full guide to result analysis is given at `autogalaxy_workspace/*/guides/resul # Imaging Equivalent For the CCD-imaging version of these scripts, see -`autogalaxy_workspace/scripts/imaging/features/linear_light_profiles`. +`scripts/imaging/features/linear_light_profiles`. diff --git a/scripts/interferometer/features/multi_gaussian_expansion/README.md b/scripts/interferometer/features/multi_gaussian_expansion/README.md index e732b459..4fabe7d7 100644 --- a/scripts/interferometer/features/multi_gaussian_expansion/README.md +++ b/scripts/interferometer/features/multi_gaussian_expansion/README.md @@ -27,4 +27,4 @@ A full guide to result analysis is given at `autogalaxy_workspace/*/guides/resul # Imaging Equivalent For the CCD-imaging version of these scripts, see -`autogalaxy_workspace/scripts/imaging/features/multi_gaussian_expansion`. +`scripts/imaging/features/multi_gaussian_expansion`. diff --git a/scripts/interferometer/features/shapelets/README.md b/scripts/interferometer/features/shapelets/README.md index c3f2de6d..ba0f55c6 100644 --- a/scripts/interferometer/features/shapelets/README.md +++ b/scripts/interferometer/features/shapelets/README.md @@ -27,4 +27,4 @@ A full guide to result analysis is given at `autogalaxy_workspace/*/guides/resul # Imaging Equivalent -For the CCD-imaging version of these scripts, see `autogalaxy_workspace/scripts/imaging/features/shapelets`. +For the CCD-imaging version of these scripts, see `scripts/imaging/features/shapelets`.