Skip to content

Commit 9c846e2

Browse files
committed
🎨 optimize minor code cleanup in _optimize
1 parent 35fdfcc commit 9c846e2

File tree

1 file changed

+51
-50
lines changed

1 file changed

+51
-50
lines changed

‎scipy-stubs/optimize/_optimize.pyi

Lines changed: 51 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ from typing_extensions import TypeVar
44

55
import numpy as np
66
import optype.numpy as onp
7+
import optype.numpy.compat as npc
78
from scipy._lib._util import _RichResult
8-
from scipy._typing import AnyBool, Falsy, ToRNG, Truthy
9+
from scipy._typing import Falsy, ToRNG, Truthy
910
from ._linesearch import line_search_wolfe2 as line_search
1011
from ._typing import Brack, MethodAll, Solver
1112

@@ -46,17 +47,14 @@ _Fn1_1d: TypeAlias = _Fn1[_Float1D, _YT]
4647
_Fn2: TypeAlias = Callable[Concatenate[_XT, _PT, ...], _YT]
4748
_Callback_1d: TypeAlias = Callable[[_Float1D], None]
4849

49-
_Scalar: TypeAlias = complex | np.number[Any] | np.bool_
50-
51-
_Array: TypeAlias = onp.ArrayND[np.number[Any] | np.bool_ | np.object_]
52-
_Array_f: TypeAlias = onp.ArrayND[np.floating[Any]]
53-
_Array_f_co: TypeAlias = onp.ArrayND[np.floating[Any] | np.integer[Any] | np.bool_]
54-
_Array_1d: TypeAlias = onp.Array1D[np.number[Any] | np.bool_]
55-
5650
_Int1D: TypeAlias = onp.Array1D[np.intp]
5751
_Float: TypeAlias = float | np.float64 # equivalent to `np.float64` in `numpy>=2.2`
5852
_Float1D: TypeAlias = onp.Array1D[np.float64]
5953
_Float2D: TypeAlias = onp.Array2D[np.float64]
54+
_ComplexCo1D: TypeAlias = onp.Array1D[npc.number | np.bool_]
55+
_FloatingND: TypeAlias = onp.ArrayND[npc.floating]
56+
_FloatingCoND: TypeAlias = onp.ArrayND[npc.floating | npc.integer | np.bool_]
57+
_NumericND: TypeAlias = onp.ArrayND[npc.number | np.bool_ | np.timedelta64 | np.object_]
6058

6159
_Args: TypeAlias = tuple[object, ...]
6260
_Brack: TypeAlias = tuple[float, float] | tuple[float, float, float]
@@ -69,18 +67,21 @@ _BracketInfo: TypeAlias = tuple[
6967
_WarnFlag: TypeAlias = Literal[0, 1, 2, 3, 4]
7068
_AllVecs: TypeAlias = list[_Int1D | _Float1D]
7169

72-
_XT_contra = TypeVar("_XT_contra", contravariant=True, bound=_Array_1d, default=_Float1D)
73-
_ValueT_co = TypeVar("_ValueT_co", covariant=True, bound=float | np.floating[Any], default=_Float)
74-
_JacT_co = TypeVar("_JacT_co", covariant=True, bound=_Float1D | _Float2D, default=_Float1D)
70+
_ResultValueT = TypeVar("_ResultValueT", default=Any)
71+
_XT_contra = TypeVar("_XT_contra", bound=_ComplexCo1D, default=_Float1D, contravariant=True)
72+
_ValueT_co = TypeVar("_ValueT_co", bound=float | npc.floating, default=_Float, covariant=True)
73+
_JacT_co = TypeVar("_JacT_co", bound=onp.Array[tuple[int] | tuple[int, int], npc.floating], default=_Float1D, covariant=True)
7574

7675
@type_check_only
7776
class _DoesFMin(Protocol):
78-
def __call__(self, func: _Fn1_1d, x0: _Float1D, /, *, args: _Args) -> _Array_f: ...
77+
def __call__(self, func: _Fn1_1d, x0: _Float1D, /, *, args: _Args) -> _FloatingND: ...
7978

8079
###
8180

82-
# NOTE: Unlike the docs suggest, `OptimizeResult` has no attributes by default, as e.g. `RootResult` has none of these attrs
83-
class OptimizeResult(_RichResult): ...
81+
# NOTE: Unlike the docs suggest, `OptimizeResult` has no attributes by default:
82+
# For example, `RootResult` does not have any of the documented attributes,
83+
# even though it is a subclass of `OptimizeResult`
84+
class OptimizeResult(_RichResult[_ResultValueT], Generic[_ResultValueT]): ...
8485

8586
#
8687
class OptimizeWarning(UserWarning): ...
@@ -121,7 +122,7 @@ class Brent(Generic[_ValueT_co]):
121122
args: _Args = (),
122123
tol: onp.ToFloat = 1.48e-08,
123124
maxiter: int = 500,
124-
full_output: AnyBool = 0, # ignored
125+
full_output: onp.ToBool = 0, # ignored
125126
disp: _Disp = 0,
126127
) -> None: ...
127128
def set_bracket(self, /, brack: _Brack | None = None) -> None: ...
@@ -136,24 +137,24 @@ class Brent(Generic[_ValueT_co]):
136137
@overload
137138
def is_finite_scalar(x: onp.ToScalar) -> np.bool_: ...
138139
@overload # returns a `np.ndarray` of `size = 1`, but could have any `ndim`
139-
def is_finite_scalar(x: _Array) -> Literal[False] | onp.Array[onp.AtLeast1D, np.bool_]: ...
140+
def is_finite_scalar(x: _NumericND) -> Literal[False] | onp.Array[onp.AtLeast1D, np.bool_]: ...
140141

141142
# undocumented
142143
@overload
143-
def vecnorm(x: _Scalar, ord: onp.ToFloat = 2) -> onp.ToFloat: ...
144+
def vecnorm(x: onp.ToComplex, ord: onp.ToFloat = 2) -> onp.ToFloat: ...
144145
@overload
145-
def vecnorm(x: _Array, ord: onp.ToInt = 2) -> _Array_f_co: ...
146+
def vecnorm(x: _NumericND, ord: onp.ToInt = 2) -> _FloatingCoND: ...
146147
@overload
147148
def vecnorm(x: onp.ToFloatND, ord: onp.ToInt = 2) -> onp.ToFloat: ...
148149
@overload
149-
def vecnorm(x: onp.ToComplexND, ord: onp.ToFloat = 2) -> onp.ToFloat | _Array_f_co: ...
150+
def vecnorm(x: onp.ToComplexND, ord: onp.ToFloat = 2) -> onp.ToFloat | _FloatingCoND: ...
150151

151152
# undocumented
152153
def approx_fhess_p(
153154
x0: onp.ToFloat1D,
154155
p: onp.ToFloat,
155-
fprime: _Fn1[_Float1D, _Array_f_co],
156-
epsilon: onp.ToFloat | _Array_f_co, # scalar or 1d ndarray
156+
fprime: _Fn1[_Float1D, _FloatingCoND],
157+
epsilon: onp.ToFloat | _FloatingCoND, # scalar or 1d ndarray
157158
*args: object,
158159
) -> _Float1D: ...
159160

@@ -227,7 +228,7 @@ def fmin(
227228
def fmin_bfgs(
228229
f: _Fn1_1d,
229230
x0: onp.ToFloat1D,
230-
fprime: _Fn1_1d[_Array_f_co] | None = None,
231+
fprime: _Fn1_1d[_FloatingCoND] | None = None,
231232
args: _Args = (),
232233
gtol: onp.ToFloat = 1e-05,
233234
norm: onp.ToFloat = ..., # inf
@@ -246,7 +247,7 @@ def fmin_bfgs(
246247
def fmin_bfgs(
247248
f: _Fn1_1d,
248249
x0: onp.ToFloat1D,
249-
fprime: _Fn1_1d[_Array_f_co] | None = None,
250+
fprime: _Fn1_1d[_FloatingCoND] | None = None,
250251
args: _Args = (),
251252
gtol: onp.ToFloat = 1e-05,
252253
norm: onp.ToFloat = ..., # inf
@@ -266,7 +267,7 @@ def fmin_bfgs(
266267
def fmin_bfgs(
267268
f: _Fn1_1d,
268269
x0: onp.ToFloat1D,
269-
fprime: _Fn1_1d[_Array_f_co] | None = None,
270+
fprime: _Fn1_1d[_FloatingCoND] | None = None,
270271
args: _Args = (),
271272
gtol: onp.ToFloat = 1e-05,
272273
norm: onp.ToFloat = ..., # inf
@@ -286,7 +287,7 @@ def fmin_bfgs(
286287
def fmin_bfgs(
287288
f: _Fn1_1d,
288289
x0: onp.ToFloat1D,
289-
fprime: _Fn1_1d[_Array_f_co] | None = None,
290+
fprime: _Fn1_1d[_FloatingCoND] | None = None,
290291
args: _Args = (),
291292
gtol: onp.ToFloat = 1e-05,
292293
norm: onp.ToFloat = ..., # inf
@@ -308,11 +309,11 @@ def fmin_bfgs(
308309
def fmin_cg(
309310
f: _Fn1_1d,
310311
x0: onp.ToFloat1D,
311-
fprime: _Fn1_1d[_Array_f_co] | None = None,
312+
fprime: _Fn1_1d[_FloatingCoND] | None = None,
312313
args: _Args = (),
313314
gtol: onp.ToFloat = 1e-05,
314315
norm: onp.ToFloat = ..., # inf
315-
epsilon: onp.ToFloat | _Array_f_co = ...,
316+
epsilon: onp.ToFloat | _FloatingCoND = ...,
316317
maxiter: int | None = None,
317318
full_output: Falsy = 0,
318319
disp: _Disp = 1,
@@ -325,11 +326,11 @@ def fmin_cg(
325326
def fmin_cg(
326327
f: _Fn1_1d,
327328
x0: onp.ToFloat1D,
328-
fprime: _Fn1_1d[_Array_f_co] | None = None,
329+
fprime: _Fn1_1d[_FloatingCoND] | None = None,
329330
args: _Args = (),
330331
gtol: onp.ToFloat = 1e-05,
331332
norm: onp.ToFloat = ..., # inf
332-
epsilon: onp.ToFloat | _Array_f_co = ...,
333+
epsilon: onp.ToFloat | _FloatingCoND = ...,
333334
maxiter: int | None = None,
334335
full_output: Falsy = 0,
335336
disp: _Disp = 1,
@@ -343,11 +344,11 @@ def fmin_cg(
343344
def fmin_cg(
344345
f: _Fn1_1d,
345346
x0: onp.ToFloat1D,
346-
fprime: _Fn1_1d[_Array_f_co] | None = None,
347+
fprime: _Fn1_1d[_FloatingCoND] | None = None,
347348
args: _Args = (),
348349
gtol: onp.ToFloat = 1e-05,
349350
norm: onp.ToFloat = ..., # inf
350-
epsilon: onp.ToFloat | _Array_f_co = ...,
351+
epsilon: onp.ToFloat | _FloatingCoND = ...,
351352
maxiter: int | None = None,
352353
*,
353354
full_output: Truthy,
@@ -361,11 +362,11 @@ def fmin_cg(
361362
def fmin_cg(
362363
f: _Fn1_1d,
363364
x0: onp.ToFloat1D,
364-
fprime: _Fn1_1d[_Array_f_co] | None = None,
365+
fprime: _Fn1_1d[_FloatingCoND] | None = None,
365366
args: _Args = (),
366367
gtol: onp.ToFloat = 1e-05,
367368
norm: onp.ToFloat = ..., # inf
368-
epsilon: onp.ToFloat | _Array_f_co = ...,
369+
epsilon: onp.ToFloat | _FloatingCoND = ...,
369370
maxiter: int | None = None,
370371
*,
371372
full_output: Truthy,
@@ -379,12 +380,12 @@ def fmin_cg(
379380
def fmin_ncg(
380381
f: _Fn1_1d,
381382
x0: onp.ToFloat1D,
382-
fprime: _Fn1_1d[_Array_f_co],
383+
fprime: _Fn1_1d[_FloatingCoND],
383384
fhess_p: _Fn2[_Float1D, _Float1D] | None = None,
384-
fhess: _Fn1_1d[_Array_f_co] | None = None,
385+
fhess: _Fn1_1d[_FloatingCoND] | None = None,
385386
args: _Args = (),
386387
avextol: onp.ToFloat = 1e-5,
387-
epsilon: onp.ToFloat | _Array_f_co = ...,
388+
epsilon: onp.ToFloat | _FloatingCoND = ...,
388389
maxiter: int | None = None,
389390
full_output: Falsy = 0,
390391
disp: _Disp = 1,
@@ -397,12 +398,12 @@ def fmin_ncg(
397398
def fmin_ncg(
398399
f: _Fn1_1d,
399400
x0: onp.ToFloat1D,
400-
fprime: _Fn1_1d[_Array_f_co],
401+
fprime: _Fn1_1d[_FloatingCoND],
401402
fhess_p: _Fn2[_Float1D, _Float1D] | None = None,
402-
fhess: _Fn1_1d[_Array_f_co] | None = None,
403+
fhess: _Fn1_1d[_FloatingCoND] | None = None,
403404
args: _Args = (),
404405
avextol: onp.ToFloat = 1e-5,
405-
epsilon: onp.ToFloat | _Array_f_co = ...,
406+
epsilon: onp.ToFloat | _FloatingCoND = ...,
406407
maxiter: int | None = None,
407408
full_output: Falsy = 0,
408409
disp: _Disp = 1,
@@ -416,12 +417,12 @@ def fmin_ncg(
416417
def fmin_ncg(
417418
f: _Fn1_1d,
418419
x0: onp.ToFloat1D,
419-
fprime: _Fn1_1d[_Array_f_co],
420+
fprime: _Fn1_1d[_FloatingCoND],
420421
fhess_p: _Fn2[_Float1D, _Float1D] | None = None,
421-
fhess: _Fn1_1d[_Array_f_co] | None = None,
422+
fhess: _Fn1_1d[_FloatingCoND] | None = None,
422423
args: _Args = (),
423424
avextol: onp.ToFloat = 1e-5,
424-
epsilon: onp.ToFloat | _Array_f_co = ...,
425+
epsilon: onp.ToFloat | _FloatingCoND = ...,
425426
maxiter: int | None = None,
426427
*,
427428
full_output: Truthy,
@@ -435,12 +436,12 @@ def fmin_ncg(
435436
def fmin_ncg(
436437
f: _Fn1_1d,
437438
x0: onp.ToFloat1D,
438-
fprime: _Fn1_1d[_Array_f_co],
439+
fprime: _Fn1_1d[_FloatingCoND],
439440
fhess_p: _Fn2[_Float1D, _Float1D] | None = None,
440-
fhess: _Fn1_1d[_Array_f_co] | None = None,
441+
fhess: _Fn1_1d[_FloatingCoND] | None = None,
441442
args: _Args = (),
442443
avextol: onp.ToFloat = 1e-5,
443-
epsilon: onp.ToFloat | _Array_f_co = ...,
444+
epsilon: onp.ToFloat | _FloatingCoND = ...,
444445
maxiter: int | None = None,
445446
*,
446447
full_output: Truthy,
@@ -550,7 +551,7 @@ def brute(
550551
Ns: int = 20,
551552
full_output: Falsy = 0,
552553
finish: _DoesFMin | None = ..., # default: `fmin`
553-
disp: AnyBool = False,
554+
disp: onp.ToBool = False,
554555
workers: int | Callable[[Callable[[_VT], _RT], Iterable[_VT]], Sequence[_RT]] = 1,
555556
) -> _Float1D: ...
556557
@overload # full_output: True (keyword)
@@ -562,9 +563,9 @@ def brute(
562563
*,
563564
full_output: Truthy,
564565
finish: _DoesFMin | None = ..., # default: `fmin`
565-
disp: AnyBool = False,
566+
disp: onp.ToBool = False,
566567
workers: int | Callable[[Callable[[_VT], _RT], Iterable[_VT]], Sequence[_RT]] = 1,
567-
) -> tuple[_Float1D, np.float64, onp.Array3D[np.float64], onp.Array2D[np.floating[Any]]]: ...
568+
) -> tuple[_Float1D, np.float64, onp.Array3D[np.float64], onp.Array2D[npc.floating]]: ...
568569

569570
#
570571
@overload # full_output: False = ...
@@ -651,12 +652,12 @@ def show_options(solver: Solver | None, method: MethodAll | None, disp: Falsy) -
651652
def show_options(solver: Solver | None = None, method: MethodAll | None = None, *, disp: Falsy) -> str: ...
652653

653654
#
654-
def approx_fprime(xk: onp.ToFloat1D, f: _Fn1_1d, epsilon: onp.ToFloat | _Array_f_co = ..., *args: object) -> _Float1D: ...
655+
def approx_fprime(xk: onp.ToFloat1D, f: _Fn1_1d, epsilon: onp.ToFloat | _FloatingCoND = ..., *args: object) -> _Float1D: ...
655656

656657
#
657658
def check_grad(
658659
func: _Fn1_1d,
659-
grad: _Fn1_1d[_Array_f_co],
660+
grad: _Fn1_1d[_FloatingCoND],
660661
x0: onp.ToFloat1D,
661662
*args: object,
662663
epsilon: onp.ToFloat = ...,

0 commit comments

Comments
 (0)