import pytest
import numpy as np
from scipy.optimize import minimize, NonlinearConstraint, rosen, rosen_der
# Ignore this warning about inefficient use of Hessians
# The bug only shows up with the default HUS
@pytest.mark.filterwarnings(
"ignore:delta_grad == 0.0. Check if the approximated function is linear."
)
def test_gh21193():
# Test that nested minimization does not share Hessian objects
def identity(x):
return x[0]
def identity_jac(x):
a = np.zeros(len(x))
a[0] = 1
return a
constraint1 = NonlinearConstraint(identity, 0, 0, identity_jac)
constraint2 = NonlinearConstraint(identity, 0, 0, identity_jac)
# The default HUS for each should be distinct
assert constraint1.hess is not constraint2.hess
_ = minimize(
lambda x: minimize(
rosen,
x[1:],
jac=rosen_der,
constraints=constraint1,
method="trust-constr",
options={'maxiter': 2},
).fun,
[1, 0, 0],
constraints=constraint2,
method="trust-constr",
options={'maxiter': 2},
)
# This test doesn't check that the output is correct, just that it doesn't crash