Skip to content

Commit dd01e3f

Browse files
committed
Group time series summer
1 parent f93a46e commit dd01e3f

File tree

8 files changed

+220
-214
lines changed

8 files changed

+220
-214
lines changed

Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
<RepositoryUrl>https://github.com/managedcode/TimeSeries</RepositoryUrl>
1818
<PackageProjectUrl>https://github.com/managedcode/TimeSeries</PackageProjectUrl>
1919
<Product>Managed Code - TimeSeries</Product>
20-
<Version>0.0.16</Version>
21-
<PackageVersion>0.0.16</PackageVersion>
20+
<Version>0.0.17</Version>
21+
<PackageVersion>0.0.17</PackageVersion>
2222

2323
</PropertyGroup>
2424
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">

ManagedCode.TimeSeries/Abstractions/BaseGroupTimeSeriesSummer.cs renamed to ManagedCode.TimeSeries/Abstractions/BaseGroupNumberTimeSeriesSummer.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
namespace ManagedCode.TimeSeries.Abstractions;
44

5-
public abstract class BaseGroupTimeSeriesSummer<TNumber, TSummer, TSelf> : IDisposable
6-
where TSummer : BaseNumberTimeSeriesSummer<TNumber, TSelf>
5+
public abstract class BaseGroupNumberTimeSeriesSummer<TNumber, TSummer, TSelf> : IDisposable
6+
where TSummer : BaseNumberTimeSeriesSummer<TNumber, TSummer>
77
where TNumber : INumber<TNumber>
8-
where TSelf : BaseTimeSeries<TNumber, TNumber, TSelf>
8+
where TSelf : BaseGroupNumberTimeSeriesSummer<TNumber, TSummer, TSelf>
99
{
1010
private readonly Timer? _timer;
1111
public readonly Dictionary<string, TSummer> TimeSeries = new();
1212

13-
protected BaseGroupTimeSeriesSummer(TimeSpan sampleInterval, bool deleteOverdueSamples)
13+
protected BaseGroupNumberTimeSeriesSummer(TimeSpan sampleInterval, bool deleteOverdueSamples)
1414
{
1515
_timer = deleteOverdueSamples ? new Timer(Callback, null, sampleInterval, sampleInterval) : null;
1616
}

ManagedCode.TimeSeries/Abstractions/BaseTimeSeriesSummer.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace ManagedCode.TimeSeries.Abstractions;
44

5-
public abstract class BaseTimeSeriesSummer<TNumber, TSelf> : BaseTimeSeries<TNumber, TNumber, TSelf>
6-
where TNumber : ISummerItem<TNumber> where TSelf : BaseTimeSeries<TNumber, TNumber, TSelf>
5+
public abstract class BaseTimeSeriesSummer<TSummerItem, TSelf> : BaseTimeSeries<TSummerItem, TSummerItem, TSelf>
6+
where TSummerItem : ISummerItem<TSummerItem> where TSelf : BaseTimeSeries<TSummerItem, TSummerItem, TSelf>
77
{
88
private readonly Strategy _strategy;
99

@@ -12,11 +12,11 @@ protected BaseTimeSeriesSummer(TimeSpan sampleInterval, int maxSamplesCount, Str
1212
_strategy = strategy;
1313
}
1414

15-
protected override void AddData(DateTimeOffset date, TNumber data)
15+
protected override void AddData(DateTimeOffset date, TSummerItem data)
1616
{
1717
if (!Samples.ContainsKey(date))
1818
{
19-
Samples.Add(date, TNumber.Zero);
19+
Samples.Add(date, TSummerItem.Zero);
2020
}
2121

2222
Samples[date] = Update(Samples[date], data);
@@ -52,21 +52,21 @@ public override void Resample(TimeSpan sampleInterval, int samplesCount)
5252

5353
var samples = Samples;
5454

55-
Samples = new Dictionary<DateTimeOffset, TNumber>();
55+
Samples = new Dictionary<DateTimeOffset, TSummerItem>();
5656

5757
foreach (var (key, value) in samples)
5858
{
5959
AddNewData(key, value);
6060
}
6161
}
6262

63-
private TNumber Update(TNumber left, TNumber right)
63+
private TSummerItem Update(TSummerItem left, TSummerItem right)
6464
{
6565
return _strategy switch
6666
{
6767
Strategy.Sum => left + right,
68-
Strategy.Min => TNumber.Min(left, right),
69-
Strategy.Max => TNumber.Max(left, right),
68+
Strategy.Min => TSummerItem.Min(left, right),
69+
Strategy.Max => TSummerItem.Max(left, right),
7070
Strategy.Replace => right,
7171
_ => throw new ArgumentOutOfRangeException()
7272
};
@@ -75,17 +75,17 @@ private TNumber Update(TNumber left, TNumber right)
7575
[MethodImpl(MethodImplOptions.AggressiveInlining)]
7676
public virtual void Increment()
7777
{
78-
AddNewData(TNumber.One);
78+
AddNewData(TSummerItem.One);
7979
}
8080

8181
[MethodImpl(MethodImplOptions.AggressiveInlining)]
8282
public virtual void Decrement()
8383
{
84-
AddNewData(-TNumber.One);
84+
AddNewData(-TSummerItem.One);
8585
}
8686

8787
[MethodImpl(MethodImplOptions.AggressiveInlining)]
88-
public virtual TNumber? Min()
88+
public virtual TSummerItem? Min()
8989
{
9090
lock (Samples)
9191
{
@@ -94,7 +94,7 @@ public virtual void Decrement()
9494
}
9595

9696
[MethodImpl(MethodImplOptions.AggressiveInlining)]
97-
public virtual TNumber? Max()
97+
public virtual TSummerItem? Max()
9898
{
9999
lock (Samples)
100100
{
@@ -103,11 +103,11 @@ public virtual void Decrement()
103103
}
104104

105105
[MethodImpl(MethodImplOptions.AggressiveInlining)]
106-
public virtual TNumber Sum()
106+
public virtual TSummerItem Sum()
107107
{
108108
lock (Samples)
109109
{
110-
return Samples.Aggregate(TNumber.Zero, (current, sample) => current + sample.Value);
110+
return Samples.Aggregate(TSummerItem.Zero, (current, sample) => current + sample.Value);
111111
}
112112
}
113113
}
Lines changed: 67 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,67 @@
1-
// namespace ManagedCode.TimeSeries.Summers;
2-
//
3-
// public class DoubleGroupTimeSeriesSummer : BaseGroupTimeSeriesSummer<double, DoubleTimeSeriesSummer>
4-
// {
5-
// private readonly TimeSpan _sampleInterval;
6-
// private readonly int _samplesCount;
7-
// private readonly Strategy _strategy;
8-
//
9-
// public DoubleGroupTimeSeriesSummer(TimeSpan sampleInterval, int samplesCount, Strategy strategy, bool deleteOverdueSamples) : base(sampleInterval, deleteOverdueSamples)
10-
// {
11-
// _sampleInterval = sampleInterval;
12-
// _samplesCount = samplesCount;
13-
// _strategy = strategy;
14-
// }
15-
//
16-
// public override double Average()
17-
// {
18-
// lock (TimeSeries)
19-
// {
20-
// if (TimeSeries.Count == 0)
21-
// return 0;
22-
//
23-
// return TimeSeries.Select(s => s.Value.Average()).Average();
24-
// }
25-
// }
26-
//
27-
// public override double Min()
28-
// {
29-
// lock (TimeSeries)
30-
// {
31-
// if (TimeSeries.Count == 0)
32-
// return 0;
33-
//
34-
// return TimeSeries.Select(s => s.Value.Min()).Min();
35-
// }
36-
// }
37-
//
38-
// public override double Max()
39-
// {
40-
// lock (TimeSeries)
41-
// {
42-
// if (TimeSeries.Count == 0)
43-
// return 0;
44-
//
45-
// return TimeSeries.Select(s => s.Value.Max()).Max();
46-
// }
47-
// }
48-
//
49-
// public override double Sum()
50-
// {
51-
// lock (TimeSeries)
52-
// {
53-
// if (TimeSeries.Count == 0)
54-
// return 0;
55-
//
56-
// return TimeSeries.Select(s => s.Value.Sum()).Sum();
57-
// }
58-
// }
59-
//
60-
// protected override DoubleTimeSeriesSummer CreateSummer()
61-
// {
62-
// throw new NotImplementedException();
63-
// }
64-
// }
1+
using ManagedCode.TimeSeries.Abstractions;
2+
3+
namespace ManagedCode.TimeSeries.Summers;
4+
5+
public class DoubleGroupTimeSeriesSummer : BaseGroupNumberTimeSeriesSummer<double, DoubleTimeSeriesSummer, DoubleGroupTimeSeriesSummer>
6+
{
7+
private readonly TimeSpan _sampleInterval;
8+
private readonly int _samplesCount;
9+
private readonly Strategy _strategy;
10+
11+
public DoubleGroupTimeSeriesSummer(TimeSpan sampleInterval, int samplesCount, Strategy strategy, bool deleteOverdueSamples) : base(sampleInterval,
12+
deleteOverdueSamples)
13+
{
14+
_sampleInterval = sampleInterval;
15+
_samplesCount = samplesCount;
16+
_strategy = strategy;
17+
}
18+
19+
public override double Average()
20+
{
21+
lock (TimeSeries)
22+
{
23+
if (TimeSeries.Count == 0)
24+
return 0;
25+
26+
return TimeSeries.Select(s => s.Value.Average()).Average();
27+
}
28+
}
29+
30+
public override double Min()
31+
{
32+
lock (TimeSeries)
33+
{
34+
if (TimeSeries.Count == 0)
35+
return 0;
36+
37+
return TimeSeries.Select(s => s.Value.Min()).Min();
38+
}
39+
}
40+
41+
public override double Max()
42+
{
43+
lock (TimeSeries)
44+
{
45+
if (TimeSeries.Count == 0)
46+
return 0;
47+
48+
return TimeSeries.Select(s => s.Value.Max()).Max();
49+
}
50+
}
51+
52+
public override double Sum()
53+
{
54+
lock (TimeSeries)
55+
{
56+
if (TimeSeries.Count == 0)
57+
return 0;
58+
59+
return TimeSeries.Select(s => s.Value.Sum()).Sum();
60+
}
61+
}
62+
63+
protected override DoubleTimeSeriesSummer CreateSummer()
64+
{
65+
throw new NotImplementedException();
66+
}
67+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
using ManagedCode.TimeSeries.Abstractions;
2+
3+
namespace ManagedCode.TimeSeries.Summers;
4+
5+
public class FloatGroupNumberTimeSeriesSummer : BaseGroupNumberTimeSeriesSummer<float, FloatTimeSeriesSummer, FloatGroupNumberTimeSeriesSummer>
6+
{
7+
private readonly TimeSpan _sampleInterval;
8+
private readonly int _samplesCount;
9+
private readonly Strategy _strategy;
10+
11+
public FloatGroupNumberTimeSeriesSummer(TimeSpan sampleInterval, int samplesCount, Strategy strategy, bool deleteOverdueSamples) : base(sampleInterval,
12+
deleteOverdueSamples)
13+
{
14+
_sampleInterval = sampleInterval;
15+
_samplesCount = samplesCount;
16+
_strategy = strategy;
17+
}
18+
19+
public override float Average()
20+
{
21+
lock (TimeSeries)
22+
{
23+
if (TimeSeries.Count == 0)
24+
return 0;
25+
26+
return TimeSeries.Select(s => s.Value.Average()).Average();
27+
}
28+
}
29+
30+
public override float Min()
31+
{
32+
lock (TimeSeries)
33+
{
34+
if (TimeSeries.Count == 0)
35+
return 0;
36+
37+
return TimeSeries.Select(s => s.Value.Min()).Min();
38+
}
39+
}
40+
41+
public override float Max()
42+
{
43+
lock (TimeSeries)
44+
{
45+
if (TimeSeries.Count == 0)
46+
return 0;
47+
48+
return TimeSeries.Select(s => s.Value.Max()).Max();
49+
}
50+
}
51+
52+
public override float Sum()
53+
{
54+
lock (TimeSeries)
55+
{
56+
if (TimeSeries.Count == 0)
57+
return 0;
58+
59+
return TimeSeries.Select(s => s.Value.Sum()).Sum();
60+
}
61+
}
62+
63+
protected override FloatTimeSeriesSummer CreateSummer()
64+
{
65+
return new FloatTimeSeriesSummer(_sampleInterval, _samplesCount, _strategy);
66+
}
67+
}

ManagedCode.TimeSeries/Summers/FloatGroupTimeSeriesSummer.cs

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)