Skip to content

Commit 9ef7ac2

Browse files
authored
Merge pull request #223 from jorenham/optimize.line_search
`optimize`: complete `line_search`
2 parents f2eea28 + 852be47 commit 9ef7ac2

File tree

1 file changed

+101
-80
lines changed

1 file changed

+101
-80
lines changed

scipy-stubs/optimize/_linesearch.pyi

+101-80
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
from scipy._typing import Untyped, UntypedCallable
1+
from collections.abc import Callable
2+
from typing import Concatenate, Literal, TypeAlias, TypeVar
3+
4+
import numpy as np
5+
import optype.numpy as onp
26

37
__all__ = [
48
"LineSearchWarning",
@@ -9,90 +13,107 @@ __all__ = [
913
"scalar_search_wolfe2",
1014
]
1115

16+
_Float: TypeAlias = float | np.float64
17+
_Float1D: TypeAlias = onp.Array1D[np.float64]
18+
19+
_RT = TypeVar("_RT")
20+
_Fun1D: TypeAlias = Callable[Concatenate[_Float1D, ...], _RT]
21+
22+
###
23+
1224
class LineSearchWarning(RuntimeWarning): ...
1325

1426
def line_search_wolfe1(
15-
f: UntypedCallable,
16-
fprime: Untyped,
17-
xk: Untyped,
18-
pk: Untyped,
19-
gfk: Untyped | None = None,
20-
old_fval: Untyped | None = None,
21-
old_old_fval: Untyped | None = None,
22-
args: Untyped = (),
23-
c1: float = 0.0001,
24-
c2: float = 0.9,
25-
amax: int = 50,
26-
amin: float = 1e-08,
27-
xtol: float = 1e-14,
28-
) -> Untyped: ...
29-
def scalar_search_wolfe1(
30-
phi: Untyped,
31-
derphi: Untyped,
32-
phi0: Untyped | None = None,
33-
old_phi0: Untyped | None = None,
34-
derphi0: Untyped | None = None,
35-
c1: float = 0.0001,
36-
c2: float = 0.9,
37-
amax: int = 50,
38-
amin: float = 1e-08,
39-
xtol: float = 1e-14,
40-
) -> Untyped: ...
41-
42-
line_search = line_search_wolfe1
27+
f: _Fun1D[onp.ToFloat],
28+
fprime: _Fun1D[onp.ToFloat1D],
29+
xk: onp.ToFloat1D,
30+
pk: onp.ToFloat1D,
31+
gfk: onp.ToFloat1D | None = None,
32+
old_fval: onp.ToFloat | None = None,
33+
old_old_fval: onp.ToFloat | None = None,
34+
args: tuple[object, ...] = (),
35+
c1: onp.ToFloat = 1e-4,
36+
c2: onp.ToFloat = 0.9,
37+
amax: onp.ToJustInt = 50,
38+
amin: onp.ToFloat = 1e-08,
39+
xtol: onp.ToFloat = 1e-14,
40+
) -> tuple[_Float | None, int, int, _Float | None, _Float, _Float | None]: ...
4341

42+
# NOTE: exported as `scipy.optimize.line_search`
4443
def line_search_wolfe2(
45-
f: UntypedCallable,
46-
myfprime: Untyped,
47-
xk: Untyped,
48-
pk: Untyped,
49-
gfk: Untyped | None = None,
50-
old_fval: Untyped | None = None,
51-
old_old_fval: Untyped | None = None,
52-
args: Untyped = (),
53-
c1: float = 0.0001,
54-
c2: float = 0.9,
55-
amax: Untyped | None = None,
56-
extra_condition: Untyped | None = None,
57-
maxiter: int = 10,
58-
) -> Untyped: ...
59-
def scalar_search_wolfe2(
60-
phi: Untyped,
61-
derphi: Untyped,
62-
phi0: Untyped | None = None,
63-
old_phi0: Untyped | None = None,
64-
derphi0: Untyped | None = None,
65-
c1: float = 0.0001,
66-
c2: float = 0.9,
67-
amax: Untyped | None = None,
68-
extra_condition: Untyped | None = None,
69-
maxiter: int = 10,
70-
) -> Untyped: ...
44+
f: _Fun1D[onp.ToFloat],
45+
myfprime: _Fun1D[onp.ToFloat1D],
46+
xk: onp.ToFloat1D,
47+
pk: onp.ToFloat1D,
48+
gfk: onp.ToFloat1D | None = None,
49+
old_fval: onp.ToFloat | None = None,
50+
old_old_fval: onp.ToFloat | None = None,
51+
args: tuple[object, ...] = (),
52+
c1: onp.ToFloat = 1e-4,
53+
c2: onp.ToFloat = 0.9,
54+
amax: onp.ToFloat | None = None,
55+
extra_condition: Callable[[float, _Float1D, float, _Float1D], onp.ToBool] | None = None,
56+
maxiter: onp.ToJustInt = 10,
57+
) -> tuple[_Float | None, int, int, _Float | None, _Float, _Float | None]: ...
58+
59+
#
7160
def line_search_armijo(
72-
f: UntypedCallable,
73-
xk: Untyped,
74-
pk: Untyped,
75-
gfk: Untyped,
76-
old_fval: Untyped,
77-
args: Untyped = (),
78-
c1: float = 0.0001,
79-
alpha0: int = 1,
80-
) -> Untyped: ...
61+
f: _Fun1D[onp.ToFloat],
62+
xk: onp.ToFloat1D,
63+
pk: onp.ToFloat1D,
64+
gfk: onp.ToFloat1D,
65+
old_fval: onp.ToFloat,
66+
args: tuple[object, ...] = (),
67+
c1: onp.ToFloat = 1e-4,
68+
alpha0: onp.ToFloat = 1,
69+
) -> tuple[_Float | None, int, _Float]: ...
70+
71+
# undocumented
8172
def line_search_BFGS(
82-
f: UntypedCallable,
83-
xk: Untyped,
84-
pk: Untyped,
85-
gfk: Untyped,
86-
old_fval: Untyped,
87-
args: Untyped = (),
88-
c1: float = 0.0001,
89-
alpha0: int = 1,
90-
) -> Untyped: ...
73+
f: _Fun1D[onp.ToFloat],
74+
xk: onp.ToFloat1D,
75+
pk: onp.ToFloat1D,
76+
gfk: onp.ToFloat1D,
77+
old_fval: onp.ToFloat,
78+
args: tuple[object, ...] = (),
79+
c1: onp.ToFloat = 1e-4,
80+
alpha0: onp.ToFloat = 1,
81+
) -> tuple[_Float | None, int, Literal[0], _Float]: ...
82+
83+
#
84+
def scalar_search_wolfe1(
85+
phi: Callable[[float], onp.ToFloat],
86+
derphi: Callable[[float], onp.ToFloat],
87+
phi0: onp.ToFloat | None = None,
88+
old_phi0: onp.ToFloat | None = None,
89+
derphi0: onp.ToFloat | None = None,
90+
c1: onp.ToFloat = 1e-4,
91+
c2: onp.ToFloat = 0.9,
92+
amax: onp.ToJustInt = 50,
93+
amin: onp.ToFloat = 1e-08,
94+
xtol: onp.ToFloat = 1e-14,
95+
) -> tuple[_Float | None, _Float, _Float]: ...
96+
97+
#
98+
def scalar_search_wolfe2(
99+
phi: Callable[[float], onp.ToFloat],
100+
derphi: Callable[[float], onp.ToFloat],
101+
phi0: onp.ToFloat | None = None,
102+
old_phi0: onp.ToFloat | None = None,
103+
derphi0: onp.ToFloat | None = None,
104+
c1: onp.ToFloat = 1e-4,
105+
c2: onp.ToFloat = 0.9,
106+
amax: onp.ToFloat | None = None,
107+
extra_condition: Callable[[float, float], onp.ToBool] | None = None,
108+
maxiter: onp.ToJustInt = 10,
109+
) -> tuple[_Float | None, _Float, _Float, _Float | None]: ...
110+
111+
# undocumented
91112
def scalar_search_armijo(
92-
phi: Untyped,
93-
phi0: Untyped,
94-
derphi0: Untyped,
95-
c1: float = 0.0001,
96-
alpha0: int = 1,
97-
amin: int = 0,
98-
) -> Untyped: ...
113+
phi: Callable[[float], onp.ToFloat],
114+
phi0: onp.ToFloat,
115+
derphi0: onp.ToFloat,
116+
c1: onp.ToFloat = 1e-4,
117+
alpha0: onp.ToFloat = 1,
118+
amin: onp.ToJustInt = 0,
119+
) -> tuple[_Float | None, _Float]: ...

0 commit comments

Comments
 (0)