diff --git a/.vscode/extensions.json b/.vscode/extensions.json
deleted file mode 100644
index a36cee3c..00000000
--- a/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "recommendations": [
- "ms-dotnettools.csdevkit",
- "ms-dotnettools.csharp",
- "ms-dotnettools.dotnet-interactive-vscode",
- "bierner.markdown-mermaid",
- "visualstudioexptteam.vscodeintellicode",
- "SonarSource.sonarlint-vscode"
- ]
-}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index e9a00346..00000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,216 +0,0 @@
-{
- // ═══════════════════════════════════════════════════════════════════════
- // GitHub Copilot Settings for QuanTAlib Workspace
- // Optimized for high-performance financial library development
- // ═══════════════════════════════════════════════════════════════════════
-
- // ───────────────────────────────────────────────────────────────────────
- // Copilot Core Settings
- // ───────────────────────────────────────────────────────────────────────
-
- // Enable Copilot completions (suggestions appear automatically)
- "github.copilot.editor.enableAutoCompletions": true,
-
- // Enable Copilot for all file types
- "github.copilot.enable": {
- "*": true,
- "plaintext": false,
- "markdown": true,
- "scminput": false
- },
-
- // Show inline suggestions
- "editor.inlineSuggest.enabled": true,
-
- // Always show the inline suggestion toolbar
- "editor.inlineSuggest.showToolbar": "always",
-
- // ───────────────────────────────────────────────────────────────────────
- // Copilot Chat Settings (Manual Review Required)
- // ───────────────────────────────────────────────────────────────────────
-
- // DO NOT auto-apply chat edits - require manual review for quality control
- "chat.editing.autoApply": "off",
-
- // Confirm before removing edit requests
- "chat.editing.confirmEditRequestRemoval": true,
-
- // Show chat panel on the side
- "chat.editor.wordWrap": "on",
-
- // ───────────────────────────────────────────────────────────────────────
- // Editor Settings for Productivity
- // ───────────────────────────────────────────────────────────────────────
-
- // Enable quick suggestions in all contexts
- "editor.quickSuggestions": {
- "other": true,
- "comments": true,
- "strings": true
- },
-
- // Show suggestions on trigger characters
- "editor.suggestOnTriggerCharacters": true,
-
- // Accept suggestion on commit character (like dot, parenthesis)
- "editor.acceptSuggestionOnCommitCharacter": true,
-
- // Faster suggestion appearance
- "editor.quickSuggestionsDelay": 0,
-
- // Show snippet suggestions with other suggestions
- "editor.snippetSuggestions": "inline",
-
- // Tab key behavior
- "editor.tabCompletion": "on",
-
- // ───────────────────────────────────────────────────────────────────────
- // C# Specific Settings
- // ───────────────────────────────────────────────────────────────────────
-
- "[csharp]": {
- "editor.formatOnSave": true,
- "editor.formatOnPaste": true,
- "editor.codeActionsOnSave": {
- "source.organizeImports": "explicit"
- },
- "editor.quickSuggestions": {
- "other": true,
- "comments": true,
- "strings": true
- }
- },
-
- // ───────────────────────────────────────────────────────────────────────
- // Performance & Quality Control
- // ───────────────────────────────────────────────────────────────────────
-
- // Save automatically (helps with Copilot context)
- "files.autoSave": "afterDelay",
- "files.autoSaveDelay": 1000,
-
- // Force LF line endings (matches .gitattributes and .editorconfig)
- "files.eol": "\n",
- // Show whitespace (important for performance-critical code)
- "editor.renderWhitespace": "boundary",
-
- // Show inline parameter hints
- "editor.inlayHints.enabled": "on",
-
- // Highlight matching brackets
- "editor.bracketPairColorization.enabled": true,
- "editor.guides.bracketPairs": true,
-
- // ───────────────────────────────────────────────────────────────────────
- // Git Integration
- // ───────────────────────────────────────────────────────────────────────
-
- // Auto-fetch git changes
- "git.autofetch": true,
-
- // Confirm before synchronizing
- "git.confirmSync": false,
-
- // Show inline blame
- "git.decorations.enabled": true,
-
- "terminal.integrated.shellIntegration.enabled": true,
- "terminal.integrated.suggest.enabled": true,
-
-
- // ───────────────────────────────────────────────────────────────────────
- // File Exclusions (Reduce Noise)
- // ───────────────────────────────────────────────────────────────────────
-
- "files.exclude": {
- "**/bin": true,
- "**/obj": true,
- "**/.vs": true,
- "**/node_modules": true,
- "**/.git": false
- },
-
- "search.exclude": {
- "**/bin": true,
- "**/obj": true,
- "**/node_modules": true,
- "**/.vs": true,
- "**/coverage": true
- },
-
- // ───────────────────────────────────────────────────────────────────────
- // .NET Specific Settings
- // ───────────────────────────────────────────────────────────────────────
-
- "omnisharp.enableEditorConfigSupport": true,
- "omnisharp.enableRoslynAnalyzers": true,
- "dotnet.backgroundAnalysis.enabled": true,
-
- // ───────────────────────────────────────────────────────────────────────
- // Testing Integration
- // ───────────────────────────────────────────────────────────────────────
-
- "dotnet.defaultSolution": "QuanTAlib.sln",
- "dotnet.testController.enabled": true,
- "dotnet.unitTestDebuggingEnabled": true,
- "dotnet.unitTests.runSettingsPath": ".config/coverage.runsettings",
- "dotnet.completion.showCompletionItemsFromUnimportedNamespaces": true,
- "dotnet.server.useOmnisharp": false,
-
- // Python test discovery (pytest)
- "python.testing.pytestEnabled": true,
- "python.testing.unittestEnabled": false,
- "python.testing.pytestArgs": [
- "python"
- ],
- "sonarlint.connectedMode.project": {
- "connectionId": "mihakralj-quantalib",
- "projectKey": "mihakralj_QuanTAlib"
- },
- "coderabbit.agentType": "Roo",
- "qodana.pathPrefix": "",
- "qodana.args": ["--config", ".qodana/qodana.yaml"],
-
- // ───────────────────────────────────────────────────────────────────────
- // Terminal Settings
- // ───────────────────────────────────────────────────────────────────────
-
- // Set PowerShell 7 as the default terminal on Windows
- "terminal.integrated.defaultProfile.windows": "PowerShell",
-
- // Terminal profiles for Windows
- "terminal.integrated.profiles.windows": {
- "PowerShell": {
- "source": "PowerShell",
- "icon": "terminal-powershell"
- },
- "Git Bash": {
- "path": "C:\\Program Files\\Git\\bin\\bash.exe",
- "icon": "terminal-bash"
- }
- },
- "qodana.projectId": "KbxmN",
- "github.copilot.mcpServers": {
- "code-to-tree": {
- "command": "C:\\github\\code-to-tree.exe"
- }
- },
- "coderabbit.autoReviewMode": "disabled"
-
- // ═══════════════════════════════════════════════════════════════════════
- // Keyboard Shortcuts Reference
- // ═══════════════════════════════════════════════════════════════════════
- // Tab - Accept inline suggestion
- // Ctrl+Right - Accept next word
- // Ctrl+Enter - Accept line
- // Esc - Dismiss suggestion
- // Alt+] - Next suggestion
- // Alt+[ - Previous suggestion
- // Ctrl+I - Open Copilot Chat
- //
- // Quality Control Reminders:
- // - Review all Copilot suggestions for optimization patterns
- // - Run tests after accepting: dotnet test
- // - Check performance impact with benchmarks
- // - Validate against reference implementations
-}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
deleted file mode 100644
index 42ecf80c..00000000
--- a/.vscode/tasks.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "version": "2.0.0",
- "tasks": [
- {
- "label": "Build",
- "detail": "dotnet build QuanTAlib.sln",
- "type": "process",
- "command": "dotnet",
- "args": [
- "build",
- "${workspaceFolder}/QuanTAlib.sln",
- "/property:GenerateFullPaths=true",
- "/consoleloggerparameters:NoSummary"
- ],
- "problemMatcher": "$msCompile",
- "group": { "kind": "build", "isDefault": true }
- },
- {
- "label": "Build Library",
- "detail": "dotnet build lib/quantalib.csproj (Debug, net10.0)",
- "type": "process",
- "command": "dotnet",
- "args": [
- "build",
- "${workspaceFolder}/lib/quantalib.csproj",
- "--configuration", "Debug",
- "--framework", "net10.0"
- ],
- "problemMatcher": "$msCompile",
- "group": "build"
- },
- {
- "label": "Test",
- "detail": "dotnet test lib/QuanTAlib.Tests.csproj (net10.0)",
- "type": "process",
- "command": "dotnet",
- "args": [
- "test",
- "${workspaceFolder}/lib/QuanTAlib.Tests.csproj",
- "--framework", "net10.0"
- ],
- "problemMatcher": "$msCompile",
- "group": { "kind": "test", "isDefault": true },
- "presentation": { "reveal": "always", "panel": "new" }
- }
- ]
-}
diff --git a/lib/channels/aberr/Aberr.cs b/lib/channels/aberr/Aberr.cs
index edf80c70..cfcd7af3 100644
--- a/lib/channels/aberr/Aberr.cs
+++ b/lib/channels/aberr/Aberr.cs
@@ -1,4 +1,5 @@
using System.Buffers;
+using System.Diagnostics.CodeAnalysis;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -413,14 +414,14 @@ public sealed class Aberr : ITValuePublisher, IDisposable
///
[StructLayout(LayoutKind.Auto)]
#pragma warning disable S1104 // Fields should not have public accessibility
- public ref struct BatchOutputs
+ public readonly ref struct BatchOutputs
{
/// Output middle band (SMA of source)
- public Span Middle;
+ public readonly Span Middle;
/// Output upper band
- public Span Upper;
+ public readonly Span Upper;
/// Output lower band
- public Span Lower;
+ public readonly Span Lower;
#pragma warning restore S1104
///
@@ -432,12 +433,26 @@ public sealed class Aberr : ITValuePublisher, IDisposable
Upper = upper;
Lower = lower;
}
+
+ public bool Equals(BatchOutputs other) =>
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Middle), ref MemoryMarshal.GetReference(other.Middle)) &&
+ Middle.Length == other.Middle.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Upper), ref MemoryMarshal.GetReference(other.Upper)) &&
+ Upper.Length == other.Upper.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Lower), ref MemoryMarshal.GetReference(other.Lower)) &&
+ Lower.Length == other.Lower.Length;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(Middle.Length, Upper.Length, Lower.Length);
+ public static bool operator ==(BatchOutputs left, BatchOutputs right) => left.Equals(right);
+ public static bool operator !=(BatchOutputs left, BatchOutputs right) => !left.Equals(right);
}
///
/// Internal state for scalar calculation.
///
[StructLayout(LayoutKind.Auto)]
+ [SuppressMessage("NDepend", "ND1903:StructuresShouldBeImmutable", Justification = "Mutable calculation state accumulator by design")]
private ref struct ScalarState
{
internal double SumSource;
@@ -445,6 +460,16 @@ public sealed class Aberr : ITValuePublisher, IDisposable
internal double LastValidValue;
internal int BufferIndex;
internal int TickCount;
+
+ public bool Equals(ScalarState other) =>
+ SumSource.Equals(other.SumSource) && SumDeviation.Equals(other.SumDeviation) &&
+ LastValidValue.Equals(other.LastValidValue) && BufferIndex == other.BufferIndex &&
+ TickCount == other.TickCount;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(SumSource, SumDeviation, LastValidValue, BufferIndex, TickCount);
+ public static bool operator ==(ScalarState left, ScalarState right) => left.Equals(right);
+ public static bool operator !=(ScalarState left, ScalarState right) => !left.Equals(right);
}
///
@@ -455,6 +480,17 @@ public sealed class Aberr : ITValuePublisher, IDisposable
{
internal readonly Span Source = source;
internal readonly Span Deviation = deviation;
+
+ public bool Equals(WorkBuffers other) =>
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Source), ref MemoryMarshal.GetReference(other.Source)) &&
+ Source.Length == other.Source.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Deviation), ref MemoryMarshal.GetReference(other.Deviation)) &&
+ Deviation.Length == other.Deviation.Length;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(Source.Length, Deviation.Length);
+ public static bool operator ==(WorkBuffers left, WorkBuffers right) => left.Equals(right);
+ public static bool operator !=(WorkBuffers left, WorkBuffers right) => !left.Equals(right);
}
///
diff --git a/lib/channels/accbands/AccBands.cs b/lib/channels/accbands/AccBands.cs
index d9279d98..88438164 100644
--- a/lib/channels/accbands/AccBands.cs
+++ b/lib/channels/accbands/AccBands.cs
@@ -1,4 +1,5 @@
using System.Buffers;
+using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -475,14 +476,14 @@ public sealed class AccBands : ITValuePublisher, IDisposable
///
[StructLayout(LayoutKind.Auto)]
#pragma warning disable S1104 // Fields should not have public accessibility
- public ref struct BatchOutputs
+ public readonly ref struct BatchOutputs
{
/// Output middle band (SMA of close)
- public Span Middle;
+ public readonly Span Middle;
/// Output upper band
- public Span Upper;
+ public readonly Span Upper;
/// Output lower band
- public Span Lower;
+ public readonly Span Lower;
#pragma warning restore S1104
///
@@ -494,6 +495,19 @@ public sealed class AccBands : ITValuePublisher, IDisposable
Upper = upper;
Lower = lower;
}
+
+ public bool Equals(BatchOutputs other) =>
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Middle), ref MemoryMarshal.GetReference(other.Middle)) &&
+ Middle.Length == other.Middle.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Upper), ref MemoryMarshal.GetReference(other.Upper)) &&
+ Upper.Length == other.Upper.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Lower), ref MemoryMarshal.GetReference(other.Lower)) &&
+ Lower.Length == other.Lower.Length;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(Middle.Length, Upper.Length, Lower.Length);
+ public static bool operator ==(BatchOutputs left, BatchOutputs right) => left.Equals(right);
+ public static bool operator !=(BatchOutputs left, BatchOutputs right) => !left.Equals(right);
}
///
@@ -501,14 +515,14 @@ public sealed class AccBands : ITValuePublisher, IDisposable
///
[StructLayout(LayoutKind.Auto)]
#pragma warning disable S1104 // Fields should not have public accessibility
- public ref struct BatchInputs
+ public readonly ref struct BatchInputs
{
/// High price values
- public ReadOnlySpan High;
+ public readonly ReadOnlySpan High;
/// Low price values
- public ReadOnlySpan Low;
+ public readonly ReadOnlySpan Low;
/// Close price values
- public ReadOnlySpan Close;
+ public readonly ReadOnlySpan Close;
#pragma warning restore S1104
///
@@ -520,12 +534,26 @@ public sealed class AccBands : ITValuePublisher, IDisposable
Low = low;
Close = close;
}
+
+ public bool Equals(BatchInputs other) =>
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(High), ref MemoryMarshal.GetReference(other.High)) &&
+ High.Length == other.High.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Low), ref MemoryMarshal.GetReference(other.Low)) &&
+ Low.Length == other.Low.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Close), ref MemoryMarshal.GetReference(other.Close)) &&
+ Close.Length == other.Close.Length;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(High.Length, Low.Length, Close.Length);
+ public static bool operator ==(BatchInputs left, BatchInputs right) => left.Equals(right);
+ public static bool operator !=(BatchInputs left, BatchInputs right) => !left.Equals(right);
}
///
/// Internal state for scalar calculation.
///
[StructLayout(LayoutKind.Auto)]
+ [SuppressMessage("NDepend", "ND1903:StructuresShouldBeImmutable", Justification = "Mutable calculation state accumulator by design")]
private ref struct ScalarState
{
internal double SumAdjHigh;
@@ -536,6 +564,17 @@ public sealed class AccBands : ITValuePublisher, IDisposable
internal double LastValidClose;
internal int BufferIndex;
internal int TickCount;
+
+ public bool Equals(ScalarState other) =>
+ SumAdjHigh.Equals(other.SumAdjHigh) && SumAdjLow.Equals(other.SumAdjLow) &&
+ SumClose.Equals(other.SumClose) && LastValidHigh.Equals(other.LastValidHigh) &&
+ LastValidLow.Equals(other.LastValidLow) && LastValidClose.Equals(other.LastValidClose) &&
+ BufferIndex == other.BufferIndex && TickCount == other.TickCount;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(SumAdjHigh, SumAdjLow, SumClose, BufferIndex, TickCount);
+ public static bool operator ==(ScalarState left, ScalarState right) => left.Equals(right);
+ public static bool operator !=(ScalarState left, ScalarState right) => !left.Equals(right);
}
///
@@ -547,6 +586,19 @@ public sealed class AccBands : ITValuePublisher, IDisposable
internal readonly Span AdjHigh = adjHigh;
internal readonly Span AdjLow = adjLow;
internal readonly Span Close = close;
+
+ public bool Equals(WorkBuffers other) =>
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(AdjHigh), ref MemoryMarshal.GetReference(other.AdjHigh)) &&
+ AdjHigh.Length == other.AdjHigh.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(AdjLow), ref MemoryMarshal.GetReference(other.AdjLow)) &&
+ AdjLow.Length == other.AdjLow.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Close), ref MemoryMarshal.GetReference(other.Close)) &&
+ Close.Length == other.Close.Length;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(AdjHigh.Length, AdjLow.Length, Close.Length);
+ public static bool operator ==(WorkBuffers left, WorkBuffers right) => left.Equals(right);
+ public static bool operator !=(WorkBuffers left, WorkBuffers right) => !left.Equals(right);
}
///
diff --git a/lib/channels/apz/Apz.cs b/lib/channels/apz/Apz.cs
index 11d79623..6c779cfd 100644
--- a/lib/channels/apz/Apz.cs
+++ b/lib/channels/apz/Apz.cs
@@ -1,3 +1,4 @@
+using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -412,14 +413,14 @@ public sealed class Apz : ITValuePublisher
///
[StructLayout(LayoutKind.Auto)]
#pragma warning disable S1104 // Fields should not have public accessibility
- public ref struct BatchOutputs
+ public readonly ref struct BatchOutputs
{
/// Output middle band (double-smoothed EMA of price)
- public Span Middle;
+ public readonly Span Middle;
/// Output upper band
- public Span Upper;
+ public readonly Span Upper;
/// Output lower band
- public Span Lower;
+ public readonly Span Lower;
#pragma warning restore S1104
///
@@ -431,12 +432,26 @@ public sealed class Apz : ITValuePublisher
Upper = upper;
Lower = lower;
}
+
+ public bool Equals(BatchOutputs other) =>
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Middle), ref MemoryMarshal.GetReference(other.Middle)) &&
+ Middle.Length == other.Middle.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Upper), ref MemoryMarshal.GetReference(other.Upper)) &&
+ Upper.Length == other.Upper.Length &&
+ Unsafe.AreSame(ref MemoryMarshal.GetReference(Lower), ref MemoryMarshal.GetReference(other.Lower)) &&
+ Lower.Length == other.Lower.Length;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(Middle.Length, Upper.Length, Lower.Length);
+ public static bool operator ==(BatchOutputs left, BatchOutputs right) => left.Equals(right);
+ public static bool operator !=(BatchOutputs left, BatchOutputs right) => !left.Equals(right);
}
///
/// Internal state for scalar calculation.
///
[StructLayout(LayoutKind.Auto)]
+ [SuppressMessage("NDepend", "ND1903:StructuresShouldBeImmutable", Justification = "Mutable calculation state accumulator by design")]
private ref struct ScalarState
{
internal double Ema1Price;
@@ -448,6 +463,18 @@ public sealed class Apz : ITValuePublisher
internal double LastValidHigh;
internal double LastValidLow;
internal bool IsHot;
+
+ public bool Equals(ScalarState other) =>
+ Ema1Price.Equals(other.Ema1Price) && Ema2Price.Equals(other.Ema2Price) &&
+ Ema1Range.Equals(other.Ema1Range) && Ema2Range.Equals(other.Ema2Range) &&
+ E.Equals(other.E) && LastValidPrice.Equals(other.LastValidPrice) &&
+ LastValidHigh.Equals(other.LastValidHigh) && LastValidLow.Equals(other.LastValidLow) &&
+ IsHot == other.IsHot;
+
+ public override bool Equals(object? obj) => false;
+ public override int GetHashCode() => HashCode.Combine(Ema1Price, Ema2Price, Ema1Range, Ema2Range, E, IsHot);
+ public static bool operator ==(ScalarState left, ScalarState right) => left.Equals(right);
+ public static bool operator !=(ScalarState left, ScalarState right) => !left.Equals(right);
}
///
diff --git a/lib/core/tests/IndicatorProperties.Tests.cs b/lib/core/tests/IndicatorProperties.Tests.cs
index 9a065cf3..47bf81fe 100644
--- a/lib/core/tests/IndicatorProperties.Tests.cs
+++ b/lib/core/tests/IndicatorProperties.Tests.cs
@@ -3,7 +3,7 @@ using System.Linq;
using Xunit;
using QuanTAlib;
-namespace QuanTAlib.Tests.Core;
+namespace QuanTAlib.Tests;
///
/// Tests verifying the structural stability of indicators across the repository.
diff --git a/python/publish/win-x64/QuanTAlib.pdb b/python/publish/win-x64/QuanTAlib.pdb
deleted file mode 100644
index 4bcb20da..00000000
Binary files a/python/publish/win-x64/QuanTAlib.pdb and /dev/null differ
diff --git a/python/publish/win-x64/quantalib_native.dll b/python/publish/win-x64/quantalib_native.dll
deleted file mode 100644
index 4be2d4fe..00000000
Binary files a/python/publish/win-x64/quantalib_native.dll and /dev/null differ
diff --git a/python/publish/win-x64/quantalib_native.pdb b/python/publish/win-x64/quantalib_native.pdb
deleted file mode 100644
index 6b8d2397..00000000
Binary files a/python/publish/win-x64/quantalib_native.pdb and /dev/null differ
diff --git a/python/quantalib/__pycache__/__init__.cpython-313.pyc b/python/quantalib/__pycache__/__init__.cpython-313.pyc
deleted file mode 100644
index 031d34d1..00000000
Binary files a/python/quantalib/__pycache__/__init__.cpython-313.pyc and /dev/null differ
diff --git a/python/quantalib/__pycache__/_bridge.cpython-313.pyc b/python/quantalib/__pycache__/_bridge.cpython-313.pyc
deleted file mode 100644
index 71ec3d86..00000000
Binary files a/python/quantalib/__pycache__/_bridge.cpython-313.pyc and /dev/null differ
diff --git a/python/quantalib/__pycache__/_compat.cpython-313.pyc b/python/quantalib/__pycache__/_compat.cpython-313.pyc
deleted file mode 100644
index a2f713ab..00000000
Binary files a/python/quantalib/__pycache__/_compat.cpython-313.pyc and /dev/null differ
diff --git a/python/quantalib/__pycache__/_loader.cpython-313.pyc b/python/quantalib/__pycache__/_loader.cpython-313.pyc
deleted file mode 100644
index f97864b2..00000000
Binary files a/python/quantalib/__pycache__/_loader.cpython-313.pyc and /dev/null differ
diff --git a/python/quantalib/__pycache__/indicators.cpython-313.pyc b/python/quantalib/__pycache__/indicators.cpython-313.pyc
deleted file mode 100644
index df969a96..00000000
Binary files a/python/quantalib/__pycache__/indicators.cpython-313.pyc and /dev/null differ
diff --git a/python/quantalib/native/win_amd64/QuanTAlib.pdb b/python/quantalib/native/win_amd64/QuanTAlib.pdb
deleted file mode 100644
index 9db8861e..00000000
Binary files a/python/quantalib/native/win_amd64/QuanTAlib.pdb and /dev/null differ
diff --git a/python/quantalib/native/win_amd64/quantalib_native.dll b/python/quantalib/native/win_amd64/quantalib_native.dll
deleted file mode 100644
index ebd67bf2..00000000
Binary files a/python/quantalib/native/win_amd64/quantalib_native.dll and /dev/null differ
diff --git a/python/quantalib/native/win_amd64/quantalib_native.pdb b/python/quantalib/native/win_amd64/quantalib_native.pdb
deleted file mode 100644
index 15ac7198..00000000
Binary files a/python/quantalib/native/win_amd64/quantalib_native.pdb and /dev/null differ
diff --git a/python/quantalib/quantalib.dll b/python/quantalib/quantalib.dll
deleted file mode 100644
index 8d0b8e75..00000000
Binary files a/python/quantalib/quantalib.dll and /dev/null differ
diff --git a/python/tests/__pycache__/test_compat.cpython-313-pytest-9.0.2.pyc b/python/tests/__pycache__/test_compat.cpython-313-pytest-9.0.2.pyc
deleted file mode 100644
index 4ae1ac1a..00000000
Binary files a/python/tests/__pycache__/test_compat.cpython-313-pytest-9.0.2.pyc and /dev/null differ
diff --git a/python/tests/__pycache__/test_golden.cpython-313-pytest-9.0.2.pyc b/python/tests/__pycache__/test_golden.cpython-313-pytest-9.0.2.pyc
deleted file mode 100644
index d50b031c..00000000
Binary files a/python/tests/__pycache__/test_golden.cpython-313-pytest-9.0.2.pyc and /dev/null differ
diff --git a/python/tests/__pycache__/test_pandas_ta_parity.cpython-313-pytest-9.0.2.pyc b/python/tests/__pycache__/test_pandas_ta_parity.cpython-313-pytest-9.0.2.pyc
deleted file mode 100644
index 52ee36c0..00000000
Binary files a/python/tests/__pycache__/test_pandas_ta_parity.cpython-313-pytest-9.0.2.pyc and /dev/null differ
diff --git a/python/tests/__pycache__/test_pandas_ta_parity_batch_01.cpython-313-pytest-9.0.2.pyc b/python/tests/__pycache__/test_pandas_ta_parity_batch_01.cpython-313-pytest-9.0.2.pyc
deleted file mode 100644
index 8b84f395..00000000
Binary files a/python/tests/__pycache__/test_pandas_ta_parity_batch_01.cpython-313-pytest-9.0.2.pyc and /dev/null differ
diff --git a/python/tests/__pycache__/test_shapes.cpython-313-pytest-9.0.2.pyc b/python/tests/__pycache__/test_shapes.cpython-313-pytest-9.0.2.pyc
deleted file mode 100644
index d6e25d0a..00000000
Binary files a/python/tests/__pycache__/test_shapes.cpython-313-pytest-9.0.2.pyc and /dev/null differ
diff --git a/python/tests/__pycache__/test_shapes.cpython-313.pyc b/python/tests/__pycache__/test_shapes.cpython-313.pyc
deleted file mode 100644
index 0b511797..00000000
Binary files a/python/tests/__pycache__/test_shapes.cpython-313.pyc and /dev/null differ
diff --git a/python/tests/__pycache__/test_smoke.cpython-313-pytest-9.0.2.pyc b/python/tests/__pycache__/test_smoke.cpython-313-pytest-9.0.2.pyc
deleted file mode 100644
index c67646fd..00000000
Binary files a/python/tests/__pycache__/test_smoke.cpython-313-pytest-9.0.2.pyc and /dev/null differ
diff --git a/python/tests/__pycache__/test_status_codes.cpython-313-pytest-9.0.2.pyc b/python/tests/__pycache__/test_status_codes.cpython-313-pytest-9.0.2.pyc
deleted file mode 100644
index 4ce1542a..00000000
Binary files a/python/tests/__pycache__/test_status_codes.cpython-313-pytest-9.0.2.pyc and /dev/null differ