Skip to content

fix: avoid redundant Nautilus completion pass #1651

Closed

Description

@Jammy2211

Overview

Nautilus factor searches that converge in their first call still trigger an intermediate result update and a second no-op sampler call. Remove this overhead, following the completed Dynesty EP optimisation in #1642.

Plan

  • Recognize convergence immediately while preserving finite-budget updates.
  • Cover convergence, chunked execution and likelihood limits with regression tests.
  • Compare sampler/update calls, seeded results and timing, then run the full PyAutoFit suite serially.

Detailed implementation plan

  • Repository: PyAutoFit; clean main, no competing claim. Existing hook-maintenance branch does not overlap.
  • Branch: feature/ep-nautilus-single-pass.
  • Inspect the installed Nautilus run completion contract and likelihood counter before selecting the completion condition.
  • Update autofit/non_linear/search/nest/nautilus/search.py (Nautilus.call_search, and budget handling if required). Do not infer likelihood budget exhaustion from posterior sample counts.
  • Extend test_autofit/non_linear/search/nest/test_nautilus.py with converged and finite-cadence cases, global limits and a seeded real-search comparison. No public API change intended.
  • Validate targeted tests and full serial test_autofit; measure overhead without changing sampler settings or EP mathematics.

Original user request

We have begun a task speeding up the PyAutoFit source code to make EP run faster without PyautoFit overheads, continue this task

The human approved this bounded follow-up after explanation: “ok, do it.”

Existing prompt

PyAutoMind/draft/bug/autofit/nautilus_converged_run_double_pass.md records the redundant completion pass and the requirement to preserve finite-cadence sampling.

Activity

  1. Jammy2211 commented on Sep 29, 2026

    @Jammy2211
    CollaboratorAuthor

    Implementation is complete in feature/ep-nautilus-single-pass (base 69bb11d54, source edits not yet committed). Nautilus uses its own convergence return, advances cumulative budgets using n_like, and stops at a global cap even if a batch overshoots it.

    Validation:

    • Full serial PyAutoFit suite: 2934 passed, 2 skipped (300.23 s).
    • Nautilus tests: 16 passed; all 8 new regression cases fail against the original methods.
    • Real fits with seeds 13 and 14: 2 → 1 sampler calls, 1 → 0 intermediate updates, posterior parameters/likelihoods/weights bit-identical.
    • Instrumented intermediate update removed: 68–75 ms/search. Total timing is noisy; no end-to-end percentage speedup claimed.
    • Autofit workspace smoke: 8/8 scripts, 2/2 notebooks passed in isolated disposable checkouts. Wider smoke stopped during environment preparation after the shipping gate below.

    Fresh Heart tick (2026-09-29T19:22:53Z) is RED:

    PyAutoFit: 1 commit(s) behind origin
    PyAutoLens: 1 commit(s) behind origin

    These refer to canonical checkouts; the task branch is based on current PyAutoFit origin/main. Awaiting a human development-only override or cleared Heart before commit/push/PR. No merge or release requested. Detailed local evidence paths and resume instructions are in the Mind prompt's handoff.

  2. Jammy2211 commented on Sep 29, 2026

    @Jammy2211
    CollaboratorAuthor

    The live human authorized the named #1651 development override and same-turn merge: "yeah, and then do a $prm".

    Exact Heart RED reasons previously surfaced:

    • PyAutoFit: 1 commit(s) behind origin
    • PyAutoLens: 1 commit(s) behind origin

    Passed branch gates: 2934 tests passed / 2 skipped serially; 16 Nautilus tests passed; 8 autofit workspace scripts + 2 notebooks passed; seeded posterior samples/likelihoods/weights bit-identical. The broader downstream smoke run has resumed. No release or CI/protection bypass is authorized; merge remains conditional on every required CI run and matrix leg passing.

  3. Jammy2211 commented on Sep 29, 2026

    @Jammy2211
    CollaboratorAuthor

    Downstream smoke validation

    All eight configured workspace groups passed against this task's PyAutoFit source, using pyauto-heart smoke and isolated disposable workspace checkouts.

    Workspace Scripts passed Notebooks passed Failed
    autofit 8 2 0
    autogalaxy 14 2 0
    autolens 41 2 0
    autolens_test 32 0 0
    euclid 9 0 0
    howtolens 50 0 0
    autocti 3 0 0
    autocti_test 3 0 0
    Total 160 6 0

    CTI environments used the documented no-root GSL extraction into task scratch; no system packages changed. Full log: .worktrees/ep-nautilus-single-pass/smoke-resume.log; workspace JSON reports: .smoke-root/*/test-results/ within that task.

    Source validation remains 2934 tests passed / 2 skipped; all 8 new regression cases fail against the original methods. The human's named Heart RED development override and same-turn /prm authorization remain recorded above; no release is authorized.

  4. Jammy2211 commented on Sep 30, 2026

    @Jammy2211
    CollaboratorAuthor

    Shipped. Merged in #1652 (merge 5cf687d, 2026-09-30): a converged single-chunk Nautilus fit no longer runs a second no-op run() pass with a during_analysis update. Pending the next PyAutoFit release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions