Skip to content

Commit 4e9543d

Browse files
authored
Merge pull request #651 from bashtage/more-typing-v3
TYP: Typing improvements
2 parents bcd79f1 + a48e903 commit 4e9543d

File tree

5 files changed

+79
-67
lines changed

5 files changed

+79
-67
lines changed

linearmodels/iv/results.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -364,11 +364,11 @@ def summary(self) -> Summary:
364364
smry.tables.append(table)
365365

366366
param_data = c_[
367-
self.params.values[:, None],
368-
self.std_errors.values[:, None],
369-
self.tstats.values[:, None],
370-
self.pvalues.values[:, None],
371-
self.conf_int(),
367+
self.params.to_numpy()[:, None],
368+
self.std_errors.to_numpy()[:, None],
369+
self.tstats.to_numpy()[:, None],
370+
self.pvalues.to_numpy()[:, None],
371+
self.conf_int().to_numpy(),
372372
]
373373
data = []
374374
for row in param_data:
@@ -722,11 +722,11 @@ def diagnostics(self) -> DataFrame:
722722
for col in endog.pandas:
723723
# TODO: BUG in pandas-stube
724724
# https://github.com/pandas-dev/pandas-stubs/issues/97
725-
y = w * endog.pandas[[col]].values
725+
y = w * endog.pandas[[col]].to_numpy()
726726
ey = annihilate(y, x)
727727
partial = _OLS(ey, ez).fit(cov_type=self._cov_type, **self._cov_config)
728728
full = individual_results[str(col)]
729-
params = full.params.values[-nz:]
729+
params = full.params.to_numpy()[-nz:]
730730
params = params[:, None]
731731
c = asarray(full.cov)[-nz:, -nz:]
732732
stat = params.T @ inv(c) @ params
@@ -845,7 +845,7 @@ def summary(self) -> Summary:
845845
params = []
846846
for var in header:
847847
res = self.individual[var]
848-
v = c_[res.params.values, res.tstats.values]
848+
v = c_[res.params.to_numpy(), res.tstats.to_numpy()]
849849
params.append(v.ravel())
850850
params_arr = array(params)
851851
params_fmt = [[_str(val) for val in row] for row in params_arr.T]
@@ -970,7 +970,7 @@ def sargan(self) -> InvalidTestStatistic | WaldTestStatistic:
970970
name=name,
971971
)
972972

973-
eps = self.resids.values[:, None]
973+
eps = self.resids.to_numpy()[:, None]
974974
u = annihilate(eps, self.model._z)
975975
stat = nobs * (1 - (u.T @ u) / (eps.T @ eps)).squeeze()
976976
null = "The model is not overidentified."
@@ -1033,17 +1033,17 @@ def _endogeneity_setup(
10331033
raise TypeError("variables must be a str or a list of str.")
10341034

10351035
nobs = self.model.dependent.shape[0]
1036-
e2 = asarray(self.resids.values)
1036+
e2 = asarray(self.resids.to_numpy())
10371037
nendog, nexog = self.model.endog.shape[1], self.model.exog.shape[1]
10381038
if variables is None:
10391039
assumed_exog = self.model.endog.ndarray
10401040
aug_exog = c_[self.model.exog.ndarray, assumed_exog]
10411041
still_endog = empty((nobs, 0))
10421042
else:
10431043
assert isinstance(variables, list)
1044-
assumed_exog = self.model.endog.pandas[variables].values
1044+
assumed_exog = self.model.endog.pandas[variables].to_numpy()
10451045
ex = [c for c in self.model.endog.cols if c not in variables]
1046-
still_endog = self.model.endog.pandas[ex].values
1046+
still_endog = self.model.endog.pandas[ex].to_numpy()
10471047
aug_exog = c_[self.model.exog.ndarray, assumed_exog]
10481048
ntested = assumed_exog.shape[1]
10491049

@@ -1052,7 +1052,7 @@ def _endogeneity_setup(
10521052
mod = IV2SLS(
10531053
self.model.dependent, aug_exog, still_endog, self.model.instruments
10541054
)
1055-
e0 = mod.fit().resids.values[:, None]
1055+
e0 = mod.fit().resids.to_numpy()[:, None]
10561056

10571057
z2 = c_[self.model.exog.ndarray, self.model.instruments.ndarray]
10581058
z1 = c_[z2, assumed_exog]
@@ -1257,8 +1257,8 @@ def wooldridge_regression(self) -> WaldTestStatistic:
12571257
mod = _OLS(self.model.dependent, augx)
12581258
res = mod.fit(cov_type=self.cov_type, **self.cov_config)
12591259
norig = self.model._x.shape[1]
1260-
test_params = asarray(res.params.values[norig:], dtype=float)
1261-
test_cov = res.cov.values[norig:, norig:]
1260+
test_params = asarray(res.params.to_numpy()[norig:], dtype=float)
1261+
test_cov = res.cov.to_numpy()[norig:, norig:]
12621262
stat = test_params.T @ inv(test_cov) @ test_params
12631263
df = len(test_params)
12641264
null = "Endogenous variables are exogenous"
@@ -1310,7 +1310,7 @@ def wooldridge_overid(self) -> InvalidTestStatistic | WaldTestStatistic:
13101310
endog_hat = proj(endog.ndarray, c_[exog.ndarray, instruments.ndarray])
13111311
q = instruments.ndarray[:, : (ninstr - nendog)]
13121312
q_res = annihilate(q, c_[self.model.exog.ndarray, endog_hat])
1313-
test_functions = q_res * self.resids.values[:, None]
1313+
test_functions = q_res * self.resids.to_numpy()[:, None]
13141314
res = _OLS(ones((nobs, 1)), test_functions).fit(cov_type="unadjusted")
13151315

13161316
stat = res.nobs * res.rsquared
@@ -1520,9 +1520,9 @@ def c_stat(self, variables: list[str] | str | None = None) -> WaldTestStatistic:
15201520
variable_lst = [variables]
15211521
else:
15221522
raise TypeError("variables must be a str or a list of str.")
1523-
exog_e = c_[exog.ndarray, endog.pandas[variable_lst].values]
1523+
exog_e = c_[exog.ndarray, endog.pandas[variable_lst].to_numpy()]
15241524
ex = [c for c in endog.pandas if c not in variable_lst]
1525-
endog_e = endog.pandas[ex].values
1525+
endog_e = endog.pandas[ex].to_numpy()
15261526
null = "Variables {} are exogenous".format(", ".join(variable_lst))
15271527
from linearmodels.iv.model import IVGMM, IVGMMCUE
15281528

@@ -1637,7 +1637,7 @@ def summary(self) -> Summary:
16371637
],
16381638
axis=1,
16391639
)
1640-
vals_list = [[i for i in v] for v in vals.T.values]
1640+
vals_list = [[i for i in v] for v in vals.T.to_numpy()]
16411641
vals_list[2] = [str(v) for v in vals_list[2]]
16421642
for i in range(4, len(vals_list)):
16431643
vals_list[i] = [_str(v) for v in vals_list[i]]
@@ -1650,11 +1650,11 @@ def summary(self) -> Summary:
16501650

16511651
for i in range(len(params)):
16521652
formatted_and_starred = []
1653-
for v, pv in zip(params.values[i], pvalues[i]):
1653+
for v, pv in zip(params.to_numpy()[i], pvalues[i]):
16541654
formatted_and_starred.append(add_star(_str(v), pv, self._stars))
16551655
params_fmt.append(formatted_and_starred)
16561656
precision_fmt = []
1657-
for v in precision.values[i]:
1657+
for v in precision.to_numpy()[i]:
16581658
v_str = _str(v)
16591659
v_str = f"({v_str})" if v_str.strip() else v_str
16601660
precision_fmt.append(v_str)

linearmodels/panel/results.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -437,11 +437,11 @@ def summary(self) -> Summary:
437437
smry.tables.append(table)
438438

439439
param_data = np.c_[
440-
self.params.values[:, None],
441-
self.std_errors.values[:, None],
442-
self.tstats.values[:, None],
443-
self.pvalues.values[:, None],
444-
self.conf_int(),
440+
self.params.to_numpy()[:, None],
441+
self.std_errors.to_numpy()[:, None],
442+
self.tstats.to_numpy()[:, None],
443+
self.pvalues.to_numpy()[:, None],
444+
self.conf_int().to_numpy(),
445445
]
446446
data = []
447447
for row in param_data:

linearmodels/shared/utility.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,8 @@ def panel_to_frame(
186186
187187
Panel(x, items, major_axis, minor_axis).swapaxes(1,2).to_frame()
188188
"""
189-
nmajor = np.arange(len(major_axis))
190-
nminor = np.arange(len(minor_axis))
189+
nmajor = np.arange(len(major_axis)).tolist()
190+
nminor = np.arange(len(minor_axis)).tolist()
191191
final_levels = [major_axis, minor_axis]
192192
mi = MultiIndex.from_product([nmajor, nminor])
193193
if x is not None:

pyproject.toml

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
[project]
2+
name = "linearmodels"
3+
readme = "README.md"
4+
license = "NCSA"
5+
license-files = [ "LICENSE.md" ]
6+
dynamic = ["dependencies", "version"]
7+
authors = [{ name = "Kevin Sheppard", email = "[email protected]" }]
8+
maintainers = [
9+
{ name = "Kevin Sheppard", email = "[email protected]" },
10+
]
11+
description = "Linear Panel, Instrumental Variable, Asset Pricing, and System Regression models for Python"
12+
requires-python = ">=3.10"
13+
keywords=[
14+
"linear models",
15+
"regression",
16+
"instrumental variables",
17+
"IV",
18+
"panel",
19+
"fixed effects",
20+
"clustered",
21+
"heteroskedasticity",
22+
"endogeneity",
23+
"instruments",
24+
"statistics",
25+
"statistical inference",
26+
"econometrics",
27+
]
28+
classifiers = [
29+
"Development Status :: 5 - Production/Stable",
30+
"Intended Audience :: End Users/Desktop",
31+
"Intended Audience :: Financial and Insurance Industry",
32+
"Intended Audience :: Science/Research",
33+
"Programming Language :: Python :: 3.10",
34+
"Programming Language :: Python :: 3.11",
35+
"Programming Language :: Python :: 3.12",
36+
"Programming Language :: Python :: 3.13",
37+
"Operating System :: MacOS :: MacOS X",
38+
"Operating System :: Microsoft :: Windows",
39+
"Operating System :: POSIX",
40+
"Programming Language :: Python",
41+
"Programming Language :: Cython",
42+
"Topic :: Scientific/Engineering",
43+
]
44+
45+
[project.urls]
46+
homepage = "https://github.com/bashtage/linearmodels"
47+
documentation = "https://bashtage.github.io/linearmodels/"
48+
repository = "https://github.com/bashtage/linearmodels"
49+
changelog = "https://bashtage.github.io/linearmodels/changes.html"
50+
151
[build-system]
252
requires = [
353
"setuptools>=61",
@@ -9,7 +59,7 @@ requires = [
959
build-backend = "setuptools.build_meta"
1060

1161
[tool.black]
12-
target-version = ['py39', 'py310', 'py311', 'py312']
62+
target-version = ['py39', 'py310', 'py311', 'py312', 'py313']
1363
exclude = '''
1464
(
1565
\.egg

setup.py

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -76,54 +76,16 @@ def run_setup(binary: bool = True) -> None:
7676
logging.warning("Building without binary support")
7777

7878
setup(
79-
name="linearmodels",
80-
license="NCSA",
81-
description="Linear Panel, Instrumental Variable, Asset Pricing, and System "
82-
"Regression models for Python",
8379
packages=["linearmodels"]
8480
+ [f"linearmodels.{v}" for v in find_namespace_packages("linearmodels")],
8581
package_dir={"linearmodels": "./linearmodels"},
86-
author="Kevin Sheppard",
87-
author_email="[email protected]",
88-
url="http://github.com/bashtage/linearmodels",
8982
long_description=long_description,
9083
long_description_content_type="text/markdown",
9184
install_requires=open("requirements.txt").read().split("\n"),
9285
include_package_data=True,
9386
package_data={"linearmodels": additional_files},
94-
keywords=[
95-
"linear models",
96-
"regression",
97-
"instrumental variables",
98-
"IV",
99-
"panel",
100-
"fixed effects",
101-
"clustered",
102-
"heteroskedasticity",
103-
"endogeneity",
104-
"instruments",
105-
"statistics",
106-
"statistical inference",
107-
"econometrics",
108-
],
10987
zip_safe=False,
110-
classifiers=[
111-
"Development Status :: 5 - Production/Stable",
112-
"Intended Audience :: End Users/Desktop",
113-
"Intended Audience :: Financial and Insurance Industry",
114-
"Intended Audience :: Science/Research",
115-
"Programming Language :: Python :: 3.10",
116-
"Programming Language :: Python :: 3.11",
117-
"Programming Language :: Python :: 3.12",
118-
"Programming Language :: Python :: 3.13",
119-
"Operating System :: MacOS :: MacOS X",
120-
"Operating System :: Microsoft :: Windows",
121-
"Operating System :: POSIX",
122-
"Programming Language :: Python",
123-
"Topic :: Scientific/Engineering",
124-
],
12588
ext_modules=extensions,
126-
python_requires=">=3.10",
12789
distclass=BinaryDistribution,
12890
)
12991

0 commit comments

Comments
 (0)