@@ -4,8 +4,9 @@ from typing_extensions import TypeVar
4
4
5
5
import numpy as np
6
6
import optype .numpy as onp
7
+ import optype .numpy .compat as npc
7
8
from scipy ._lib ._util import _RichResult
8
- from scipy ._typing import AnyBool , Falsy , ToRNG , Truthy
9
+ from scipy ._typing import Falsy , ToRNG , Truthy
9
10
from ._linesearch import line_search_wolfe2 as line_search
10
11
from ._typing import Brack , MethodAll , Solver
11
12
@@ -46,17 +47,14 @@ _Fn1_1d: TypeAlias = _Fn1[_Float1D, _YT]
46
47
_Fn2 : TypeAlias = Callable [Concatenate [_XT , _PT , ...], _YT ]
47
48
_Callback_1d : TypeAlias = Callable [[_Float1D ], None ]
48
49
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
-
56
50
_Int1D : TypeAlias = onp .Array1D [np .intp ]
57
51
_Float : TypeAlias = float | np .float64 # equivalent to `np.float64` in `numpy>=2.2`
58
52
_Float1D : TypeAlias = onp .Array1D [np .float64 ]
59
53
_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_ ]
60
58
61
59
_Args : TypeAlias = tuple [object , ...]
62
60
_Brack : TypeAlias = tuple [float , float ] | tuple [float , float , float ]
@@ -69,18 +67,21 @@ _BracketInfo: TypeAlias = tuple[
69
67
_WarnFlag : TypeAlias = Literal [0 , 1 , 2 , 3 , 4 ]
70
68
_AllVecs : TypeAlias = list [_Int1D | _Float1D ]
71
69
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 )
75
74
76
75
@type_check_only
77
76
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 : ...
79
78
80
79
###
81
80
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 ]): ...
84
85
85
86
#
86
87
class OptimizeWarning (UserWarning ): ...
@@ -121,7 +122,7 @@ class Brent(Generic[_ValueT_co]):
121
122
args : _Args = (),
122
123
tol : onp .ToFloat = 1.48e-08 ,
123
124
maxiter : int = 500 ,
124
- full_output : AnyBool = 0 , # ignored
125
+ full_output : onp . ToBool = 0 , # ignored
125
126
disp : _Disp = 0 ,
126
127
) -> None : ...
127
128
def set_bracket (self , / , brack : _Brack | None = None ) -> None : ...
@@ -136,24 +137,24 @@ class Brent(Generic[_ValueT_co]):
136
137
@overload
137
138
def is_finite_scalar (x : onp .ToScalar ) -> np .bool_ : ...
138
139
@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_ ]: ...
140
141
141
142
# undocumented
142
143
@overload
143
- def vecnorm (x : _Scalar , ord : onp .ToFloat = 2 ) -> onp .ToFloat : ...
144
+ def vecnorm (x : onp . ToComplex , ord : onp .ToFloat = 2 ) -> onp .ToFloat : ...
144
145
@overload
145
- def vecnorm (x : _Array , ord : onp .ToInt = 2 ) -> _Array_f_co : ...
146
+ def vecnorm (x : _NumericND , ord : onp .ToInt = 2 ) -> _FloatingCoND : ...
146
147
@overload
147
148
def vecnorm (x : onp .ToFloatND , ord : onp .ToInt = 2 ) -> onp .ToFloat : ...
148
149
@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 : ...
150
151
151
152
# undocumented
152
153
def approx_fhess_p (
153
154
x0 : onp .ToFloat1D ,
154
155
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
157
158
* args : object ,
158
159
) -> _Float1D : ...
159
160
@@ -227,7 +228,7 @@ def fmin(
227
228
def fmin_bfgs (
228
229
f : _Fn1_1d ,
229
230
x0 : onp .ToFloat1D ,
230
- fprime : _Fn1_1d [_Array_f_co ] | None = None ,
231
+ fprime : _Fn1_1d [_FloatingCoND ] | None = None ,
231
232
args : _Args = (),
232
233
gtol : onp .ToFloat = 1e-05 ,
233
234
norm : onp .ToFloat = ..., # inf
@@ -246,7 +247,7 @@ def fmin_bfgs(
246
247
def fmin_bfgs (
247
248
f : _Fn1_1d ,
248
249
x0 : onp .ToFloat1D ,
249
- fprime : _Fn1_1d [_Array_f_co ] | None = None ,
250
+ fprime : _Fn1_1d [_FloatingCoND ] | None = None ,
250
251
args : _Args = (),
251
252
gtol : onp .ToFloat = 1e-05 ,
252
253
norm : onp .ToFloat = ..., # inf
@@ -266,7 +267,7 @@ def fmin_bfgs(
266
267
def fmin_bfgs (
267
268
f : _Fn1_1d ,
268
269
x0 : onp .ToFloat1D ,
269
- fprime : _Fn1_1d [_Array_f_co ] | None = None ,
270
+ fprime : _Fn1_1d [_FloatingCoND ] | None = None ,
270
271
args : _Args = (),
271
272
gtol : onp .ToFloat = 1e-05 ,
272
273
norm : onp .ToFloat = ..., # inf
@@ -286,7 +287,7 @@ def fmin_bfgs(
286
287
def fmin_bfgs (
287
288
f : _Fn1_1d ,
288
289
x0 : onp .ToFloat1D ,
289
- fprime : _Fn1_1d [_Array_f_co ] | None = None ,
290
+ fprime : _Fn1_1d [_FloatingCoND ] | None = None ,
290
291
args : _Args = (),
291
292
gtol : onp .ToFloat = 1e-05 ,
292
293
norm : onp .ToFloat = ..., # inf
@@ -308,11 +309,11 @@ def fmin_bfgs(
308
309
def fmin_cg (
309
310
f : _Fn1_1d ,
310
311
x0 : onp .ToFloat1D ,
311
- fprime : _Fn1_1d [_Array_f_co ] | None = None ,
312
+ fprime : _Fn1_1d [_FloatingCoND ] | None = None ,
312
313
args : _Args = (),
313
314
gtol : onp .ToFloat = 1e-05 ,
314
315
norm : onp .ToFloat = ..., # inf
315
- epsilon : onp .ToFloat | _Array_f_co = ...,
316
+ epsilon : onp .ToFloat | _FloatingCoND = ...,
316
317
maxiter : int | None = None ,
317
318
full_output : Falsy = 0 ,
318
319
disp : _Disp = 1 ,
@@ -325,11 +326,11 @@ def fmin_cg(
325
326
def fmin_cg (
326
327
f : _Fn1_1d ,
327
328
x0 : onp .ToFloat1D ,
328
- fprime : _Fn1_1d [_Array_f_co ] | None = None ,
329
+ fprime : _Fn1_1d [_FloatingCoND ] | None = None ,
329
330
args : _Args = (),
330
331
gtol : onp .ToFloat = 1e-05 ,
331
332
norm : onp .ToFloat = ..., # inf
332
- epsilon : onp .ToFloat | _Array_f_co = ...,
333
+ epsilon : onp .ToFloat | _FloatingCoND = ...,
333
334
maxiter : int | None = None ,
334
335
full_output : Falsy = 0 ,
335
336
disp : _Disp = 1 ,
@@ -343,11 +344,11 @@ def fmin_cg(
343
344
def fmin_cg (
344
345
f : _Fn1_1d ,
345
346
x0 : onp .ToFloat1D ,
346
- fprime : _Fn1_1d [_Array_f_co ] | None = None ,
347
+ fprime : _Fn1_1d [_FloatingCoND ] | None = None ,
347
348
args : _Args = (),
348
349
gtol : onp .ToFloat = 1e-05 ,
349
350
norm : onp .ToFloat = ..., # inf
350
- epsilon : onp .ToFloat | _Array_f_co = ...,
351
+ epsilon : onp .ToFloat | _FloatingCoND = ...,
351
352
maxiter : int | None = None ,
352
353
* ,
353
354
full_output : Truthy ,
@@ -361,11 +362,11 @@ def fmin_cg(
361
362
def fmin_cg (
362
363
f : _Fn1_1d ,
363
364
x0 : onp .ToFloat1D ,
364
- fprime : _Fn1_1d [_Array_f_co ] | None = None ,
365
+ fprime : _Fn1_1d [_FloatingCoND ] | None = None ,
365
366
args : _Args = (),
366
367
gtol : onp .ToFloat = 1e-05 ,
367
368
norm : onp .ToFloat = ..., # inf
368
- epsilon : onp .ToFloat | _Array_f_co = ...,
369
+ epsilon : onp .ToFloat | _FloatingCoND = ...,
369
370
maxiter : int | None = None ,
370
371
* ,
371
372
full_output : Truthy ,
@@ -379,12 +380,12 @@ def fmin_cg(
379
380
def fmin_ncg (
380
381
f : _Fn1_1d ,
381
382
x0 : onp .ToFloat1D ,
382
- fprime : _Fn1_1d [_Array_f_co ],
383
+ fprime : _Fn1_1d [_FloatingCoND ],
383
384
fhess_p : _Fn2 [_Float1D , _Float1D ] | None = None ,
384
- fhess : _Fn1_1d [_Array_f_co ] | None = None ,
385
+ fhess : _Fn1_1d [_FloatingCoND ] | None = None ,
385
386
args : _Args = (),
386
387
avextol : onp .ToFloat = 1e-5 ,
387
- epsilon : onp .ToFloat | _Array_f_co = ...,
388
+ epsilon : onp .ToFloat | _FloatingCoND = ...,
388
389
maxiter : int | None = None ,
389
390
full_output : Falsy = 0 ,
390
391
disp : _Disp = 1 ,
@@ -397,12 +398,12 @@ def fmin_ncg(
397
398
def fmin_ncg (
398
399
f : _Fn1_1d ,
399
400
x0 : onp .ToFloat1D ,
400
- fprime : _Fn1_1d [_Array_f_co ],
401
+ fprime : _Fn1_1d [_FloatingCoND ],
401
402
fhess_p : _Fn2 [_Float1D , _Float1D ] | None = None ,
402
- fhess : _Fn1_1d [_Array_f_co ] | None = None ,
403
+ fhess : _Fn1_1d [_FloatingCoND ] | None = None ,
403
404
args : _Args = (),
404
405
avextol : onp .ToFloat = 1e-5 ,
405
- epsilon : onp .ToFloat | _Array_f_co = ...,
406
+ epsilon : onp .ToFloat | _FloatingCoND = ...,
406
407
maxiter : int | None = None ,
407
408
full_output : Falsy = 0 ,
408
409
disp : _Disp = 1 ,
@@ -416,12 +417,12 @@ def fmin_ncg(
416
417
def fmin_ncg (
417
418
f : _Fn1_1d ,
418
419
x0 : onp .ToFloat1D ,
419
- fprime : _Fn1_1d [_Array_f_co ],
420
+ fprime : _Fn1_1d [_FloatingCoND ],
420
421
fhess_p : _Fn2 [_Float1D , _Float1D ] | None = None ,
421
- fhess : _Fn1_1d [_Array_f_co ] | None = None ,
422
+ fhess : _Fn1_1d [_FloatingCoND ] | None = None ,
422
423
args : _Args = (),
423
424
avextol : onp .ToFloat = 1e-5 ,
424
- epsilon : onp .ToFloat | _Array_f_co = ...,
425
+ epsilon : onp .ToFloat | _FloatingCoND = ...,
425
426
maxiter : int | None = None ,
426
427
* ,
427
428
full_output : Truthy ,
@@ -435,12 +436,12 @@ def fmin_ncg(
435
436
def fmin_ncg (
436
437
f : _Fn1_1d ,
437
438
x0 : onp .ToFloat1D ,
438
- fprime : _Fn1_1d [_Array_f_co ],
439
+ fprime : _Fn1_1d [_FloatingCoND ],
439
440
fhess_p : _Fn2 [_Float1D , _Float1D ] | None = None ,
440
- fhess : _Fn1_1d [_Array_f_co ] | None = None ,
441
+ fhess : _Fn1_1d [_FloatingCoND ] | None = None ,
441
442
args : _Args = (),
442
443
avextol : onp .ToFloat = 1e-5 ,
443
- epsilon : onp .ToFloat | _Array_f_co = ...,
444
+ epsilon : onp .ToFloat | _FloatingCoND = ...,
444
445
maxiter : int | None = None ,
445
446
* ,
446
447
full_output : Truthy ,
@@ -550,7 +551,7 @@ def brute(
550
551
Ns : int = 20 ,
551
552
full_output : Falsy = 0 ,
552
553
finish : _DoesFMin | None = ..., # default: `fmin`
553
- disp : AnyBool = False ,
554
+ disp : onp . ToBool = False ,
554
555
workers : int | Callable [[Callable [[_VT ], _RT ], Iterable [_VT ]], Sequence [_RT ]] = 1 ,
555
556
) -> _Float1D : ...
556
557
@overload # full_output: True (keyword)
@@ -562,9 +563,9 @@ def brute(
562
563
* ,
563
564
full_output : Truthy ,
564
565
finish : _DoesFMin | None = ..., # default: `fmin`
565
- disp : AnyBool = False ,
566
+ disp : onp . ToBool = False ,
566
567
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 ]]: ...
568
569
569
570
#
570
571
@overload # full_output: False = ...
@@ -651,12 +652,12 @@ def show_options(solver: Solver | None, method: MethodAll | None, disp: Falsy) -
651
652
def show_options (solver : Solver | None = None , method : MethodAll | None = None , * , disp : Falsy ) -> str : ...
652
653
653
654
#
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 : ...
655
656
656
657
#
657
658
def check_grad (
658
659
func : _Fn1_1d ,
659
- grad : _Fn1_1d [_Array_f_co ],
660
+ grad : _Fn1_1d [_FloatingCoND ],
660
661
x0 : onp .ToFloat1D ,
661
662
* args : object ,
662
663
epsilon : onp .ToFloat = ...,
0 commit comments