Skip to content

Commit 7bca7aa

Browse files
authored
refactor: make sum_of_deltas_squared private (#602)
1 parent 887b40d commit 7bca7aa

File tree

7 files changed

+34
-32
lines changed

7 files changed

+34
-32
lines changed

docs/usage/accumulators.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ Mean
101101

102102
This accumulator is contained in the Mean storage, and supports Views. It
103103
provides three values; ``.count``, ``.value``, and ``.variance``. Internally,
104-
the variance is stored as ``sum_of_deltas_squared``, which is used to compute
104+
the variance is stored as ``_sum_of_deltas_squared``, which is used to compute
105105
``variance``.
106106

107107
For example, you could compute the mean of the following values::

include/bh_python/accumulators/mean.hpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,29 @@ struct mean {
3333
const value_type& variance) noexcept
3434
: count(n)
3535
, value(mean)
36-
, sum_of_deltas_squared(variance * (n - 1)) {}
36+
, _sum_of_deltas_squared(variance * (n - 1)) {}
3737

3838
mean(const value_type& sum,
3939
const value_type& mean,
40-
const value_type& sum_of_deltas_squared,
40+
const value_type& _sum_of_deltas_squared,
4141
bool /* Tag to trigger python internal constructor */)
4242
: count(sum)
4343
, value(mean)
44-
, sum_of_deltas_squared(sum_of_deltas_squared) {}
44+
, _sum_of_deltas_squared(_sum_of_deltas_squared) {}
4545

4646
void operator()(const value_type& x) noexcept {
4747
count += static_cast<value_type>(1);
4848
const auto delta = x - value;
4949
value += delta / count;
50-
sum_of_deltas_squared += delta * (x - value);
50+
_sum_of_deltas_squared += delta * (x - value);
5151
}
5252

5353
void operator()(const boost::histogram::weight_type<value_type>& w,
5454
const value_type& x) noexcept {
5555
count += w.value;
5656
const auto delta = x - value;
5757
value += w.value * delta / count;
58-
sum_of_deltas_squared += w.value * delta * (x - value);
58+
_sum_of_deltas_squared += w.value * delta * (x - value);
5959
}
6060

6161
mean& operator+=(const mean& rhs) noexcept {
@@ -69,38 +69,40 @@ struct mean {
6969

7070
count += rhs.count;
7171
value = (n1 * mu1 + n2 * mu2) / count;
72-
sum_of_deltas_squared += rhs.sum_of_deltas_squared;
73-
sum_of_deltas_squared
72+
_sum_of_deltas_squared += rhs._sum_of_deltas_squared;
73+
_sum_of_deltas_squared
7474
+= n1 * (value - mu1) * (value - mu1) + n2 * (value - mu2) * (value - mu2);
7575

7676
return *this;
7777
}
7878

7979
mean& operator*=(const value_type& s) noexcept {
8080
value *= s;
81-
sum_of_deltas_squared *= s * s;
81+
_sum_of_deltas_squared *= s * s;
8282
return *this;
8383
}
8484

8585
bool operator==(const mean& rhs) const noexcept {
8686
return count == rhs.count && value == rhs.value
87-
&& sum_of_deltas_squared == rhs.sum_of_deltas_squared;
87+
&& _sum_of_deltas_squared == rhs._sum_of_deltas_squared;
8888
}
8989

9090
bool operator!=(const mean& rhs) const noexcept { return !operator==(rhs); }
9191

92-
value_type variance() const noexcept { return sum_of_deltas_squared / (count - 1); }
92+
value_type variance() const noexcept {
93+
return _sum_of_deltas_squared / (count - 1);
94+
}
9395

9496
template <class Archive>
9597
void serialize(Archive& ar, unsigned) {
9698
ar& boost::make_nvp("count", count);
9799
ar& boost::make_nvp("value", value);
98-
ar& boost::make_nvp("sum_of_deltas_squared", sum_of_deltas_squared);
100+
ar& boost::make_nvp("_sum_of_deltas_squared", _sum_of_deltas_squared);
99101
}
100102

101103
value_type count{};
102104
value_type value{};
103-
value_type sum_of_deltas_squared{};
105+
value_type _sum_of_deltas_squared{};
104106
};
105107

106108
} // namespace accumulators

notebooks/BoostHistogramHandsOn.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,7 @@
884884
" [(3., 0.4, 0.02), (0., 0. , 0. ), (0., 0. , 0. ), (0., 0. , 0. ),\n",
885885
" (0., 0. , 0. ), (0., 0. , 0. ), (0., 0. , 0. ), (0., 0. , 0. ),\n",
886886
" (0., 0. , 0. ), (0., 0. , 0. )],\n",
887-
" dtype=[('count', '<f8'), ('value', '<f8'), ('sum_of_deltas_squared', '<f8')])"
887+
" dtype=[('count', '<f8'), ('value', '<f8'), ('_sum_of_deltas_squared', '<f8')])"
888888
]
889889
},
890890
"execution_count": 36,

src/boost_histogram/_core/accumulators.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class Mean(_BaseAccumulator):
7979
@property
8080
def value(self) -> float: ...
8181
@property
82-
def sum_of_deltas_squared(self) -> float: ...
82+
def _sum_of_deltas_squared(self) -> float: ...
8383
@property
8484
def variance(self) -> float: ...
8585
def __call__(

src/boost_histogram/_internal/view.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,20 +219,20 @@ def variance(self) -> np.ndarray:
219219
)
220220

221221

222-
@fields("count", "value", "sum_of_deltas_squared")
222+
@fields("count", "value", "_sum_of_deltas_squared")
223223
class MeanView(View):
224224
__slots__ = ()
225225
_PARENT = Mean
226226

227227
count: np.ndarray
228228
value: np.ndarray
229-
sum_of_deltas_squared: np.ndarray
229+
_sum_of_deltas_squared: np.ndarray
230230

231231
# Variance is a computation
232232
@property
233233
def variance(self) -> np.ndarray:
234234
with np.errstate(divide="ignore", invalid="ignore"):
235-
return self["sum_of_deltas_squared"] / (self["count"] - 1) # type: ignore
235+
return self["_sum_of_deltas_squared"] / (self["count"] - 1) # type: ignore
236236

237237

238238
def _to_view(

src/register_accumulators.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ void register_accumulators(py::module& accumulators) {
263263
;
264264

265265
using mean = accumulators::mean<double>;
266-
PYBIND11_NUMPY_DTYPE(mean, count, value, sum_of_deltas_squared);
266+
PYBIND11_NUMPY_DTYPE(mean, count, value, _sum_of_deltas_squared);
267267

268268
register_accumulator<mean>(accumulators, "Mean", py::buffer_protocol())
269269
.def_buffer(make_buffer<mean>())
@@ -275,7 +275,7 @@ void register_accumulators(py::module& accumulators) {
275275

276276
.def_readonly("count", &mean::count)
277277
.def_readonly("value", &mean::value)
278-
.def_readonly("sum_of_deltas_squared", &mean::sum_of_deltas_squared)
278+
.def_readonly("_sum_of_deltas_squared", &mean::_sum_of_deltas_squared)
279279

280280
.def_property_readonly("variance", &mean::variance)
281281

@@ -311,11 +311,11 @@ void register_accumulators(py::module& accumulators) {
311311
return self.count;
312312
else if(key.equal(py::str("value")))
313313
return self.value;
314-
else if(key.equal(py::str("sum_of_deltas_squared")))
315-
return self.sum_of_deltas_squared;
314+
else if(key.equal(py::str("_sum_of_deltas_squared")))
315+
return self._sum_of_deltas_squared;
316316
else
317317
throw py::key_error(
318-
py::str("{0} not one of count, value, sum_of_deltas_squared")
318+
py::str("{0} not one of count, value, _sum_of_deltas_squared")
319319
.format(key));
320320
})
321321
.def("__setitem__",
@@ -324,17 +324,17 @@ void register_accumulators(py::module& accumulators) {
324324
self.count = value;
325325
else if(key.equal(py::str("value")))
326326
self.value = value;
327-
else if(key.equal(py::str("sum_of_deltas_squared")))
328-
self.sum_of_deltas_squared = value;
327+
else if(key.equal(py::str("_sum_of_deltas_squared")))
328+
self._sum_of_deltas_squared = value;
329329
else
330330
throw py::key_error(
331-
py::str("{0} not one of count, value, sum_of_deltas_squared")
331+
py::str("{0} not one of count, value, _sum_of_deltas_squared")
332332
.format(key));
333333
})
334334

335335
.def("_ipython_key_completions_",
336336
[](py::object /* self */) {
337-
return py::make_tuple("count", "value", "sum_of_deltas_squared");
337+
return py::make_tuple("count", "value", "_sum_of_deltas_squared");
338338
})
339339

340340
;

tests/test_storage.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def test_setting_profile():
9898

9999
assert b["value"][0] == h[0].value
100100
assert b["count"][0] == h[0].count
101-
assert b["sum_of_deltas_squared"][0] == h[0].sum_of_deltas_squared
101+
assert b["_sum_of_deltas_squared"][0] == h[0]._sum_of_deltas_squared
102102

103103
h[0] = bh.accumulators.Mean(count=6, value=3, variance=2)
104104
assert h[0].count == 6
@@ -109,20 +109,20 @@ def test_setting_profile():
109109

110110
assert b["value"][0] == h[0].value
111111
assert b["count"][0] == h[0].count
112-
assert b["sum_of_deltas_squared"][0] == h[0].sum_of_deltas_squared
112+
assert b["_sum_of_deltas_squared"][0] == h[0]._sum_of_deltas_squared
113113

114114
assert b[0]["value"] == a[0]["value"]
115115
assert b[0]["count"] == a[0]["count"]
116-
assert b[0]["sum_of_deltas_squared"] == a[0]["sum_of_deltas_squared"]
116+
assert b[0]["_sum_of_deltas_squared"] == a[0]["_sum_of_deltas_squared"]
117117

118118
assert b[0]["value"] == a["value"][0]
119119
assert b[0]["count"] == a["count"][0]
120-
assert b[0]["sum_of_deltas_squared"] == a["sum_of_deltas_squared"][0]
120+
assert b[0]["_sum_of_deltas_squared"] == a["_sum_of_deltas_squared"][0]
121121

122122
assert_array_equal(a.view().value, b.view()["value"])
123123
assert_array_equal(a.view().count, b.view()["count"])
124124
assert_array_equal(
125-
a.view().sum_of_deltas_squared, b.view()["sum_of_deltas_squared"]
125+
a.view()._sum_of_deltas_squared, b.view()["_sum_of_deltas_squared"]
126126
)
127127

128128

0 commit comments

Comments
 (0)