Skip to content

Commit 21c1d1b

Browse files
authored
Merge pull request #352 from fslaborg/datascience
This PR introduces a separation of concerns between statistical algorithms and low-level numerical primitives.
2 parents 2854e4d + 1889d5c commit 21c1d1b

File tree

187 files changed

+9240
-28619
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

187 files changed

+9240
-28619
lines changed

.config/dotnet-tools.json

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@
22
"version": 1,
33
"isRoot": true,
44
"tools": {
5-
"fsdocs-tool": {
6-
"version": "16.1.1",
7-
"commands": [
8-
"fsdocs"
9-
]
10-
},
115
"fantomas": {
126
"version": "6.1.1",
137
"commands": [
148
"fantomas"
15-
]
9+
],
10+
"rollForward": false
11+
},
12+
"fsdocs-tool": {
13+
"version": "20.0.1",
14+
"commands": [
15+
"fsdocs"
16+
],
17+
"rollForward": false
1618
}
1719
}
1820
}

.github/workflows/build-and-test.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ jobs:
1313

1414
steps:
1515
- uses: actions/checkout@v2
16-
- name: Setup .NET 6
17-
uses: actions/setup-dotnet@v1
16+
- name: Setup .NET 8
17+
uses: actions/setup-dotnet@v4
1818
with:
19-
dotnet-version: '6.x.x'
19+
dotnet-version: '8.x.x'
2020
- name: Restore local tools
2121
run: dotnet tool restore
2222
- name: make script executable
@@ -30,11 +30,11 @@ jobs:
3030
runs-on: windows-latest
3131

3232
steps:
33-
- uses: actions/checkout@v2
34-
- name: Setup .NET 6
35-
uses: actions/setup-dotnet@v1
33+
- uses: actions/checkout@v4
34+
- name: Setup .NET 8
35+
uses: actions/setup-dotnet@v4
3636
with:
37-
dotnet-version: '6.x.x'
37+
dotnet-version: '8.x.x'
3838
- name: Restore local tools
3939
run: dotnet tool restore
4040
- name: Build and test

FSharp.Stats.sln

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{23F9FB2E-6
5555
docs\Integration.fsx = docs\Integration.fsx
5656
docs\Interpolation.fsx = docs\Interpolation.fsx
5757
docs\Intervals.fsx = docs\Intervals.fsx
58-
docs\LinearAlgebra.fsx = docs\LinearAlgebra.fsx
59-
docs\Matrix_Vector.fsx = docs\Matrix_Vector.fsx
58+
docs\Normalization.fsx = docs\Normalization.fsx
59+
docs\NuGet.config = docs\NuGet.config
6060
docs\Optimization.fsx = docs\Optimization.fsx
6161
docs\Quantiles.fsx = docs\Quantiles.fsx
62-
docs\NuGet.config = docs\NuGet.config
6362
docs\Rank.fsx = docs\Rank.fsx
6463
docs\Signal.fsx = docs\Signal.fsx
65-
docs\Normalization.fsx = docs\Normalization.fsx
66-
docs\ML.fsx = docs\ML.fsx
6764
docs\Testing.fsx = docs\Testing.fsx
6865
docs\_template.html = docs\_template.html
6966
docs\_template.ipynb = docs\_template.ipynb
@@ -76,6 +73,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "content", "content", "{50E3
7673
EndProject
7774
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Stats.Interactive", "src\FSharp.Stats.Interactive\FSharp.Stats.Interactive.fsproj", "{D7BCF5C0-9E2B-4170-9390-607B0B65A8CD}"
7875
EndProject
76+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
77+
EndProject
78+
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Stats.Benchmarks", "benchmarks\FSharp.Stats.Benchmarks\FSharp.Stats.Benchmarks.fsproj", "{E3942700-8589-770A-6224-F6D2DDF977E8}"
79+
EndProject
80+
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Stats.LegacyBenchmarks", "benchmarks\FSharp.Stats.LegacyBenchmarks\FSharp.Stats.LegacyBenchmarks.fsproj", "{D84267B7-0C5A-4679-A63C-D94315A458CB}"
81+
EndProject
7982
Global
8083
GlobalSection(SolutionConfigurationPlatforms) = preSolution
8184
Debug|Any CPU = Debug|Any CPU
@@ -98,6 +101,14 @@ Global
98101
{D7BCF5C0-9E2B-4170-9390-607B0B65A8CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
99102
{D7BCF5C0-9E2B-4170-9390-607B0B65A8CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
100103
{D7BCF5C0-9E2B-4170-9390-607B0B65A8CD}.Release|Any CPU.Build.0 = Release|Any CPU
104+
{E3942700-8589-770A-6224-F6D2DDF977E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
105+
{E3942700-8589-770A-6224-F6D2DDF977E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
106+
{E3942700-8589-770A-6224-F6D2DDF977E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
107+
{E3942700-8589-770A-6224-F6D2DDF977E8}.Release|Any CPU.Build.0 = Release|Any CPU
108+
{D84267B7-0C5A-4679-A63C-D94315A458CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
109+
{D84267B7-0C5A-4679-A63C-D94315A458CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
110+
{D84267B7-0C5A-4679-A63C-D94315A458CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
111+
{D84267B7-0C5A-4679-A63C-D94315A458CB}.Release|Any CPU.Build.0 = Release|Any CPU
101112
EndGlobalSection
102113
GlobalSection(SolutionProperties) = preSolution
103114
HideSolutionNode = FALSE
@@ -106,6 +117,8 @@ Global
106117
{DA7E2263-283A-497F-B122-B2E1A5AC2C8C} = {ED8079DD-2B06-4030-9F0F-DC548F98E1C4}
107118
{8830D84C-C999-4816-9742-AC54A3CC1E13} = {7C6D08E7-3EAC-4335-8F4B-252C193C27C9}
108119
{50E3E339-AA4D-4FD2-8791-DEBD2EBF0504} = {23F9FB2E-6804-4AF9-B6D5-5CBD00E14A02}
120+
{E3942700-8589-770A-6224-F6D2DDF977E8} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
121+
{D84267B7-0C5A-4679-A63C-D94315A458CB} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
109122
EndGlobalSection
110123
GlobalSection(ExtensibilityGlobals) = postSolution
111124
SolutionGuid = {97270415-1E71-487B-BDF5-FBE2D8EFFD09}

RELEASE_NOTES.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,32 @@
1+
### 1.0.0 (Released TBD)
2+
3+
This version marks the journey to our first stable release and introduces significant architectural changes, which obviously are backward incompatible.
4+
5+
* Decoupled vector and matrix representations from *FSharp.Stats*.
6+
* Integrated `FsMath` as the new lightweight, array-centric math backend.
7+
* Updated internal references in *FSharp.Stats* to use `FsMath` primitives for zero-friction integration.
8+
* Improved performance in core operations by leveraging `FsMath`’s optimized routines.
9+
10+
**Description**
11+
This PR introduces a separation of concerns between statistical algorithms and low-level numerical primitives.
12+
Vector and matrix types have been moved to the new `FsMath` library under FsLab.org, which is optimized for performance and designed for seamless interoperability.
13+
This change keeps *FSharp.Stats* focused on statistical functionality while making it easier to maintain and integrate into other F# workflows that rely on common libraries.
14+
15+
**Migration note**
16+
If your project uses `Vector` or `Matrix` types from *FSharp.Stats*, you will now need to reference `FsMath` and update your `open` statements accordingly:
17+
18+
```fsharp
19+
open FsMath
20+
```
21+
22+
All existing APIs are preserved with minimal changes, so most code will require slight modifications from `vector` to `Vector<float>` explicitly, along with namespace adjustments.
23+
Previously, arrays needed to be explicitly converted to vectors - now, `Array` and `Vector` can be used synonymously, removing the need for manual conversions in most cases.
24+
25+
Other Changes:
26+
27+
- [Fix incorrect F-test denominator assignments in TwoWayAnovaModel](https://github.com/fslaborg/FSharp.Stats/pull/350)
28+
- [Update test statistics to support generic type 'T data](https://github.com/fslaborg/FSharp.Stats/pull/348)
29+
130
### 0.6.0 (Released 2025-1-7)
231
* Additions:
332
* latest commit #529c2c01
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
```
2+
3+
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.3775)
4+
13th Gen Intel Core i7-13800H, 1 CPU, 20 logical and 14 physical cores
5+
.NET SDK 9.0.201
6+
[Host] : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX2 DEBUG
7+
DefaultJob : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX2
8+
9+
10+
```
11+
| Method | Size | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
12+
|------------------ |----- |------------------:|-----------------:|-----------------:|---------:|---------:|---------:|-----------:|
13+
| **Add** | **10** | **40.06 ns** | **0.550 ns** | **0.488 ns** | **0.0682** | **0.0002** | **-** | **856 B** |
14+
| MatMultiply | 10 | 442.83 ns | 2.841 ns | 2.373 ns | 0.1364 | - | - | 1712 B |
15+
| MultiplyVector | 10 | 33.28 ns | 0.425 ns | 0.397 ns | 0.0083 | - | - | 104 B |
16+
| MultiplyRowVector | 10 | 50.55 ns | 0.500 ns | 0.468 ns | 0.0083 | - | - | 104 B |
17+
| **Add** | **500** | **280,736.93 ns** | **5,376.045 ns** | **5,279.995 ns** | **212.4023** | **212.4023** | **212.4023** | **2000164 B** |
18+
| MatMultiply | 500 | 17,572,322.92 ns | 318,470.458 ns | 297,897.464 ns | 375.0000 | 375.0000 | 375.0000 | 4000242 B |
19+
| MultiplyVector | 500 | 31,726.43 ns | 202.403 ns | 189.328 ns | 0.3052 | - | - | 4024 B |
20+
| MultiplyRowVector | 500 | 127,918.10 ns | 996.783 ns | 832.359 ns | 0.2441 | - | - | 4024 B |
21+
| **Add** | **1000** | **1,377,902.79 ns** | **20,816.673 ns** | **18,453.438 ns** | **148.4375** | **148.4375** | **148.4375** | **8000105 B** |
22+
| MatMultiply | 1000 | 143,300,325.00 ns | 1,445,291.857 ns | 1,606,438.070 ns | 250.0000 | 250.0000 | 250.0000 | 16000296 B |
23+
| MultiplyVector | 1000 | 135,247.34 ns | 1,334.685 ns | 1,248.465 ns | 0.4883 | - | - | 8024 B |
24+
| MultiplyRowVector | 1000 | 677,195.35 ns | 6,896.007 ns | 6,450.529 ns | - | - | - | 8024 B |
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Size,Mean,Error,StdDev,Gen0,Gen1,Gen2,Allocated
2+
Add,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,10,40.06 ns,0.550 ns,0.488 ns,0.0682,0.0002,0.0000,856 B
3+
MatMultiply,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,10,442.83 ns,2.841 ns,2.373 ns,0.1364,0.0000,0.0000,1712 B
4+
MultiplyVector,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,10,33.28 ns,0.425 ns,0.397 ns,0.0083,0.0000,0.0000,104 B
5+
MultiplyRowVector,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,10,50.55 ns,0.500 ns,0.468 ns,0.0083,0.0000,0.0000,104 B
6+
Add,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,500,"280,736.93 ns","5,376.045 ns","5,279.995 ns",212.4023,212.4023,212.4023,2000164 B
7+
MatMultiply,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,500,"17,572,322.92 ns","318,470.458 ns","297,897.464 ns",375.0000,375.0000,375.0000,4000242 B
8+
MultiplyVector,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,500,"31,726.43 ns",202.403 ns,189.328 ns,0.3052,0.0000,0.0000,4024 B
9+
MultiplyRowVector,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,500,"127,918.10 ns",996.783 ns,832.359 ns,0.2441,0.0000,0.0000,4024 B
10+
Add,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,1000,"1,377,902.79 ns","20,816.673 ns","18,453.438 ns",148.4375,148.4375,148.4375,8000105 B
11+
MatMultiply,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,1000,"143,300,325.00 ns","1,445,291.857 ns","1,606,438.070 ns",250.0000,250.0000,250.0000,16000296 B
12+
MultiplyVector,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,1000,"135,247.34 ns","1,334.685 ns","1,248.465 ns",0.4883,0.0000,0.0000,8024 B
13+
MultiplyRowVector,DefaultJob,False,Default,Default,Default,Default,Default,Default,11111111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,1000,"677,195.35 ns","6,896.007 ns","6,450.529 ns",0.0000,0.0000,0.0000,8024 B
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<!DOCTYPE html>
2+
<html lang='en'>
3+
<head>
4+
<meta charset='utf-8' />
5+
<title>FSharp.Stats.Benchmarks.MatrixBenchmarks-20250412-175902</title>
6+
7+
<style type="text/css">
8+
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
9+
td, th { padding: 6px 13px; border: 1px solid #ddd; text-align: right; }
10+
tr { background-color: #fff; border-top: 1px solid #ccc; }
11+
tr:nth-child(even) { background: #f8f8f8; }
12+
</style>
13+
</head>
14+
<body>
15+
<pre><code>
16+
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.3775)
17+
13th Gen Intel Core i7-13800H, 1 CPU, 20 logical and 14 physical cores
18+
.NET SDK 9.0.201
19+
[Host] : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX2 DEBUG
20+
DefaultJob : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX2
21+
</code></pre>
22+
<pre><code></code></pre>
23+
24+
<table>
25+
<thead><tr><th>Method </th><th>Size</th><th>Mean </th><th>Error </th><th>StdDev </th><th>Gen0</th><th>Gen1</th><th>Gen2</th><th>Allocated</th>
26+
</tr>
27+
</thead><tbody><tr><td>Add</td><td>10</td><td>40.06 ns</td><td>0.550 ns</td><td>0.488 ns</td><td>0.0682</td><td>0.0002</td><td>-</td><td>856 B</td>
28+
</tr><tr><td>MatMultiply</td><td>10</td><td>442.83 ns</td><td>2.841 ns</td><td>2.373 ns</td><td>0.1364</td><td>-</td><td>-</td><td>1712 B</td>
29+
</tr><tr><td>MultiplyVector</td><td>10</td><td>33.28 ns</td><td>0.425 ns</td><td>0.397 ns</td><td>0.0083</td><td>-</td><td>-</td><td>104 B</td>
30+
</tr><tr><td>MultiplyRowVector</td><td>10</td><td>50.55 ns</td><td>0.500 ns</td><td>0.468 ns</td><td>0.0083</td><td>-</td><td>-</td><td>104 B</td>
31+
</tr><tr><td>Add</td><td>500</td><td>280,736.93 ns</td><td>5,376.045 ns</td><td>5,279.995 ns</td><td>212.4023</td><td>212.4023</td><td>212.4023</td><td>2000164 B</td>
32+
</tr><tr><td>MatMultiply</td><td>500</td><td>17,572,322.92 ns</td><td>318,470.458 ns</td><td>297,897.464 ns</td><td>375.0000</td><td>375.0000</td><td>375.0000</td><td>4000242 B</td>
33+
</tr><tr><td>MultiplyVector</td><td>500</td><td>31,726.43 ns</td><td>202.403 ns</td><td>189.328 ns</td><td>0.3052</td><td>-</td><td>-</td><td>4024 B</td>
34+
</tr><tr><td>MultiplyRowVector</td><td>500</td><td>127,918.10 ns</td><td>996.783 ns</td><td>832.359 ns</td><td>0.2441</td><td>-</td><td>-</td><td>4024 B</td>
35+
</tr><tr><td>Add</td><td>1000</td><td>1,377,902.79 ns</td><td>20,816.673 ns</td><td>18,453.438 ns</td><td>148.4375</td><td>148.4375</td><td>148.4375</td><td>8000105 B</td>
36+
</tr><tr><td>MatMultiply</td><td>1000</td><td>143,300,325.00 ns</td><td>1,445,291.857 ns</td><td>1,606,438.070 ns</td><td>250.0000</td><td>250.0000</td><td>250.0000</td><td>16000296 B</td>
37+
</tr><tr><td>MultiplyVector</td><td>1000</td><td>135,247.34 ns</td><td>1,334.685 ns</td><td>1,248.465 ns</td><td>0.4883</td><td>-</td><td>-</td><td>8024 B</td>
38+
</tr><tr><td>MultiplyRowVector</td><td>1000</td><td>677,195.35 ns</td><td>6,896.007 ns</td><td>6,450.529 ns</td><td>-</td><td>-</td><td>-</td><td>8024 B</td>
39+
</tr></tbody></table>
40+
</body>
41+
</html>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
```
2+
3+
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.3775)
4+
13th Gen Intel Core i7-13800H, 1 CPU, 20 logical and 14 physical cores
5+
.NET SDK 9.0.201
6+
[Host] : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX2 DEBUG
7+
DefaultJob : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX2
8+
9+
10+
```
11+
| Method | N | Mean | Error | StdDev | Gen0 | Allocated |
12+
|--------------------------- |----- |---------------:|-------------:|-------------:|-------:|----------:|
13+
| **SolveTriangularSystemLower** | **10** | **186.3 ns** | **1.23 ns** | **1.09 ns** | **0.0172** | **216 B** |
14+
| SolveTriangularSystemUpper | 10 | 185.9 ns | 1.33 ns | 1.18 ns | 0.0172 | 216 B |
15+
| **SolveTriangularSystemLower** | **500** | **372,737.0 ns** | **2,926.50 ns** | **2,737.45 ns** | **0.4883** | **8056 B** |
16+
| SolveTriangularSystemUpper | 500 | 357,818.8 ns | 1,729.90 ns | 1,618.15 ns | 0.4883 | 8056 B |
17+
| **SolveTriangularSystemLower** | **1000** | **1,510,031.5 ns** | **7,131.73 ns** | **6,671.03 ns** | **-** | **16057 B** |
18+
| SolveTriangularSystemUpper | 1000 | 1,422,197.8 ns | 8,642.37 ns | 8,084.08 ns | - | 16057 B |
19+
| **SolveTriangularSystemLower** | **2000** | **6,119,478.8 ns** | **40,341.69 ns** | **37,735.64 ns** | **-** | **32059 B** |
20+
| SolveTriangularSystemUpper | 2000 | 5,776,260.6 ns | 30,122.54 ns | 28,176.64 ns | - | 32059 B |

0 commit comments

Comments
 (0)