Why does MCMC NUTS require a number of steps

Considering the paper introducing NUTS (https://www.jmlr.org/papers/volume15/hoffman14a/hoffman14a.pdf) has the title of ‘The No-U-Turn Sampler: Adaptively Setting Path Length in HMC’ and effictively just being an HMC sampler that determines the number of steps and step size parameter automatically,
Why does it seem to be required to provide the NumPyro MCMC with a num_warmup and num_steps (even when using NUTS)?

Example code:

def run_inference(model, args, rng_key, X, Y, D_H):
    start = time.time()
    kernel = NUTS(model)
    mcmc = MCMC(
        kernel,
        num_warmup=args["num_warmup"],
        num_samples=args["num_samples"],
        num_chains=args["num_chains"],
        progress_bar=False,
    )
    mcmc.run(rng_key, X, Y, D_H)
    mcmc.print_summary()
    print("\nMCMC elapsed time:", time.time() - start)
    return mcmc.get_samples()

Removing num_samples and num_chains seems to be required as removing these parameters causes:
TypeError: MCMC.init() missing 2 required keyword-only arguments: ‘num_warmup’ and ‘num_samples’

I’d like to know if I’m just doing it wrong and it is possible to let NUTS determine number of steps, or if this is some limitation of the implementation.

Thanks in advance for any responses.

You are correct about NUTS, as is claimed in the paper:

extension to HMC that eliminates the need to set a number of steps L

I think what you mean by ‘a number of steps’ is this L parameter in HMC, which means the number of leapfrog updates. However, the num_samples means the number of samples desired to be generated from the MCMC, corresponding to the parameter M in the NUTS paper.
Just a small confusion i guess? :wink: In HMC, you have to perform some (L) steps of updates per sample, which is no longer needed in NUTS. Hope I didn’t misunderstand your question.

Thank you for your response. I am rather ashamed of this misunderstanding, but your answer is very helpful.