|
15 | 15 | # limitations under the License. |
16 | 16 |
|
17 | 17 | LOGICA_EXTENSION = { |
18 | | - "aggregations": ["PulseAdd", "TimelineUnionAgg", "TimelineIntersectAgg"], |
| 18 | + "aggregations": [ |
| 19 | + "PulseAdd", |
| 20 | + "TimelineUnionAgg = TimelineUnionFinalize * ++ * TimelineToPulse", |
| 21 | + "TimelineIntersectAgg"], |
19 | 22 | "functions": ["PulseMult", "PulseSum", "Threshold", |
20 | 23 | "TimelineUnion", "TimelineIntersect", "TimelineRender"] |
21 | 24 | } |
@@ -152,11 +155,36 @@ def TimelineIntersect(a: list[KeyValue], b: list[KeyValue]) -> list[KeyValue]: |
152 | 155 | thresholded: list[KeyValue] = Threshold(merged, 2.0) |
153 | 156 | return PulseToTimeline(thresholded) |
154 | 157 |
|
155 | | -def TimelineUnionAgg(a: list[KeyValue], b: list[KeyValue]) -> list[KeyValue]: |
156 | | - pa: list[KeyValue] = TimelineToPulse(a) |
157 | | - pb: list[KeyValue] = TimelineToPulse(b) |
158 | | - merged: list[KeyValue] = MergePulses(pa, pb) |
159 | | - thresholded: list[KeyValue] = Threshold(merged, 1.0) |
| 158 | +def PulseConcat(a: list[KeyValue], b: list[KeyValue]) -> list[KeyValue]: |
| 159 | + result: list[KeyValue] = [] |
| 160 | + i: int = 0 |
| 161 | + while i < len(a): |
| 162 | + result.append(a[i]) |
| 163 | + i = i + 1 |
| 164 | + i = 0 |
| 165 | + while i < len(b): |
| 166 | + result.append(b[i]) |
| 167 | + i = i + 1 |
| 168 | + return result |
| 169 | + |
| 170 | +def CollapsePulses(a: list[KeyValue]) -> list[KeyValue]: |
| 171 | + sa = sorted(a, key=lambda x: x.arg) |
| 172 | + result: list[KeyValue] = [] |
| 173 | + i: int = 0 |
| 174 | + while i < len(sa): |
| 175 | + if len(result) > 0 and result[len(result) - 1].arg == sa[i].arg: |
| 176 | + result[len(result) - 1].value = result[len(result) - 1].value + sa[i].value |
| 177 | + else: |
| 178 | + e = KeyValue() |
| 179 | + e.arg = sa[i].arg |
| 180 | + e.value = sa[i].value |
| 181 | + result.append(e) |
| 182 | + i = i + 1 |
| 183 | + return result |
| 184 | + |
| 185 | +def TimelineUnionFinalize(a: list[KeyValue]) -> list[KeyValue]: |
| 186 | + collapsed: list[KeyValue] = CollapsePulses(a) |
| 187 | + thresholded: list[KeyValue] = Threshold(collapsed, 1.0) |
160 | 188 | return PulseToTimeline(thresholded) |
161 | 189 |
|
162 | 190 | def TimelineIntersectAgg(a: list[KeyValue], b: list[KeyValue]) -> list[KeyValue]: |
|
0 commit comments