@@ -1857,29 +1857,12 @@ enum VarianceAlgo
1857
1857
assumeZeroMean
1858
1858
}
1859
1859
1860
- package (mir)
1861
- mixin template moment_ops (T,
1862
- Summation summation )
1860
+ // /
1861
+ struct VarianceAccumulator (T, VarianceAlgo varianceAlgo, Summation summation)
1862
+ if (isMutable ! T && varianceAlgo == VarianceAlgo.naive )
1863
1863
{
1864
- // /
1865
- MeanAccumulator! (T, summation) meanAccumulator;
1866
-
1867
- // /
1868
- size_t count () @property
1869
- {
1870
- return meanAccumulator.count;
1871
- }
1872
-
1873
- // /
1874
- F mean (F = T)() @property
1875
- {
1876
- return meanAccumulator.mean;
1877
- }
1878
- }
1864
+ import mir.functional: naryFun;
1879
1865
1880
- package (mir)
1881
- mixin template outputRange_ops(T)
1882
- {
1883
1866
// /
1884
1867
this (Range )(Range r)
1885
1868
if (isIterable! Range )
@@ -1893,16 +1876,21 @@ mixin template outputRange_ops(T)
1893
1876
{
1894
1877
this .put(x);
1895
1878
}
1896
- }
1897
1879
1898
- // /
1899
- struct VarianceAccumulator (T, VarianceAlgo varianceAlgo, Summation summation)
1900
- if (isMutable! T && varianceAlgo == VarianceAlgo.naive)
1901
- {
1902
- import mir.functional: naryFun;
1880
+ // /
1881
+ MeanAccumulator! (T, summation) meanAccumulator;
1903
1882
1904
- mixin moment_ops! (T, summation);
1905
- mixin outputRange_ops! T;
1883
+ // /
1884
+ size_t count () @property
1885
+ {
1886
+ return meanAccumulator.count;
1887
+ }
1888
+
1889
+ // /
1890
+ F mean (F = T)() @property
1891
+ {
1892
+ return meanAccumulator.mean;
1893
+ }
1906
1894
1907
1895
// /
1908
1896
Summator! (T, summation) sumOfSquares;
@@ -1971,8 +1959,34 @@ struct VarianceAccumulator(T, VarianceAlgo varianceAlgo, Summation summation)
1971
1959
if (isMutable!T &&
1972
1960
varianceAlgo == VarianceAlgo.online)
1973
1961
{
1974
- mixin moment_ops! (T, summation);
1975
- mixin outputRange_ops! T;
1962
+ // /
1963
+ this (Range )(Range r)
1964
+ if (isIterable! Range )
1965
+ {
1966
+ import core.lifetime : move;
1967
+ this .put(r.move);
1968
+ }
1969
+
1970
+ // /
1971
+ this ()(T x)
1972
+ {
1973
+ this .put(x);
1974
+ }
1975
+
1976
+ // /
1977
+ MeanAccumulator! (T, summation) meanAccumulator;
1978
+
1979
+ // /
1980
+ size_t count () @property
1981
+ {
1982
+ return meanAccumulator.count;
1983
+ }
1984
+
1985
+ // /
1986
+ F mean (F = T)() @property
1987
+ {
1988
+ return meanAccumulator.mean;
1989
+ }
1976
1990
1977
1991
// /
1978
1992
Summator! (T, summation) centeredSumOfSquares;
@@ -2173,7 +2187,20 @@ struct VarianceAccumulator(T, VarianceAlgo varianceAlgo, Summation summation)
2173
2187
import mir.functional: naryFun;
2174
2188
import mir.ndslice.slice: Slice, SliceKind, hasAsSlice;
2175
2189
2176
- mixin moment_ops! (T, summation);
2190
+ // /
2191
+ MeanAccumulator! (T, summation) meanAccumulator;
2192
+
2193
+ // /
2194
+ size_t count () @property
2195
+ {
2196
+ return meanAccumulator.count;
2197
+ }
2198
+
2199
+ // /
2200
+ F mean (F = T)() @property
2201
+ {
2202
+ return meanAccumulator.mean;
2203
+ }
2177
2204
2178
2205
// /
2179
2206
Summator! (T, summation) centeredSumOfSquares;
0 commit comments