Skip to content

Commit e317881

Browse files
authored
♻️ stats: consistent typar naming and remove redundant float | defaults (#807)
2 parents 4939694 + cd80605 commit e317881

File tree

1 file changed

+102
-101
lines changed

1 file changed

+102
-101
lines changed

scipy-stubs/stats/_stats_py.pyi

Lines changed: 102 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -87,26 +87,25 @@ __all__ = [
8787

8888
###
8989

90-
_SCT = TypeVar("_SCT", bound=np.generic, default=np.generic)
90+
_SCT = TypeVar("_SCT", bound=np.generic)
9191

9292
_SCT_float = TypeVar("_SCT_float", bound=npc.floating, default=npc.floating)
9393
_SCT_real = TypeVar("_SCT_real", bound=_Real0D, default=_Real0D)
9494
_SCT_real_co = TypeVar("_SCT_real_co", covariant=True, bound=_Real0D, default=_Real0D)
9595

96-
_AsFloat64: TypeAlias = float | np.float64
9796
_Real0D: TypeAlias = npc.integer | npc.floating
9897

9998
_ScalarOrND: TypeAlias = _SCT | onp.ArrayND[_SCT]
10099
_FloatOrND: TypeAlias = _ScalarOrND[_SCT_float]
101100
_RealOrND: TypeAlias = _ScalarOrND[_SCT_real]
102101

103-
_NDT_int_co = TypeVar("_NDT_int_co", bound=int | _ScalarOrND[npc.integer], default=int | _ScalarOrND[np.intp], covariant=True)
104-
_NDT_float = TypeVar("_NDT_float", bound=float | _ScalarOrND[npc.floating], default=float | _ScalarOrND[np.float64])
105-
_NDT_float_co = TypeVar(
106-
"_NDT_float_co", bound=float | _ScalarOrND[npc.floating], default=float | _ScalarOrND[np.float64], covariant=True
102+
_IntOrArrayT_co = TypeVar("_IntOrArrayT_co", bound=_ScalarOrND[npc.integer], default=_ScalarOrND[np.intp], covariant=True)
103+
_FloatOrArrayT = TypeVar("_FloatOrArrayT", bound=_ScalarOrND[npc.floating])
104+
_FloatOrArrayT_co = TypeVar(
105+
"_FloatOrArrayT_co", bound=float | _ScalarOrND[npc.floating], default=float | onp.ArrayND[np.float64], covariant=True
107106
)
108-
_NDT_real_co = TypeVar(
109-
"_NDT_real_co", bound=float | _ScalarOrND[_Real0D], default=float | _ScalarOrND[np.intp | np.float64], covariant=True
107+
_RealOrArrayT_co = TypeVar(
108+
"_RealOrArrayT_co", bound=_ScalarOrND[_Real0D], default=_ScalarOrND[np.intp | np.float64], covariant=True
110109
)
111110

112111
_InterpolationMethod: TypeAlias = L["linear", "lower", "higher", "nearest", "midpoint"]
@@ -132,47 +131,47 @@ class _MADCenterFunc(Protocol):
132131
def __call__(self, x: onp.Array1D[np.float64], /, *, axis: int | None) -> onp.ToFloat: ...
133132

134133
@type_check_only
135-
class _TestResultTuple(NamedTuple, Generic[_NDT_float_co]):
136-
statistic: _NDT_float_co
137-
pvalue: _NDT_float_co
134+
class _TestResultTuple(NamedTuple, Generic[_FloatOrArrayT_co]):
135+
statistic: _FloatOrArrayT_co
136+
pvalue: _FloatOrArrayT_co
138137

139138
@type_check_only
140-
class _TestResultBunch(BaseBunch[_NDT_float_co, _NDT_float_co], Generic[_NDT_float_co]): # pyright: ignore[reportInvalidTypeArguments]
139+
class _TestResultBunch(BaseBunch[_FloatOrArrayT_co, _FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): # pyright: ignore[reportInvalidTypeArguments]
141140
@property
142-
def statistic(self, /) -> _NDT_float_co: ...
141+
def statistic(self, /) -> _FloatOrArrayT_co: ...
143142
@property
144-
def pvalue(self, /) -> _NDT_float_co: ...
145-
def __new__(_cls, statistic: _NDT_float_co, pvalue: _NDT_float_co) -> Self: ...
146-
def __init__(self, /, statistic: _NDT_float_co, pvalue: _NDT_float_co) -> None: ...
143+
def pvalue(self, /) -> _FloatOrArrayT_co: ...
144+
def __new__(_cls, statistic: _FloatOrArrayT_co, pvalue: _FloatOrArrayT_co) -> Self: ...
145+
def __init__(self, /, statistic: _FloatOrArrayT_co, pvalue: _FloatOrArrayT_co) -> None: ...
147146

148147
###
149148

150-
class SkewtestResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
151-
class KurtosistestResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
152-
class NormaltestResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
153-
class Ttest_indResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
154-
class Power_divergenceResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
155-
class RanksumsResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
156-
class KruskalResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
157-
class FriedmanchisquareResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
158-
class BrunnerMunzelResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
159-
class F_onewayResult(_TestResultTuple[_NDT_float_co], Generic[_NDT_float_co]): ...
160-
161-
class ConfidenceInterval(NamedTuple, Generic[_NDT_float_co]):
162-
low: _NDT_float_co
163-
high: _NDT_float_co
164-
165-
class DescribeResult(NamedTuple, Generic[_NDT_real_co, _NDT_float_co]):
149+
class SkewtestResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
150+
class KurtosistestResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
151+
class NormaltestResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
152+
class Ttest_indResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
153+
class Power_divergenceResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
154+
class RanksumsResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
155+
class KruskalResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
156+
class FriedmanchisquareResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
157+
class BrunnerMunzelResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
158+
class F_onewayResult(_TestResultTuple[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
159+
160+
class ConfidenceInterval(NamedTuple, Generic[_FloatOrArrayT_co]):
161+
low: _FloatOrArrayT_co
162+
high: _FloatOrArrayT_co
163+
164+
class DescribeResult(NamedTuple, Generic[_RealOrArrayT_co, _FloatOrArrayT_co]):
166165
nobs: int
167-
minmax: tuple[_NDT_real_co, _NDT_real_co]
168-
mean: _NDT_float_co
169-
variance: _NDT_float_co
170-
skewness: _NDT_float_co
171-
kurtosis: _NDT_float_co
166+
minmax: tuple[_RealOrArrayT_co, _RealOrArrayT_co]
167+
mean: _FloatOrArrayT_co
168+
variance: _FloatOrArrayT_co
169+
skewness: _FloatOrArrayT_co
170+
kurtosis: _FloatOrArrayT_co
172171

173-
class ModeResult(NamedTuple, Generic[_NDT_real_co, _NDT_int_co]):
174-
mode: _NDT_real_co
175-
count: _NDT_int_co # type: ignore[assignment] # pyright: ignore[reportIncompatibleMethodOverride]
172+
class ModeResult(NamedTuple, Generic[_RealOrArrayT_co, _IntOrArrayT_co]):
173+
mode: _RealOrArrayT_co
174+
count: _IntOrArrayT_co # type: ignore[assignment] # pyright: ignore[reportIncompatibleMethodOverride]
176175

177176
class HistogramResult(NamedTuple):
178177
count: onp.Array1D[np.float64] # type: ignore[assignment] # pyright: ignore[reportIncompatibleMethodOverride]
@@ -192,10 +191,10 @@ class RelfreqResult(NamedTuple):
192191
binsize: onp.Array1D[np.float64]
193192
extrapoints: int
194193

195-
class SigmaclipResult(NamedTuple, Generic[_SCT_real_co, _NDT_float_co]):
194+
class SigmaclipResult(NamedTuple, Generic[_SCT_real_co, _FloatOrArrayT_co]):
196195
clipped: onp.Array1D[_SCT_real_co]
197-
lower: _NDT_float_co
198-
upper: _NDT_float_co
196+
lower: _FloatOrArrayT_co
197+
upper: _FloatOrArrayT_co
199198

200199
class RepeatedResults(NamedTuple):
201200
values: onp.Array1D[np.float64]
@@ -216,21 +215,21 @@ class QuantileTestResult:
216215
_p: float
217216
def confidence_interval(self, /, confidence_level: float = 0.95) -> float: ...
218217

219-
class SignificanceResult(_TestResultBunch[_NDT_float_co], Generic[_NDT_float_co]): ...
220-
class PearsonRResultBase(_TestResultBunch[_NDT_float_co], Generic[_NDT_float_co]): ...
218+
class SignificanceResult(_TestResultBunch[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
219+
class PearsonRResultBase(_TestResultBunch[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]): ...
221220

222-
class PearsonRResult(PearsonRResultBase[_NDT_float_co], Generic[_NDT_float_co]):
221+
class PearsonRResult(PearsonRResultBase[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]):
223222
_alternative: Alternative
224223
_n: int
225224
_x: onp.ArrayND[_Real0D]
226225
_y: onp.ArrayND[_Real0D]
227226
_axis: int
228-
correlation: _NDT_float_co # alias for `statistic`
227+
correlation: _FloatOrArrayT_co # alias for `statistic`
229228
def __init__( # pyright: ignore[reportInconsistentConstructor]
230229
self,
231230
/,
232-
statistic: _NDT_float_co,
233-
pvalue: _NDT_float_co,
231+
statistic: _FloatOrArrayT_co,
232+
pvalue: _FloatOrArrayT_co,
234233
alternative: Alternative,
235234
n: int,
236235
x: onp.ArrayND[_Real0D],
@@ -239,35 +238,35 @@ class PearsonRResult(PearsonRResultBase[_NDT_float_co], Generic[_NDT_float_co]):
239238
) -> None: ...
240239
def confidence_interval(
241240
self, /, confidence_level: float = 0.95, method: BootstrapMethod | None = None
242-
) -> ConfidenceInterval[_NDT_float_co]: ...
241+
) -> ConfidenceInterval[_FloatOrArrayT_co]: ...
243242

244-
class TtestResultBase(_TestResultBunch[_NDT_float_co], Generic[_NDT_float_co]):
243+
class TtestResultBase(_TestResultBunch[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]):
245244
@property
246-
def df(self, /) -> _NDT_float_co: ...
247-
def __new__(_cls, statistic: _NDT_float_co, pvalue: _NDT_float_co, *, df: _NDT_float_co) -> Self: ...
248-
def __init__(self, /, statistic: _NDT_float_co, pvalue: _NDT_float_co, *, df: _NDT_float_co) -> None: ...
245+
def df(self, /) -> _FloatOrArrayT_co: ...
246+
def __new__(_cls, statistic: _FloatOrArrayT_co, pvalue: _FloatOrArrayT_co, *, df: _FloatOrArrayT_co) -> Self: ...
247+
def __init__(self, /, statistic: _FloatOrArrayT_co, pvalue: _FloatOrArrayT_co, *, df: _FloatOrArrayT_co) -> None: ...
249248

250-
class TtestResult(TtestResultBase[_NDT_float_co], Generic[_NDT_float_co]):
249+
class TtestResult(TtestResultBase[_FloatOrArrayT_co], Generic[_FloatOrArrayT_co]):
251250
_alternative: Alternative
252-
_standard_error: _NDT_float_co
253-
_estimate: _NDT_float_co
254-
_statistic_np: _NDT_float_co
251+
_standard_error: _FloatOrArrayT_co
252+
_estimate: _FloatOrArrayT_co
253+
_statistic_np: _FloatOrArrayT_co
255254
_dtype: np.dtype[npc.floating]
256255
_xp: ModuleType
257256

258257
def __init__( # pyright: ignore[reportInconsistentConstructor]
259258
self,
260259
/,
261-
statistic: _NDT_float_co,
262-
pvalue: _NDT_float_co,
263-
df: _NDT_float_co,
260+
statistic: _FloatOrArrayT_co,
261+
pvalue: _FloatOrArrayT_co,
262+
df: _FloatOrArrayT_co,
264263
alternative: Alternative,
265-
standard_error: _NDT_float_co,
266-
estimate: _NDT_float_co,
267-
statistic_np: _NDT_float_co | None = None,
264+
standard_error: _FloatOrArrayT_co,
265+
estimate: _FloatOrArrayT_co,
266+
statistic_np: _FloatOrArrayT_co | None = None,
268267
xp: ModuleType | None = None,
269268
) -> None: ...
270-
def confidence_interval(self, /, confidence_level: float = 0.95) -> ConfidenceInterval[_NDT_float_co]: ...
269+
def confidence_interval(self, /, confidence_level: float = 0.95) -> ConfidenceInterval[_FloatOrArrayT_co]: ...
271270

272271
class KstestResult(_TestResultBunch[np.float64]):
273272
@property
@@ -284,43 +283,45 @@ class KstestResult(_TestResultBunch[np.float64]):
284283
Ks_2sampResult = KstestResult
285284

286285
class LinregressResult(
287-
BunchMixin[tuple[_NDT_float_co, _NDT_float_co, _NDT_float_co, _NDT_float_co, _NDT_float_co, _NDT_float_co]],
288-
tuple[_NDT_float_co, _NDT_float_co, _NDT_float_co, _NDT_float_co, _NDT_float_co, _NDT_float_co],
289-
Generic[_NDT_float_co],
286+
BunchMixin[
287+
tuple[_FloatOrArrayT_co, _FloatOrArrayT_co, _FloatOrArrayT_co, _FloatOrArrayT_co, _FloatOrArrayT_co, _FloatOrArrayT_co]
288+
],
289+
tuple[_FloatOrArrayT_co, _FloatOrArrayT_co, _FloatOrArrayT_co, _FloatOrArrayT_co, _FloatOrArrayT_co, _FloatOrArrayT_co],
290+
Generic[_FloatOrArrayT_co],
290291
):
291292
def __new__(
292293
_cls,
293-
slope: _NDT_float_co,
294-
intercept: _NDT_float_co,
295-
rvalue: _NDT_float_co,
296-
pvalue: _NDT_float_co,
297-
stderr: _NDT_float_co,
294+
slope: _FloatOrArrayT_co,
295+
intercept: _FloatOrArrayT_co,
296+
rvalue: _FloatOrArrayT_co,
297+
pvalue: _FloatOrArrayT_co,
298+
stderr: _FloatOrArrayT_co,
298299
*,
299-
intercept_stderr: _NDT_float_co,
300+
intercept_stderr: _FloatOrArrayT_co,
300301
) -> Self: ...
301302
def __init__(
302303
self,
303304
/,
304-
slope: _NDT_float_co,
305-
intercept: _NDT_float_co,
306-
rvalue: _NDT_float_co,
307-
pvalue: _NDT_float_co,
308-
stderr: _NDT_float_co,
305+
slope: _FloatOrArrayT_co,
306+
intercept: _FloatOrArrayT_co,
307+
rvalue: _FloatOrArrayT_co,
308+
pvalue: _FloatOrArrayT_co,
309+
stderr: _FloatOrArrayT_co,
309310
*,
310-
intercept_stderr: _NDT_float_co,
311+
intercept_stderr: _FloatOrArrayT_co,
311312
) -> None: ...
312313
@property
313-
def slope(self, /) -> _NDT_float_co: ...
314+
def slope(self, /) -> _FloatOrArrayT_co: ...
314315
@property
315-
def intercept(self, /) -> _NDT_float_co: ...
316+
def intercept(self, /) -> _FloatOrArrayT_co: ...
316317
@property
317-
def rvalue(self, /) -> _NDT_float_co: ...
318+
def rvalue(self, /) -> _FloatOrArrayT_co: ...
318319
@property
319-
def pvalue(self, /) -> _NDT_float_co: ...
320+
def pvalue(self, /) -> _FloatOrArrayT_co: ...
320321
@property
321-
def stderr(self, /) -> _NDT_float_co: ...
322+
def stderr(self, /) -> _FloatOrArrayT_co: ...
322323
@property
323-
def intercept_stderr(self, /) -> _NDT_float_co: ...
324+
def intercept_stderr(self, /) -> _FloatOrArrayT_co: ...
324325

325326
def gmean(
326327
a: onp.ToFloatND,
@@ -499,7 +500,7 @@ def percentileofscore(
499500
score: onp.ToFloat | onp.ToFloatND,
500501
kind: L["rank", "weak", "strict", "mean"] = "rank",
501502
nan_policy: NanPolicy = "propagate",
502-
) -> _AsFloat64: ...
503+
) -> np.float64: ...
503504

504505
#
505506
def cumfreq(
@@ -822,24 +823,24 @@ def weightedtau(
822823

823824
#
824825
def pack_TtestResult(
825-
statistic: _NDT_float,
826-
pvalue: _NDT_float,
827-
df: _NDT_float,
826+
statistic: _FloatOrArrayT,
827+
pvalue: _FloatOrArrayT,
828+
df: _FloatOrArrayT,
828829
alternative: Alternative,
829-
standard_error: _NDT_float,
830-
estimate: _NDT_float,
831-
) -> TtestResult[_NDT_float]: ... # undocumented
830+
standard_error: _FloatOrArrayT,
831+
estimate: _FloatOrArrayT,
832+
) -> TtestResult[_FloatOrArrayT]: ... # undocumented
832833

833834
#
834835
def unpack_TtestResult(
835-
res: TtestResult[_NDT_float], _: int
836+
res: TtestResult[_FloatOrArrayT], _: int
836837
) -> tuple[
837-
_NDT_float, # statistic
838-
_NDT_float, # pvalue
839-
_NDT_float, # df
838+
_FloatOrArrayT, # statistic
839+
_FloatOrArrayT, # pvalue
840+
_FloatOrArrayT, # df
840841
Alternative, # _alternative
841-
_NDT_float, # _standard_error
842-
_NDT_float, # _estimate
842+
_FloatOrArrayT, # _standard_error
843+
_FloatOrArrayT, # _estimate
843844
]: ... # undocumented
844845

845846
#
@@ -1104,7 +1105,7 @@ def kstest(
11041105
) -> KstestResult: ...
11051106

11061107
#
1107-
def tiecorrect(rankvals: onp.ToInt | onp.ToIntND) -> _AsFloat64: ...
1108+
def tiecorrect(rankvals: onp.ToIntND) -> float: ...
11081109

11091110
#
11101111
def ranksums(
@@ -1160,7 +1161,7 @@ def wasserstein_distance_nd(
11601161
v_values: onp.ToFloatND,
11611162
u_weights: onp.ToFloatND | None = None,
11621163
v_weights: onp.ToFloatND | None = None,
1163-
) -> _AsFloat64: ...
1164+
) -> np.float64: ...
11641165
def wasserstein_distance(
11651166
u_values: onp.ToFloatND,
11661167
v_values: onp.ToFloatND,

0 commit comments

Comments
 (0)