python wrapper

This commit is contained in:
Miha Kralj
2026-02-28 14:14:35 -08:00
parent 82e0248eb0
commit 83e9511261
521 changed files with 62395 additions and 15669 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ public sealed class AlmaValidationTests : IDisposable
public AlmaValidationTests(ITestOutputHelper output)
{
_output = output;
_testData = new ValidationTestData(count: 1000, seed: 42);
_testData = new ValidationTestData(count: 10000, seed: 42);
}
public void Dispose()
+1 -1
View File
@@ -13,7 +13,7 @@ public sealed class BwmaValidationTests : IDisposable
public BwmaValidationTests()
{
_testData = new ValidationTestData(count: 1000, seed: 42);
_testData = new ValidationTestData(count: 10000, seed: 42);
}
public void Dispose()
+1 -1
View File
@@ -12,7 +12,7 @@ public sealed class ConvValidationTests : IDisposable
public ConvValidationTests()
{
_testData = new ValidationTestData(count: 1000, seed: 123);
_testData = new ValidationTestData(count: 10000, seed: 123);
}
public void Dispose()
+1 -1
View File
@@ -14,7 +14,7 @@ public sealed class DwmaValidationTests : IDisposable
public DwmaValidationTests(ITestOutputHelper output)
{
_output = output;
_testData = new ValidationTestData(count: 1000, seed: 42);
_testData = new ValidationTestData(count: 10000, seed: 42);
}
public void Dispose()
+1 -1
View File
@@ -13,7 +13,7 @@ public sealed class GwmaValidationTests : IDisposable
public GwmaValidationTests()
{
_testData = new ValidationTestData(count: 1000, seed: 42);
_testData = new ValidationTestData(count: 10000, seed: 42);
}
public void Dispose()
@@ -12,7 +12,7 @@ public sealed class HammaValidationTests : IDisposable
public HammaValidationTests()
{
_testData = new ValidationTestData(count: 1000, seed: 42);
_testData = new ValidationTestData(count: 10000, seed: 42);
}
public void Dispose()
+1 -1
View File
@@ -14,7 +14,7 @@ public sealed class HmaValidationTests : IDisposable
public HmaValidationTests(ITestOutputHelper output)
{
_output = output;
_testData = new ValidationTestData(count: 1000, seed: 42);
_testData = new ValidationTestData(count: 10000, seed: 42);
}
public void Dispose()
+1 -1
View File
@@ -5,7 +5,7 @@ namespace QuanTAlib.Tests;
public sealed class PmaValidationTests : IDisposable
{
private const int DefaultPeriod = 7;
private const double ValidationTolerance = 1e-9;
private const double ValidationTolerance = 1e-8;
private readonly ValidationTestData _testData;
private readonly ITestOutputHelper _output;
+13 -18
View File
@@ -188,13 +188,15 @@ public sealed class Sinema : AbstractBase
}
else
{
// Full buffer: use pre-calculated weights
int idx = 0;
foreach (double val in _buffer)
{
sum += val * _weights[idx];
idx++;
}
// Full buffer: use precalculated weights and SIMD
ReadOnlySpan<double> internalBuf = _buffer.InternalBuffer;
int head = _buffer.StartIndex;
int part1Len = _period - head;
double sum1 = internalBuf.Slice(head, part1Len).DotProduct(_weights.AsSpan(0, part1Len));
double sum2 = internalBuf[..head].DotProduct(_weights.AsSpan(part1Len));
sum = sum1 + sum2;
weightSum = _weightSum;
}
@@ -385,17 +387,10 @@ public sealed class Sinema : AbstractBase
}
// Calculate weighted sum using circular buffer
double sum = 0;
int bufIdx = bufferIndex;
for (int j = 0; j < period; j++)
{
sum += buffer[bufIdx] * weights[j];
bufIdx++;
if (bufIdx >= period)
{
bufIdx = 0;
}
}
int part1Len = period - bufferIndex;
double sum1 = buffer.Slice(bufferIndex, part1Len).DotProduct(weights.Slice(0, part1Len));
double sum2 = buffer.Slice(0, bufferIndex).DotProduct(weights.Slice(part1Len, bufferIndex));
double sum = sum1 + sum2;
output[i] = sum / fullWeightSum;
}
+3 -3
View File
@@ -238,9 +238,9 @@ public sealed class TsfValidationTests : IDisposable
tulipIndicator.Run(inputs, options, outputs);
double[] tResult = outputs[0];
// Tolerance relaxed to 1e-8: floating-point accumulation over ~5000 bars produces
// up to ~4e-9 drift between streaming (incremental) and batch (single-pass) paths.
ValidationHelper.VerifyData(qResults, tResult, lookback, tolerance: 1e-8);
// Tolerance relaxed to 2e-8: floating-point accumulation over long runs can produce
// low-1e-8 drift between streaming (incremental) and batch (single-pass) paths.
ValidationHelper.VerifyData(qResults, tResult, lookback, tolerance: 2e-8);
_output.WriteLine("TSF Streaming validated against Tulip tsf");
}