Add native QCustomPlot renderer and shared plot adapters

This commit is contained in:
2026-10-07 11:33:14 +03:00
parent 90046de7fd
commit 79b0cde20e
23 changed files with 44815 additions and 35 deletions

View File

@@ -30,6 +30,26 @@ class SpectrumTests(unittest.TestCase):
times = [i / fs for i in range(n)]
return times, [amplitude * sum(math.sin(2 * math.pi * f * t) for f in frequencies) for t in times]
def test_large_fft_above_previous_limit(self):
times, values = self.sample(n=65536, fs=65536, frequencies=(50,))
spectrum = self.core.analyze(times, values, max_size=65536)
self.assertEqual(spectrum.size, 65536)
self.assertAlmostEqual(self.core.dominant_peak(spectrum).frequency_hz, 50., delta=.01)
self.assertEqual(self.core.analyze(times[:1024], values[:1024], max_size=2097152).size, 1024)
def test_full_record_resolves_50_hz_at_high_sample_rate(self):
times, values = self.sample(n=50000, fs=500000, frequencies=(50,), amplitude=.02)
spectrum = self.core.analyze(times, values, max_size=4096, full_record=True)
peak = self.core.dominant_peak(spectrum)
self.assertAlmostEqual(spectrum.sample_rate / spectrum.size, 10., places=5)
self.assertAlmostEqual(peak.frequency_hz, 50., delta=.2)
self.assertAlmostEqual(peak.amplitude, .02, delta=.0002)
self.assertEqual(len(times), 50000)
broken = list(times)
broken[100] = broken[99]
with self.assertRaises(ValueError):
self.core.analyze(broken, values, full_record=True)
def test_fft_matches_independent_direct_dft(self):
times, _ = self.sample(32)
values = [math.sin(i * 1.37) + 0.1 * i for i in range(32)]
@@ -120,7 +140,7 @@ class SpectrumTests(unittest.TestCase):
for n in (0, 1, 15):
with self.assertRaisesRegex(ValueError, "16 samples"):
self.core.analyze(times[:n], values[:n])
for size in (0, 15, 1000, 32768):
for size in (0, 15, 1000, 4194304):
with self.assertRaises(ValueError):
self.core.analyze(times, values, max_size=size)
with self.assertRaises(ValueError):