Skip to content

Commit 4f56d89

Browse files
committed
Convert float/decimal/double versions of ColumnArithmetic to GenericMath
1 parent 53ef787 commit 4f56d89

File tree

3 files changed

+214
-1458
lines changed

3 files changed

+214
-1458
lines changed

src/Microsoft.Data.Analysis/NumericDataFrameColumnArithmetic.cs src/Microsoft.Data.Analysis/FloatingPointDataFrameColumnArithmetic.cs

+25-138
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010

1111
namespace Microsoft.Data.Analysis
1212
{
13-
internal class NumericDataFrameColumnArithmetic<T> : IPrimitiveDataFrameColumnArithmetic<T>
14-
where T : unmanaged, INumber<T>, IShiftOperators<T, T>, IBitwiseOperators<T, T, T>
13+
internal class FloatingPointDataFrameColumnArithmetic<T> : IPrimitiveDataFrameColumnArithmetic<T>
14+
where T : unmanaged, INumber<T>
1515
{
16-
public NumericDataFrameColumnArithmetic() : base()
16+
public FloatingPointDataFrameColumnArithmetic() : base()
1717
{
1818
}
1919
public void Add(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
@@ -231,162 +231,49 @@ public void Modulo(T scalar, PrimitiveColumnContainer<T> column)
231231
}
232232
}
233233
}
234-
public void And(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
234+
public virtual void And(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
235235
{
236-
for (int b = 0; b < left.Buffers.Count; b++)
237-
{
238-
var buffer = left.Buffers[b];
239-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
240-
left.Buffers[b] = mutableBuffer;
241-
var span = mutableBuffer.Span;
242-
var otherSpan = right.Buffers[b].ReadOnlySpan;
243-
for (int i = 0; i < span.Length; i++)
244-
{
245-
span[i] = (T)(span[i] & otherSpan[i]);
246-
}
247-
}
236+
throw new NotSupportedException();
248237
}
249-
public void And(PrimitiveColumnContainer<T> column, T scalar)
238+
public virtual void And(PrimitiveColumnContainer<T> column, T scalar)
250239
{
251-
for (int b = 0; b < column.Buffers.Count; b++)
252-
{
253-
var buffer = column.Buffers[b];
254-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
255-
column.Buffers[b] = mutableBuffer;
256-
var span = mutableBuffer.Span;
257-
for (int i = 0; i < span.Length; i++)
258-
{
259-
span[i] = (T)(span[i] & scalar);
260-
}
261-
}
240+
throw new NotSupportedException();
262241
}
263-
public void And(T scalar, PrimitiveColumnContainer<T> column)
242+
public virtual void And(T scalar, PrimitiveColumnContainer<T> column)
264243
{
265-
for (int b = 0; b < column.Buffers.Count; b++)
266-
{
267-
var buffer = column.Buffers[b];
268-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
269-
column.Buffers[b] = mutableBuffer;
270-
var span = mutableBuffer.Span;
271-
for (int i = 0; i < span.Length; i++)
272-
{
273-
span[i] = (T)(scalar & span[i]);
274-
}
275-
}
244+
throw new NotSupportedException();
276245
}
277-
public void Or(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
246+
public virtual void Or(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
278247
{
279-
for (int b = 0; b < left.Buffers.Count; b++)
280-
{
281-
var buffer = left.Buffers[b];
282-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
283-
left.Buffers[b] = mutableBuffer;
284-
var span = mutableBuffer.Span;
285-
var otherSpan = right.Buffers[b].ReadOnlySpan;
286-
for (int i = 0; i < span.Length; i++)
287-
{
288-
span[i] = (T)(span[i] | otherSpan[i]);
289-
}
290-
}
248+
throw new NotSupportedException();
291249
}
292-
public void Or(PrimitiveColumnContainer<T> column, T scalar)
250+
public virtual void Or(PrimitiveColumnContainer<T> column, T scalar)
293251
{
294-
for (int b = 0; b < column.Buffers.Count; b++)
295-
{
296-
var buffer = column.Buffers[b];
297-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
298-
column.Buffers[b] = mutableBuffer;
299-
var span = mutableBuffer.Span;
300-
for (int i = 0; i < span.Length; i++)
301-
{
302-
span[i] = (T)(span[i] | scalar);
303-
}
304-
}
252+
throw new NotSupportedException();
305253
}
306-
public void Or(T scalar, PrimitiveColumnContainer<T> column)
254+
public virtual void Or(T scalar, PrimitiveColumnContainer<T> column)
307255
{
308-
for (int b = 0; b < column.Buffers.Count; b++)
309-
{
310-
var buffer = column.Buffers[b];
311-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
312-
column.Buffers[b] = mutableBuffer;
313-
var span = mutableBuffer.Span;
314-
for (int i = 0; i < span.Length; i++)
315-
{
316-
span[i] = (T)(scalar | span[i]);
317-
}
318-
}
256+
throw new NotSupportedException();
319257
}
320-
public void Xor(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
258+
public virtual void Xor(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
321259
{
322-
for (int b = 0; b < left.Buffers.Count; b++)
323-
{
324-
var buffer = left.Buffers[b];
325-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
326-
left.Buffers[b] = mutableBuffer;
327-
var span = mutableBuffer.Span;
328-
var otherSpan = right.Buffers[b].ReadOnlySpan;
329-
for (int i = 0; i < span.Length; i++)
330-
{
331-
span[i] = (T)(span[i] ^ otherSpan[i]);
332-
}
333-
}
260+
throw new NotSupportedException();
334261
}
335-
public void Xor(PrimitiveColumnContainer<T> column, T scalar)
262+
public virtual void Xor(PrimitiveColumnContainer<T> column, T scalar)
336263
{
337-
for (int b = 0; b < column.Buffers.Count; b++)
338-
{
339-
var buffer = column.Buffers[b];
340-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
341-
column.Buffers[b] = mutableBuffer;
342-
var span = mutableBuffer.Span;
343-
for (int i = 0; i < span.Length; i++)
344-
{
345-
span[i] = (T)(span[i] ^ scalar);
346-
}
347-
}
264+
throw new NotSupportedException();
348265
}
349-
public void Xor(T scalar, PrimitiveColumnContainer<T> column)
266+
public virtual void Xor(T scalar, PrimitiveColumnContainer<T> column)
350267
{
351-
for (int b = 0; b < column.Buffers.Count; b++)
352-
{
353-
var buffer = column.Buffers[b];
354-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
355-
column.Buffers[b] = mutableBuffer;
356-
var span = mutableBuffer.Span;
357-
for (int i = 0; i < span.Length; i++)
358-
{
359-
span[i] = (T)(scalar ^ span[i]);
360-
}
361-
}
268+
throw new NotSupportedException();
362269
}
363-
public void LeftShift(PrimitiveColumnContainer<T> column, int value)
270+
public virtual void LeftShift(PrimitiveColumnContainer<T> column, int value)
364271
{
365-
for (int b = 0; b < column.Buffers.Count; b++)
366-
{
367-
var buffer = column.Buffers[b];
368-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
369-
column.Buffers[b] = mutableBuffer;
370-
var span = mutableBuffer.Span;
371-
for (int i = 0; i < span.Length; i++)
372-
{
373-
span[i] = (T)(span[i] << value);
374-
}
375-
}
272+
throw new NotSupportedException();
376273
}
377-
public void RightShift(PrimitiveColumnContainer<T> column, int value)
274+
public virtual void RightShift(PrimitiveColumnContainer<T> column, int value)
378275
{
379-
for (int b = 0; b < column.Buffers.Count; b++)
380-
{
381-
var buffer = column.Buffers[b];
382-
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
383-
column.Buffers[b] = mutableBuffer;
384-
var span = mutableBuffer.Span;
385-
for (int i = 0; i < span.Length; i++)
386-
{
387-
span[i] = (T)(span[i] >> value);
388-
}
389-
}
276+
throw new NotSupportedException();
390277
}
391278
public void ElementwiseEquals(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right, PrimitiveColumnContainer<bool> ret)
392279
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using System;
6+
using System.Collections.Generic;
7+
using System.Linq;
8+
using System.Text;
9+
using System.Threading.Tasks;
10+
11+
namespace Microsoft.Data.Analysis
12+
{
13+
internal class NumberDataFrameColumnArithmetic<T> : FloatingPointDataFrameColumnArithmetic<T>, IPrimitiveDataFrameColumnArithmetic<T>
14+
where T : unmanaged, INumber<T>, IShiftOperators<T, T>, IBitwiseOperators<T, T, T>
15+
{
16+
public NumberDataFrameColumnArithmetic() : base()
17+
{
18+
}
19+
public override void And(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
20+
{
21+
for (int b = 0; b < left.Buffers.Count; b++)
22+
{
23+
var buffer = left.Buffers[b];
24+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
25+
left.Buffers[b] = mutableBuffer;
26+
var span = mutableBuffer.Span;
27+
var otherSpan = right.Buffers[b].ReadOnlySpan;
28+
for (int i = 0; i < span.Length; i++)
29+
{
30+
span[i] = (T)(span[i] & otherSpan[i]);
31+
}
32+
}
33+
}
34+
public override void And(PrimitiveColumnContainer<T> column, T scalar)
35+
{
36+
for (int b = 0; b < column.Buffers.Count; b++)
37+
{
38+
var buffer = column.Buffers[b];
39+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
40+
column.Buffers[b] = mutableBuffer;
41+
var span = mutableBuffer.Span;
42+
for (int i = 0; i < span.Length; i++)
43+
{
44+
span[i] = (T)(span[i] & scalar);
45+
}
46+
}
47+
}
48+
public override void And(T scalar, PrimitiveColumnContainer<T> column)
49+
{
50+
for (int b = 0; b < column.Buffers.Count; b++)
51+
{
52+
var buffer = column.Buffers[b];
53+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
54+
column.Buffers[b] = mutableBuffer;
55+
var span = mutableBuffer.Span;
56+
for (int i = 0; i < span.Length; i++)
57+
{
58+
span[i] = (T)(scalar & span[i]);
59+
}
60+
}
61+
}
62+
public override void Or(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
63+
{
64+
for (int b = 0; b < left.Buffers.Count; b++)
65+
{
66+
var buffer = left.Buffers[b];
67+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
68+
left.Buffers[b] = mutableBuffer;
69+
var span = mutableBuffer.Span;
70+
var otherSpan = right.Buffers[b].ReadOnlySpan;
71+
for (int i = 0; i < span.Length; i++)
72+
{
73+
span[i] = (T)(span[i] | otherSpan[i]);
74+
}
75+
}
76+
}
77+
public override void Or(PrimitiveColumnContainer<T> column, T scalar)
78+
{
79+
for (int b = 0; b < column.Buffers.Count; b++)
80+
{
81+
var buffer = column.Buffers[b];
82+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
83+
column.Buffers[b] = mutableBuffer;
84+
var span = mutableBuffer.Span;
85+
for (int i = 0; i < span.Length; i++)
86+
{
87+
span[i] = (T)(span[i] | scalar);
88+
}
89+
}
90+
}
91+
public override void Or(T scalar, PrimitiveColumnContainer<T> column)
92+
{
93+
for (int b = 0; b < column.Buffers.Count; b++)
94+
{
95+
var buffer = column.Buffers[b];
96+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
97+
column.Buffers[b] = mutableBuffer;
98+
var span = mutableBuffer.Span;
99+
for (int i = 0; i < span.Length; i++)
100+
{
101+
span[i] = (T)(scalar | span[i]);
102+
}
103+
}
104+
}
105+
public override void Xor(PrimitiveColumnContainer<T> left, PrimitiveColumnContainer<T> right)
106+
{
107+
for (int b = 0; b < left.Buffers.Count; b++)
108+
{
109+
var buffer = left.Buffers[b];
110+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
111+
left.Buffers[b] = mutableBuffer;
112+
var span = mutableBuffer.Span;
113+
var otherSpan = right.Buffers[b].ReadOnlySpan;
114+
for (int i = 0; i < span.Length; i++)
115+
{
116+
span[i] = (T)(span[i] ^ otherSpan[i]);
117+
}
118+
}
119+
}
120+
public override void Xor(PrimitiveColumnContainer<T> column, T scalar)
121+
{
122+
for (int b = 0; b < column.Buffers.Count; b++)
123+
{
124+
var buffer = column.Buffers[b];
125+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
126+
column.Buffers[b] = mutableBuffer;
127+
var span = mutableBuffer.Span;
128+
for (int i = 0; i < span.Length; i++)
129+
{
130+
span[i] = (T)(span[i] ^ scalar);
131+
}
132+
}
133+
}
134+
public override void Xor(T scalar, PrimitiveColumnContainer<T> column)
135+
{
136+
for (int b = 0; b < column.Buffers.Count; b++)
137+
{
138+
var buffer = column.Buffers[b];
139+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
140+
column.Buffers[b] = mutableBuffer;
141+
var span = mutableBuffer.Span;
142+
for (int i = 0; i < span.Length; i++)
143+
{
144+
span[i] = (T)(scalar ^ span[i]);
145+
}
146+
}
147+
}
148+
public override void LeftShift(PrimitiveColumnContainer<T> column, int value)
149+
{
150+
for (int b = 0; b < column.Buffers.Count; b++)
151+
{
152+
var buffer = column.Buffers[b];
153+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
154+
column.Buffers[b] = mutableBuffer;
155+
var span = mutableBuffer.Span;
156+
for (int i = 0; i < span.Length; i++)
157+
{
158+
span[i] = (T)(span[i] << value);
159+
}
160+
}
161+
}
162+
public override void RightShift(PrimitiveColumnContainer<T> column, int value)
163+
{
164+
for (int b = 0; b < column.Buffers.Count; b++)
165+
{
166+
var buffer = column.Buffers[b];
167+
var mutableBuffer = DataFrameBuffer<T>.GetMutableBuffer(buffer);
168+
column.Buffers[b] = mutableBuffer;
169+
var span = mutableBuffer.Span;
170+
for (int i = 0; i < span.Length; i++)
171+
{
172+
span[i] = (T)(span[i] >> value);
173+
}
174+
}
175+
}
176+
}
177+
}

0 commit comments

Comments
 (0)