chore: remove gitignored files from tracking, update channels

- Remove .vscode/, __pycache__/, publish binaries, and .dll/.pdb files from git tracking (now covered by .gitignore)
This commit is contained in:
Miha Kralj
2026-03-03 10:33:23 -08:00
parent 1910fdca93
commit 50711933e1
27 changed files with 132 additions and 290 deletions
-10
View File
@@ -1,10 +0,0 @@
{
"recommendations": [
"ms-dotnettools.csdevkit",
"ms-dotnettools.csharp",
"ms-dotnettools.dotnet-interactive-vscode",
"bierner.markdown-mermaid",
"visualstudioexptteam.vscodeintellicode",
"SonarSource.sonarlint-vscode"
]
}
-216
View File
@@ -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
}
-47
View File
@@ -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" }
}
]
}
+40 -4
View File
@@ -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
/// </summary>
[StructLayout(LayoutKind.Auto)]
#pragma warning disable S1104 // Fields should not have public accessibility
public ref struct BatchOutputs
public readonly ref struct BatchOutputs
{
/// <summary>Output middle band (SMA of source)</summary>
public Span<double> Middle;
public readonly Span<double> Middle;
/// <summary>Output upper band</summary>
public Span<double> Upper;
public readonly Span<double> Upper;
/// <summary>Output lower band</summary>
public Span<double> Lower;
public readonly Span<double> Lower;
#pragma warning restore S1104
/// <summary>
@@ -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);
}
/// <summary>
/// Internal state for scalar calculation.
/// </summary>
[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);
}
/// <summary>
@@ -455,6 +480,17 @@ public sealed class Aberr : ITValuePublisher, IDisposable
{
internal readonly Span<double> Source = source;
internal readonly Span<double> 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);
}
/// <summary>
+60 -8
View File
@@ -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
/// </remarks>
[StructLayout(LayoutKind.Auto)]
#pragma warning disable S1104 // Fields should not have public accessibility
public ref struct BatchOutputs
public readonly ref struct BatchOutputs
{
/// <summary>Output middle band (SMA of close)</summary>
public Span<double> Middle;
public readonly Span<double> Middle;
/// <summary>Output upper band</summary>
public Span<double> Upper;
public readonly Span<double> Upper;
/// <summary>Output lower band</summary>
public Span<double> Lower;
public readonly Span<double> Lower;
#pragma warning restore S1104
/// <summary>
@@ -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);
}
/// <summary>
@@ -501,14 +515,14 @@ public sealed class AccBands : ITValuePublisher, IDisposable
/// </summary>
[StructLayout(LayoutKind.Auto)]
#pragma warning disable S1104 // Fields should not have public accessibility
public ref struct BatchInputs
public readonly ref struct BatchInputs
{
/// <summary>High price values</summary>
public ReadOnlySpan<double> High;
public readonly ReadOnlySpan<double> High;
/// <summary>Low price values</summary>
public ReadOnlySpan<double> Low;
public readonly ReadOnlySpan<double> Low;
/// <summary>Close price values</summary>
public ReadOnlySpan<double> Close;
public readonly ReadOnlySpan<double> Close;
#pragma warning restore S1104
/// <summary>
@@ -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);
}
/// <summary>
/// Internal state for scalar calculation.
/// </summary>
[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);
}
/// <summary>
@@ -547,6 +586,19 @@ public sealed class AccBands : ITValuePublisher, IDisposable
internal readonly Span<double> AdjHigh = adjHigh;
internal readonly Span<double> AdjLow = adjLow;
internal readonly Span<double> 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);
}
/// <summary>
+31 -4
View File
@@ -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
/// </summary>
[StructLayout(LayoutKind.Auto)]
#pragma warning disable S1104 // Fields should not have public accessibility
public ref struct BatchOutputs
public readonly ref struct BatchOutputs
{
/// <summary>Output middle band (double-smoothed EMA of price)</summary>
public Span<double> Middle;
public readonly Span<double> Middle;
/// <summary>Output upper band</summary>
public Span<double> Upper;
public readonly Span<double> Upper;
/// <summary>Output lower band</summary>
public Span<double> Lower;
public readonly Span<double> Lower;
#pragma warning restore S1104
/// <summary>
@@ -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);
}
/// <summary>
/// Internal state for scalar calculation.
/// </summary>
[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);
}
/// <summary>
+1 -1
View File
@@ -3,7 +3,7 @@ using System.Linq;
using Xunit;
using QuanTAlib;
namespace QuanTAlib.Tests.Core;
namespace QuanTAlib.Tests;
/// <summary>
/// Tests verifying the structural stability of indicators across the repository.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.