Skip to content

Commit 741d6bc

Browse files
committed
Rename sensorselector to sspor in tests and source code
1 parent f6f5c04 commit 741d6bc

File tree

3 files changed

+44
-43
lines changed

3 files changed

+44
-43
lines changed

pysensors/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@
77
pass
88

99

10-
from .pysensors import SensorSelector
10+
from .classification import SSPOC
11+
from .reconstruction import SSPOR
1112

1213
__all__ = [
1314
# Modules:
1415
"basis",
1516
"classification",
17+
"reconstruction",
1618
"optimizers",
1719
"utils",
1820
# Non-modules:
19-
"SensorSelector",
21+
"SSPOR",
22+
"SSPOC",
2023
]
Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
"""
2-
SensorSelector object definition.
3-
"""
41
import warnings
52

63
import numpy as np
@@ -9,20 +6,21 @@
96
from sklearn.base import BaseEstimator
107
from sklearn.utils.validation import check_is_fitted
118

12-
from .basis import Identity
13-
from .optimizers import QR
14-
from .utils import validate_input
9+
from ..basis import Identity
10+
from ..optimizers import QR
11+
from ..utils import validate_input
1512

1613

1714
INT_DTYPES = (int, np.int64, np.int32, np.int16, np.int8)
1815

1916

20-
class SensorSelector(BaseEstimator):
17+
class SSPOR(BaseEstimator):
2118
"""
22-
A model for selecting the best sensor locations for state reconstruction.
19+
Sparse Sensor Placement Optimization for Reconstruction:
20+
a model for selecting the best sensor locations for state reconstruction.
2321
2422
Given a basis in which to represent the state (e.g. PCA modes) along with
25-
measurement data, a :class:`SensorSelector` instance produces a list of
23+
measurement data, a :class:`SSPOR` instance produces a list of
2624
sensor locations (a permutation of the numbers 0, 1, ...,
2725
:code:`n_input_features` - 1) ranked in descending order of importance.
2826
One can then select the top k sensors and take future measurements at
@@ -40,9 +38,9 @@ class SensorSelector(BaseEstimator):
4038
4139
n_sensors: int, optional (default n_input_features)
4240
Number of sensors to select. Note that
43-
``s = SensorSelector(n_sensors=10); s.fit(x)``
41+
``s = SSPOR(n_sensors=10); s.fit(x)``
4442
is equivalent to
45-
``s = SensorSelector(); s.fit(x); s.set_number_of_sensors(10)``.
43+
``s = SSPOR(); s.fit(x); s.set_number_of_sensors(10)``.
4644
4745
Attributes
4846
----------
@@ -58,14 +56,14 @@ class SensorSelector(BaseEstimator):
5856
Examples
5957
--------
6058
>>> import numpy as np
61-
>>> from pysensors import SensorSelector
59+
>>> from pysensors import SSPOR
6260
>>>
6361
>>> x = np.linspace(0, 1, 501)
6462
>>> monomials = np.vander(x, 15).T
6563
>>>
66-
>>> model = SensorSelector(n_sensors=5)
64+
>>> model = SSPOR(n_sensors=5)
6765
>>> model.fit(monomials)
68-
SensorSelector(basis=Identity(n_basis_modes=15), n_sensors=5, optimizer=QR())
66+
SSPOR(basis=Identity(n_basis_modes=15), n_sensors=5, optimizer=QR())
6967
>>> print(model.selected_sensors)
7068
[500 377 0 460 185]
7169
>>> print(x[model.selected_sensors])
@@ -96,7 +94,7 @@ def __init__(self, basis=None, optimizer=None, n_sensors=None):
9694

9795
def fit(self, x, quiet=False, prefit_basis=False, seed=None, **optimizer_kws):
9896
"""
99-
Fit the SensorSelector model, determining which sensors are relevant.
97+
Fit the SSPOR model, determining which sensors are relevant.
10098
10199
Parameters
102100
----------
@@ -124,7 +122,7 @@ def fit(self, x, quiet=False, prefit_basis=False, seed=None, **optimizer_kws):
124122
125123
Returns
126124
-------
127-
self: a fitted :class:`SensorSelector` instance
125+
self: a fitted :class:`SSPOR` instance
128126
"""
129127

130128
# Fit basis functions to data
@@ -311,7 +309,7 @@ def set_n_sensors(self, n_sensors):
311309

312310
def update_n_basis_modes(self, n_basis_modes, x=None):
313311
"""
314-
Re-fit the SensorSelector object using a different value of
312+
Re-fit the :class:`SSPOR` object using a different value of
315313
``n_basis_modes``.
316314
317315
This method allows one to relearn sensor locations for a
Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""
2-
Unit tests for SensorSelector class (and any other classes implemented
2+
Unit tests for SSPOR class (and any other classes implemented
33
in pysensors.py).
44
55
Note: all tests should be encapsulated in functions whose
@@ -21,16 +21,16 @@
2121
from sklearn.exceptions import NotFittedError
2222
from sklearn.utils.validation import check_is_fitted
2323

24-
from pysensors import SensorSelector
2524
from pysensors.basis import Identity
2625
from pysensors.basis import RandomProjection
2726
from pysensors.basis import SVD
2827
from pysensors.optimizers import CCQR
28+
from pysensors.reconstruction import SSPOR
2929

3030

3131
def test_not_fitted(data_vandermonde):
3232
x = data_vandermonde
33-
model = SensorSelector()
33+
model = SSPOR()
3434

3535
# Should not be able to call any of these methods before fitting
3636
with pytest.raises(NotFittedError):
@@ -51,7 +51,7 @@ def test_set_number_of_sensors(data_vandermonde):
5151
x = data_vandermonde
5252
max_sensors = x.shape[1]
5353

54-
model = SensorSelector()
54+
model = SSPOR()
5555
model.fit(x)
5656

5757
with pytest.raises(ValueError):
@@ -75,7 +75,7 @@ def test_get_all_sensors(data):
7575
x = data
7676
max_sensors = x.shape[1]
7777

78-
model = SensorSelector()
78+
model = SSPOR()
7979
model.fit(x)
8080
assert len(model.get_all_sensors()) == max_sensors
8181

@@ -85,7 +85,7 @@ def test_get_all_sensors(data):
8585
)
8686
def test_basis_compatibility(data_vandermonde, basis):
8787
x = data_vandermonde
88-
model = SensorSelector(basis=basis)
88+
model = SSPOR(basis=basis)
8989
model.fit(x)
9090
check_is_fitted(model)
9191

@@ -94,17 +94,17 @@ def test_n_sensors(data_random):
9494

9595
# Check for bad inputs
9696
with pytest.raises(ValueError):
97-
model = SensorSelector(n_sensors=0)
97+
model = SSPOR(n_sensors=0)
9898
with pytest.raises(ValueError):
99-
model = SensorSelector(n_sensors=5.4)
99+
model = SSPOR(n_sensors=5.4)
100100
with pytest.raises(ValueError):
101-
model = SensorSelector(n_sensors="1")
101+
model = SSPOR(n_sensors="1")
102102
with pytest.raises(ValueError):
103-
model = SensorSelector(n_sensors=[1])
103+
model = SSPOR(n_sensors=[1])
104104

105105
n_sensors = 5
106106
x = data_random
107-
model = SensorSelector(n_sensors=n_sensors)
107+
model = SSPOR(n_sensors=n_sensors)
108108
model.fit(x)
109109

110110
assert len(model.get_selected_sensors()) == n_sensors
@@ -114,7 +114,7 @@ def test_predict(data_random):
114114
data = data_random
115115

116116
n_sensors = 5
117-
model = SensorSelector(n_sensors=n_sensors)
117+
model = SSPOR(n_sensors=n_sensors)
118118
model.fit(data)
119119

120120
# Wrong size input for predict
@@ -130,7 +130,7 @@ def test_predict(data_random):
130130
def test_square_predict(data_random_square):
131131
data = data_random_square
132132

133-
model = SensorSelector()
133+
model = SSPOR()
134134
model.fit(data)
135135
sensors = model.get_selected_sensors()
136136
assert data.shape == model.predict(data[:, sensors]).shape
@@ -140,7 +140,7 @@ def test_predict_accuracy(data_vandermonde_testing):
140140
# Polynomials up to degree 10 on [0, 1]
141141
data, x_test = data_vandermonde_testing
142142

143-
model = SensorSelector()
143+
model = SSPOR()
144144
model.fit(data, seed=1)
145145
model.set_number_of_sensors(8)
146146
sensors = model.get_selected_sensors()
@@ -154,7 +154,7 @@ def test_predict_accuracy(data_vandermonde_testing):
154154
def test_reconstruction_error(data_vandermonde_testing):
155155
data, x_test = data_vandermonde_testing
156156

157-
model = SensorSelector(n_sensors=3)
157+
model = SSPOR(n_sensors=3)
158158
model.fit(data)
159159

160160
assert len(model.reconstruction_error(x_test)) == min(
@@ -168,14 +168,14 @@ def test_reconstruction_error(data_vandermonde_testing):
168168
def test_score(data_vandermonde):
169169
data = data_vandermonde
170170

171-
weak_model = SensorSelector(n_sensors=3)
171+
weak_model = SSPOR(n_sensors=3)
172172
weak_model.fit(data)
173173

174174
# You must pass in data with as many features as the training set
175175
with pytest.raises(ValueError):
176176
weak_model.score(data[:, :5])
177177

178-
strong_model = SensorSelector(n_sensors=8)
178+
strong_model = SSPOR(n_sensors=8)
179179
strong_model.fit(data)
180180

181181
assert weak_model.score(data) < strong_model.score(data)
@@ -189,15 +189,15 @@ def test_prefit_basis(data_random):
189189
# This data should be ignored during the fit
190190
data_to_ignore = nan * data_random
191191

192-
model = SensorSelector(basis=basis)
192+
model = SSPOR(basis=basis)
193193
model.fit(data_to_ignore, prefit_basis=True)
194194
assert not any(isnan(model.get_selected_sensors()))
195195

196196

197197
def test_update_n_basis_modes_errors(data_random):
198198
data = data_random
199199
n_basis_modes = 5
200-
model = SensorSelector(basis=Identity(n_basis_modes=n_basis_modes))
200+
model = SSPOR(basis=Identity(n_basis_modes=n_basis_modes))
201201

202202
model.fit(data)
203203

@@ -215,7 +215,7 @@ def test_update_n_basis_modes_errors(data_random):
215215

216216
def test_update_n_basis_modes(data_random):
217217
data = data_random
218-
model = SensorSelector()
218+
model = SSPOR()
219219
model.fit(data)
220220
assert model.basis.n_basis_modes == data.shape[0]
221221
assert model.basis_matrix_.shape[1] == data.shape[0]
@@ -229,7 +229,7 @@ def test_update_n_basis_modes(data_random):
229229
def test_update_n_basis_modes_refit(data_random):
230230
data = data_random
231231
n_basis_modes = 5
232-
model = SensorSelector(basis=Identity(n_basis_modes=n_basis_modes))
232+
model = SSPOR(basis=Identity(n_basis_modes=n_basis_modes))
233233
model.fit(data)
234234
assert model.basis_matrix_.shape[1] == n_basis_modes
235235

@@ -240,7 +240,7 @@ def test_update_n_basis_modes_refit(data_random):
240240
def test_update_n_basis_modes_unfit_basis(data_random):
241241
data = data_random
242242
n_basis_modes = 5
243-
model = SensorSelector()
243+
model = SSPOR()
244244
model.update_n_basis_modes(n_basis_modes, data)
245245

246246
assert model.basis_matrix_.shape[1] == n_basis_modes
@@ -252,14 +252,14 @@ def test_ccqr_integration(data_random):
252252
costs[[1, 3, 5]] = 100
253253

254254
optimizer = CCQR(sensor_costs=costs)
255-
model = SensorSelector(optimizer=optimizer).fit(data)
255+
model = SSPOR(optimizer=optimizer).fit(data)
256256

257257
check_is_fitted(model)
258258

259259

260260
def test_sensor_selector_properties(data_random):
261261
data = data_random
262-
model = SensorSelector().fit(data)
262+
model = SSPOR().fit(data)
263263

264264
assert all(model.get_all_sensors() == model.all_sensors)
265265
assert all(model.get_selected_sensors() == model.selected_sensors)

0 commit comments

Comments
 (0)