Skip to content

Commit

Permalink
fix methods unknown to scipy.optimize.show_options and add *_METHOD…
Browse files Browse the repository at this point in the history
…S list for each solver script and fix show_options doc for #scipygh-10782
  • Loading branch information
AtsushiSakai committed Nov 9, 2020
1 parent 389b2e0 commit 643cb26
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 2 deletions.
2 changes: 2 additions & 0 deletions scipy/optimize/_linprog.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@

__docformat__ = "restructuredtext en"

LINPROG_METHODS = ['simplex', 'revised simplex', 'interior-point']


def linprog_verbose_callback(res):
"""
Expand Down
1 change: 1 addition & 0 deletions scipy/optimize/_minimize.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
'l-bfgs-b', 'tnc', 'cobyla', 'slsqp', 'trust-constr',
'dogleg', 'trust-ncg', 'trust-exact', 'trust-krylov']

MINIMIZE_SCALAR_METHODS = ['Brent', 'Bounded', 'Golden']

def minimize(fun, x0, args=(), method=None, jac=None, hess=None,
hessp=None, bounds=None, constraints=(), tol=None,
Expand Down
1 change: 1 addition & 0 deletions scipy/optimize/_qap.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from scipy._lib._util import check_random_state
import itertools

QUADRATIC_ASSIGNMENT_METHODS = ['faq', '2opt']

def quadratic_assignment(A, B, method="faq", options=None):
r"""
Expand Down
3 changes: 3 additions & 0 deletions scipy/optimize/_root.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

import numpy as np

ROOT_METHODS = ['hybr', 'lm', 'broyden1', 'broyden2', 'anderson',
'linearmixing', 'diagbroyden', 'excitingmixing', 'krylov',
'df-sane']

from warnings import warn

Expand Down
3 changes: 3 additions & 0 deletions scipy/optimize/_root_scalar.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@

__all__ = ['root_scalar']

ROOT_SCALAR_METHODS = ['bisect', 'brentq', 'brenth', 'ridder', 'toms748',
'newton', 'secant', 'halley']


class MemoizeDer(object):
"""Decorator that caches the value and derivative(s) of function each
Expand Down
17 changes: 17 additions & 0 deletions scipy/optimize/optimize.py
Original file line number Diff line number Diff line change
Expand Up @@ -3396,6 +3396,17 @@ def show_options(solver=None, method=None, disp=True):
- :ref:`golden <optimize.minimize_scalar-golden>`
- :ref:`bounded <optimize.minimize_scalar-bounded>`
`scipy.optimize.root_scalar`
- :ref:'bisect <optimize.root_scalar-bisect>`
- :ref:'brentq <optimize.root_scalar-brentq>`
- :ref:'brenth <optimize.root_scalar-brenth>`
- :ref:'ridder <optimize.root_scalar-ridder>`
- :ref:'toms748 <optimize.root_scalar-toms748>`
- :ref:'newton <optimize.root_scalar-newton>`
- :ref:'secant <optimize.root_scalar-secant>`
- :ref:'halley <optimize.root_scalar-halley>`
`scipy.optimize.linprog`
- :ref:`simplex <optimize.linprog-simplex>`
Expand Down Expand Up @@ -3441,6 +3452,12 @@ def show_options(solver=None, method=None, disp=True):
('slsqp', 'scipy.optimize.slsqp._minimize_slsqp'),
('tnc', 'scipy.optimize.tnc._minimize_tnc'),
('trust-ncg', 'scipy.optimize._trustregion_ncg._minimize_trust_ncg'),
('trust-constr',
'scipy.optimize._trustregion_constr._minimize_trustregion_constr'),
('trust-exact',
'scipy.optimize._trustregion_exact._minimize_trustregion_exact'),
('trust-krylov',
'scipy.optimize._trustregion_krylov._minimize_trust_krylov'),
),
'root': (
('hybr', 'scipy.optimize.minpack._root_hybr'),
Expand Down
23 changes: 21 additions & 2 deletions scipy/optimize/tests/test_optimize.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@
from pytest import raises as assert_raises

from scipy import optimize
from scipy.optimize._minimize import MINIMIZE_METHODS
from scipy.optimize._minimize import MINIMIZE_METHODS, MINIMIZE_SCALAR_METHODS
from scipy.optimize._linprog import LINPROG_METHODS
from scipy.optimize._root import ROOT_METHODS
from scipy.optimize._root_scalar import ROOT_SCALAR_METHODS
from scipy.optimize._qap import QUADRATIC_ASSIGNMENT_METHODS
from scipy.optimize._differentiable_functions import ScalarFunction
from scipy.optimize.optimize import MemoizeJac
from scipy.optimize.optimize import MemoizeJac, show_options


def test_check_grad():
Expand Down Expand Up @@ -2174,8 +2178,23 @@ def test_memoize_jac_with_bfgs(function_with_gradient):
scalar_function.fun(x0 + 0.2)
assert function_with_gradient.number_of_calls == 3


def test_gh12696():
# Test that optimize doesn't throw warning gh-12696
with assert_no_warnings():
optimize.fminbound(
lambda x: np.array([x**2]), -np.pi, np.pi, disp=False)


def test_show_options():
solver_methods = {
'minimize': MINIMIZE_METHODS,
'minimize_scalar': MINIMIZE_SCALAR_METHODS,
'root': ROOT_METHODS,
'root_scalar': ROOT_SCALAR_METHODS,
'linprog': LINPROG_METHODS,
'quadratic_assignment': QUADRATIC_ASSIGNMENT_METHODS,
}
for solver, methods in solver_methods.items():
for method in methods:
show_options(solver, method)

0 comments on commit 643cb26

Please sign in to comment.