Skip to content

v0.7.3

Compare
Choose a tag to compare
@matthewfeickert matthewfeickert released this 17 Aug 15:40
· 278 commits to main since this release

This is a patch release from v0.7.2v0.7.3.

Fixes

  • Use np.prod API over np.product as np.product is deprecated as of NumPy v1.25.0. (PR #2242)

  • Guard pyhf.optimize.opt_minuit.minuit_optimizer optimizer strategy from None to ensure iminuit.Minuit.strategy strategies are correctly handled. (PRs #2277, #2278)

    The fixed bug was subtle and only occurred for specific configurations of settings and arguments where do_grad=False was used (either explicitly by provided kwarg or implicitly through defaults). To determine if you might have been affected by it, check your code for setups like the following.

    # Bug is backend independent. JAX is selected as an example where
    # do_grad=False might be selected in response to the backend's value of
    # pyhf.tensorlib.default_do_grad being True.
    pyhf.set_backend("jax", pyhf.optimize.minuit_optimizer(strategy=0))
    
    ...
    
    fit_result, opt_result = pyhf.infer.mle.fit(
        data, model, return_result_obj=True, do_grad=False
    )
    assert opt_result.minuit.strategy.strategy == 0  # fails for pyhf v0.7.2

    Full example that fails in pyhf v0.7.2:

    import pyhf
    
    pyhf.set_backend("jax", pyhf.optimize.minuit_optimizer(strategy=0))
    
    model = pyhf.simplemodels.uncorrelated_background(
        signal=[12.0, 11.0], bkg=[50.0, 52.0], bkg_uncertainty=[3.0, 7.0]
    )
    data = [51, 48] + model.config.auxdata
    
    # passing with strategy kwarg explicitly given
    fit_result, opt_result = pyhf.infer.mle.fit(
        data, model, return_result_obj=True, do_grad=False, strategy=0
    )
    minuit_strategy = opt_result.minuit.strategy.strategy
    print(f"# Minuit minimization strategy: {minuit_strategy}")
    assert minuit_strategy == 0
    
    # strategy kwarg not given
    fit_result, opt_result = pyhf.infer.mle.fit(
        data, model, return_result_obj=True, do_grad=False
    )
    minuit_strategy = opt_result.minuit.strategy.strategy
    print(f"# Minuit minimization strategy: {minuit_strategy}")
    assert minuit_strategy == 0  # fails for pyhf v0.7.2

Contributors

v0.7.3 benefited from contributions from:

  • Alexander Held
  • Daniel Werner

What's Changed

Full Changelog: v0.7.2...v0.7.3