Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

lapx

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lapx - npm Package Compare versions

Comparing version
0.8.0
to
0.8.1
+444
-488
benchmark.md

@@ -0,4 +1,11 @@

[![GitHub release](https://img.shields.io/github/release/rathaROG/lapx.svg)](https://github.com/rathaROG/lapx/releases)
[![PyPI version](https://badge.fury.io/py/lapx.svg)](https://badge.fury.io/py/lapx)
[![Benchmark](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml)
[![Benchmark (Batch)](https://github.com/rathaROG/lapx/actions/workflows/benchmark_batch.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/benchmark_batch.yaml)
[![Benchmark (Object Tracking)](https://github.com/rathaROG/lapx/actions/workflows/benchmark_tracking.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/benchmark_tracking.yaml)
# 🏆 Quick Benchmark
`lapx` focuses more on real-world applications, and the [benchmark.py](https://github.com/rathaROG/lapx/blob/main/.github/test/benchmark.py) is **not**
`lapx` focuses more on real-world applications, and the [benchmark_batch.py](https://github.com/rathaROG/lapx/blob/main/.github/test/benchmark_batch.py)
and [benchmark.py](https://github.com/rathaROG/lapx/blob/main/.github/test/benchmark.py) are **not**
intended for scientific research or competitive evaluation. Instead, it provides a quick and accessible way for

@@ -17,4 +24,4 @@ you to run benchmark tests on your own machine. Below, you will also find a collection of interesting results

cd lapx/.github/test
python benchmark_batch.py
python benchmark.py
python benchmark_batch.py
```

@@ -24,201 +31,46 @@

### 📊 See some results
📊 Some benchmark results using `lapx` [v0.8.0](https://github.com/rathaROG/lapx/releases/tag/v0.8.0) (2025/10/27):
Using `lapx` [v0.6.0](https://github.com/rathaROG/lapx/releases/tag/v0.6.0) (2025/10/16):
<details><summary>🗂️ Batch on my Windows 11 i9-13900KS (8 p-core + 8 e-core) + python 3.9.13:</summary>
<details><summary>A quick benchmark on my local Windows AMD64 + Python 3.11:</summary>
```
D:\DEV\new\tmp\lapx\.github\test>python benchmark.py
-----------------------------------------
Test (4, 5)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 2.91 x slower
* lapjv : ✅ Passed 🐌 4.22 x slower
* lapjvx : ✅ Passed 🐌 1.73 x slower
* lapjvxa : ✅ Passed 🏆 1.48 x faster
# 50 x (3000x3000) | n_threads = 24
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00000870s
2. scipy : 0.00001290s
3. lapjvx : 0.00002230s
4. lapjvc : 0.00003750s
5. lapjv : 0.00005450s
-------------------------------
CPU lapx-batch-jvx : cost=82.08230873, time=1.40321970s
CPU lapx-batch-jvs : cost=82.08230873, time=0.80294538s
CPU lapx-batch-jvxa : cost=82.08230873, time=1.40610409s
CPU lapx-batch-jvsa : cost=82.08230873, time=0.81906796s
CPU lapx-batch-jvsa64 : cost=82.08230873, time=1.42109323s
CPU lapx-loop-jvx : cost=82.08230873, time=11.01966000s
CPU lapx-loop-jvs : cost=82.08230873, time=8.18710470s
-----------------------------------------
Test (5, 5)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.24 x slower
* lapjv : ✅ Passed 🏆 1.27 x faster
* lapjvx : ✅ Passed 🐌 1.08 x slower
* lapjvxa : ✅ Passed 🏆 2.2 x faster
# 100 x (2000x2000) | n_threads = 24
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00000540s
2. lapjv : 0.00000940s
3. scipy : 0.00001190s
4. lapjvx : 0.00001280s
5. lapjvc : 0.00001480s
-------------------------------
CPU lapx-batch-jvx : cost=164.54469568, time=0.81932855s
CPU lapx-batch-jvs : cost=164.54469568, time=0.58506370s
CPU lapx-batch-jvxa : cost=164.54469568, time=0.83581567s
CPU lapx-batch-jvsa : cost=164.54469568, time=0.59467125s
CPU lapx-batch-jvsa64 : cost=164.54469568, time=0.88178015s
CPU lapx-loop-jvx : cost=164.54469568, time=7.68291450s
CPU lapx-loop-jvs : cost=164.54469568, time=6.44884777s
-----------------------------------------
Test (5, 6)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.94 x slower
* lapjv : ✅ Passed 🐌 2.79 x slower
* lapjvx : ✅ Passed 🐌 1.94 x slower
* lapjvxa : ✅ Passed 🐌 1.23 x slower
# 500 x (1000x2000) | n_threads = 24
----- 🎉 SPEED RANKING 🎉 -----
1. scipy : 0.00000520s
2. lapjvxa : 0.00000640s
3. lapjvc : 0.00001010s
4. lapjvx : 0.00001010s
5. lapjv : 0.00001450s
-------------------------------
CPU lapx-batch-jvx : cost=291.25078928, time=0.91706204s
CPU lapx-batch-jvs : cost=291.25078928, time=0.79455686s
CPU lapx-batch-jvxa : cost=291.25078928, time=0.93096972s
CPU lapx-batch-jvsa : cost=291.25078928, time=0.79109597s
CPU lapx-batch-jvsa64 : cost=291.25078928, time=1.23274732s
CPU lapx-loop-jvx : cost=291.25078928, time=5.47222424s
CPU lapx-loop-jvs : cost=291.25078928, time=5.73832059s
-----------------------------------------
Test (45, 50)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.73 x slower
* lapjv : ✅ Passed 🐌 1.14 x slower
* lapjvx : ✅ Passed 🏆 1.37 x faster
* lapjvxa : ✅ Passed 🏆 2.68 x faster
# 1000 x (1000x1000) | n_threads = 24
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00001480s
2. lapjvx : 0.00002900s
3. scipy : 0.00003960s
4. lapjv : 0.00004500s
5. lapjvc : 0.00006860s
-------------------------------
-----------------------------------------
Test (50, 50)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.13 x slower
* lapjv : ✅ Passed 🏆 1.21 x faster
* lapjvx : ✅ Passed 🏆 1.15 x faster
* lapjvxa : ✅ Passed 🏆 1.83 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00003420s
2. lapjv : 0.00005180s
3. lapjvx : 0.00005460s
4. scipy : 0.00006260s
5. lapjvc : 0.00007080s
-------------------------------
-----------------------------------------
Test (50, 55)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.77 x slower
* lapjv : ✅ Passed 🐌 1.18 x slower
* lapjvx : ✅ Passed 🏆 1.32 x faster
* lapjvxa : ✅ Passed 🏆 2.59 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00001860s
2. lapjvx : 0.00003650s
3. scipy : 0.00004810s
4. lapjv : 0.00005670s
5. lapjvc : 0.00008530s
-------------------------------
-----------------------------------------
Test (450, 500)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 4.87 x slower
* lapjv : ✅ Passed 🏆 2.66 x faster
* lapjvx : ✅ Passed 🏆 2.91 x faster
* lapjvxa : ✅ Passed 🏆 3.25 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00070970s
2. lapjvx : 0.00079410s
3. lapjv : 0.00086630s
4. scipy : 0.00230730s
5. lapjvc : 0.01124800s
-------------------------------
-----------------------------------------
Test (500, 500)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.3 x slower
* lapjv : ✅ Passed 🏆 3.18 x faster
* lapjvx : ✅ Passed 🏆 3.76 x faster
* lapjvxa : ✅ Passed 🏆 4.12 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00116460s
2. lapjvx : 0.00127410s
3. lapjv : 0.00150640s
4. scipy : 0.00479300s
5. lapjvc : 0.00623980s
-------------------------------
-----------------------------------------
Test (500, 550)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 4.73 x slower
* lapjv : ✅ Passed 🏆 2.63 x faster
* lapjvx : ✅ Passed 🏆 2.79 x faster
* lapjvxa : ✅ Passed 🏆 3.11 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00092210s
2. lapjvx : 0.00102750s
3. lapjv : 0.00109070s
4. scipy : 0.00286380s
5. lapjvc : 0.01354680s
-------------------------------
-----------------------------------------
Test (2500, 5000)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 188.14 x slower
* lapjv : ✅ Passed 🐌 1.03 x slower
* lapjvx : ✅ Passed 🐌 1.19 x slower
* lapjvxa : ✅ Passed 🐌 1.05 x slower
----- 🎉 SPEED RANKING 🎉 -----
1. scipy : 0.05701800s
2. lapjv : 0.05896500s
3. lapjvxa : 0.05976270s
4. lapjvx : 0.06800490s
5. lapjvc : 10.72719050s
-------------------------------
-----------------------------------------
Test (5000, 5000)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.1 x slower
* lapjv : ✅ Passed 🏆 1.35 x faster
* lapjvx : ✅ Passed 🏆 1.36 x faster
* lapjvxa : ✅ Passed 🏆 1.44 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.76239620s
2. lapjvx : 0.80476540s
3. lapjv : 0.81221330s
4. scipy : 1.09645880s
5. lapjvc : 1.20319810s
-------------------------------
-----------------------------------------
Test (5000, 7500)
-----------------------------------------
* lapjvc : ✅ Passed 🐌 218.31 x slower
* lapjv : ✅ Passed 🏆 1.41 x faster
* lapjvx : ✅ Passed 🏆 1.49 x faster
* lapjvxa : ✅ Passed 🏆 1.6 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.12820320s
2. lapjvx : 0.13753590s
3. lapjv : 0.14516780s
4. scipy : 0.20494090s
5. lapjvc : 44.73986530s
-------------------------------
CPU lapx-batch-jvx : cost=1641.72891905, time=1.18257976s
CPU lapx-batch-jvs : cost=1641.72891905, time=1.13616300s
CPU lapx-batch-jvxa : cost=1641.72891905, time=1.16668177s
CPU lapx-batch-jvsa : cost=1641.72891905, time=1.11944461s
CPU lapx-batch-jvsa64 : cost=1641.72891905, time=1.23001194s
CPU lapx-loop-jvx : cost=1641.72891905, time=13.90460992s
CPU lapx-loop-jvs : cost=1641.72891905, time=14.32015085s
```

@@ -228,5 +80,5 @@

<details><summary>A quick benchmark on GitHub ubuntu-24.04-arm + Python 3.14:</summary>
<details><summary>📄 Single-matrix on ubuntu-latest + python 3.14:</summary>
https://github.com/rathaROG/lapx/actions/runs/18569524446/job/52939508934
https://github.com/rathaROG/lapx/actions/runs/18851354956/job/53788494991

@@ -237,13 +89,17 @@ ```

-----------------------------------------
* lapjvc : ✅ Passed 🐌 2.37 x slower
* lapjv : ✅ Passed 🐌 2.69 x slower
* lapjvx : ✅ Passed 🐌 1.13 x slower
* lapjvxa : ✅ Passed 🏆 1.71 x faster
* lapjvc : ✅ Passed 🐌 2.13 x slower
* lapjv : ✅ Passed 🐌 2.85 x slower
* lapjvx : ✅ Passed 🐌 1.17 x slower
* lapjvxa : ✅ Passed 🏆 1.6 x faster
* lapjvs : ✅ Passed 🐌 2.33 x slower
* lapjvsa : ✅ Passed 🐌 2.1 x slower
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00001602s
2. scipy : 0.00002745s
3. lapjvx : 0.00003089s
4. lapjvc : 0.00006492s
5. lapjv : 0.00007387s
1. lapjvxa : 0.00001882s
2. scipy ⭐ : 0.00003012s
3. lapjvx : 0.00003522s
4. lapjvsa : 0.00006335s
5. lapjvc : 0.00006415s
6. lapjvs : 0.00007016s
7. lapjv : 0.00008579s
-------------------------------

@@ -254,13 +110,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.83 x slower
* lapjv : ✅ Passed 🐌 1.17 x slower
* lapjvx : ✅ Passed 🐌 1.45 x slower
* lapjvxa : ✅ Passed 🏆 1.14 x faster
* lapjvc : ✅ Passed 🐌 1.5 x slower
* lapjv : ✅ Passed 🐌 1.9 x slower
* lapjvx : ✅ Passed 🐌 1.3 x slower
* lapjvxa : ✅ Passed 🏆 1.15 x faster
* lapjvs : ✅ Passed 🐌 1.92 x slower
* lapjvsa : ✅ Passed 🏆 1.79 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00000748s
2. scipy : 0.00000850s
3. lapjv : 0.00000993s
4. lapjvx : 0.00001229s
5. lapjvc : 0.00001552s
1. lapjvsa : 0.00000646s
2. lapjvxa : 0.00001002s
3. scipy ⭐ : 0.00001154s
4. lapjvx : 0.00001498s
5. lapjvc : 0.00001732s
6. lapjv : 0.00002196s
7. lapjvs : 0.00002215s
-------------------------------

@@ -271,9 +131,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🏆 2.64 x faster
* lapjv : ✅ Passed 🏆 1.43 x faster
* lapjvx : ✅ Passed 🏆 2.13 x faster
2. lapjvx : 0.00125891s
3. lapjv : 0.00136634s
4. scipy : 0.00408691s
5. lapjvc : 0.01745379s
* lapjvc : ✅ Passed 🐌 1.82 x slower
* lapjv : ✅ Passed 🐌 3.92 x slower
* lapjvx : ✅ Passed 🐌 2.34 x slower
* lapjvxa : ✅ Passed 🐌 1.69 x slower
* lapjvs : ✅ Passed 🐌 3.3 x slower
* lapjvsa : ✅ Passed 🐌 5.28 x slower
----- 🎉 SPEED RANKING 🎉 -----
1. scipy ⭐ : 0.00000862s
2. lapjvxa : 0.00001455s
3. lapjvc : 0.00001566s
4. lapjvx : 0.00002017s
5. lapjvs : 0.00002845s
6. lapjv : 0.00003373s
7. lapjvsa : 0.00004552s
-------------------------------

@@ -284,13 +152,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.36 x slower
* lapjv : ✅ Passed 🐌 1.0 x slower
* lapjvx : ✅ Passed 🏆 1.25 x faster
* lapjvxa : ✅ Passed 🏆 2.7 x faster
* lapjvc : ✅ Passed 🐌 1.87 x slower
* lapjv : ✅ Passed 🏆 1.19 x faster
* lapjvx : ✅ Passed 🏆 1.62 x faster
* lapjvxa : ✅ Passed 🏆 2.35 x faster
* lapjvs : ✅ Passed 🏆 1.33 x faster
* lapjvsa : ✅ Passed 🏆 1.32 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00001934s
2. lapjvx : 0.00004170s
3. scipy : 0.00005215s
4. lapjv : 0.00005229s
5. lapjvc : 0.00007079s
1. lapjvxa : 0.00003084s
2. lapjvx : 0.00004490s
3. lapjvs : 0.00005469s
4. lapjvsa : 0.00005475s
5. lapjv : 0.00006076s
6. scipy ⭐ : 0.00007253s
7. lapjvc : 0.00013553s
-------------------------------

@@ -301,13 +173,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🏆 1.14 x faster
* lapjv : ✅ Passed 🏆 1.59 x faster
* lapjvx : ✅ Passed 🏆 1.64 x faster
* lapjvxa : ✅ Passed 🏆 4.01 x faster
* lapjvc : ✅ Passed 🏆 1.19 x faster
* lapjv : ✅ Passed 🏆 2.1 x faster
* lapjvx : ✅ Passed 🏆 2.77 x faster
* lapjvxa : ✅ Passed 🏆 4.34 x faster
* lapjvs : ✅ Passed 🏆 2.3 x faster
* lapjvsa : ✅ Passed 🏆 5.58 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00001652s
2. lapjvx : 0.00004044s
3. lapjv : 0.00004173s
4. lapjvc : 0.00005790s
5. scipy : 0.00006618s
1. lapjvsa : 0.00001290s
2. lapjvxa : 0.00001658s
3. lapjvx : 0.00002601s
4. lapjvs : 0.00003129s
5. lapjv : 0.00003426s
6. lapjvc : 0.00006070s
7. scipy ⭐ : 0.00007195s
-------------------------------

@@ -318,13 +194,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.57 x slower
* lapjv : ✅ Passed 🏆 1.09 x faster
* lapjvx : ✅ Passed 🏆 1.36 x faster
* lapjvxa : ✅ Passed 🏆 2.7 x faster
* lapjvc : ✅ Passed 🐌 1.59 x slower
* lapjv : ✅ Passed 🏆 1.14 x faster
* lapjvx : ✅ Passed 🏆 1.65 x faster
* lapjvxa : ✅ Passed 🏆 2.33 x faster
* lapjvs : ✅ Passed 🏆 1.58 x faster
* lapjvsa : ✅ Passed 🏆 1.37 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00002514s
2. lapjvx : 0.00004973s
3. lapjv : 0.00006224s
4. scipy : 0.00006787s
5. lapjvc : 0.00010661s
1. lapjvxa : 0.00003199s
2. lapjvx : 0.00004507s
3. lapjvs : 0.00004723s
4. lapjvsa : 0.00005446s
5. lapjv : 0.00006505s
6. scipy ⭐ : 0.00007443s
7. lapjvc : 0.00011813s
-------------------------------

@@ -335,13 +215,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 4.44 x slower
* lapjv : ✅ Passed 🏆 1.74 x faster
* lapjvx : ✅ Passed 🏆 2.32 x faster
* lapjvxa : ✅ Passed 🏆 3.44 x faster
* lapjvc : ✅ Passed 🐌 4.19 x slower
* lapjv : ✅ Passed 🏆 2.46 x faster
* lapjvx : ✅ Passed 🏆 2.84 x faster
* lapjvxa : ✅ Passed 🏆 3.94 x faster
* lapjvs : ✅ Passed 🏆 4.37 x faster
* lapjvsa : ✅ Passed 🏆 4.45 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00093354s
2. lapjvx : 0.00138716s
3. lapjv : 0.00184813s
4. scipy : 0.00321414s
5. lapjvc : 0.01426200s
1. lapjvsa : 0.00108461s
2. lapjvs : 0.00110318s
3. lapjvxa : 0.00122390s
4. lapjvx : 0.00169714s
5. lapjv : 0.00195890s
6. scipy ⭐ : 0.00482560s
7. lapjvc : 0.02019986s
-------------------------------

@@ -352,13 +236,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🏆 1.08 x faster
* lapjv : ✅ Passed 🏆 2.13 x faster
* lapjvx : ✅ Passed 🏆 2.16 x faster
* lapjvxa : ✅ Passed 🏆 2.32 x faster
* lapjvc : ✅ Passed 🐌 1.01 x slower
* lapjv : ✅ Passed 🏆 2.0 x faster
* lapjvx : ✅ Passed 🏆 2.06 x faster
* lapjvxa : ✅ Passed 🏆 2.06 x faster
* lapjvs : ✅ Passed 🏆 2.05 x faster
* lapjvsa : ✅ Passed 🏆 2.06 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00286471s
2. lapjvx : 0.00307023s
3. lapjv : 0.00311945s
4. lapjvc : 0.00613955s
5. scipy : 0.00663450s
1. lapjvsa : 0.00498536s
2. lapjvxa : 0.00499154s
3. lapjvx : 0.00499524s
4. lapjvs : 0.00501234s
5. lapjv : 0.00512501s
6. scipy ⭐ : 0.01026616s
7. lapjvc : 0.01041151s
-------------------------------

@@ -369,13 +257,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 4.27 x slower
* lapjv : ✅ Passed 🏆 2.99 x faster
* lapjvx : ✅ Passed 🏆 3.25 x faster
* lapjvxa : ✅ Passed 🏆 4.14 x faster
* lapjvc : ✅ Passed 🐌 4.17 x slower
* lapjv : ✅ Passed 🏆 3.74 x faster
* lapjvx : ✅ Passed 🏆 4.29 x faster
* lapjvxa : ✅ Passed 🏆 4.37 x faster
* lapjvs : ✅ Passed 🏆 4.33 x faster
* lapjvsa : ✅ Passed 🏆 4.38 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00098620s
2. lapjvx : 0.00125891s
3. lapjv : 0.00136634s
4. scipy : 0.00408691s
5. lapjvc : 0.01745379s
1. lapjvsa : 0.00136651s
2. lapjvxa : 0.00136884s
3. lapjvs : 0.00138280s
4. lapjvx : 0.00139509s
5. lapjv : 0.00160113s
6. scipy ⭐ : 0.00598653s
7. lapjvc : 0.02498232s
-------------------------------

@@ -386,13 +278,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 253.72 x slower
* lapjv : ✅ Passed 🐌 1.02 x slower
* lapjvx : ✅ Passed 🏆 1.03 x faster
* lapjvxa : ✅ Passed 🏆 1.04 x faster
* lapjvc : ✅ Passed 🐌 222.34 x slower
* lapjv : ✅ Passed 🏆 1.15 x faster
* lapjvx : ✅ Passed 🏆 1.31 x faster
* lapjvxa : ✅ Passed 🏆 1.29 x faster
* lapjvs : ✅ Passed 🐌 1.11 x slower
* lapjvsa : ✅ Passed 🐌 1.11 x slower
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.07292434s
2. lapjvx : 0.07376017s
3. scipy : 0.07572614s
4. lapjv : 0.07745444s
5. lapjvc : 19.21297550s
1. lapjvx : 0.07696005s
2. lapjvxa : 0.07810211s
3. lapjv : 0.08824028s
4. scipy ⭐ : 0.10107496s
5. lapjvsa : 0.11232857s
6. lapjvs : 0.11252413s
7. lapjvc : 22.47302152s
-------------------------------

@@ -403,13 +299,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🏆 1.22 x faster
* lapjv : ✅ Passed 🏆 1.38 x faster
* lapjvx : ✅ Passed 🏆 1.36 x faster
* lapjvxa : ✅ Passed 🏆 1.41 x faster
* lapjvc : ✅ Passed 🏆 1.17 x faster
* lapjv : ✅ Passed 🏆 1.3 x faster
* lapjvx : ✅ Passed 🏆 1.31 x faster
* lapjvxa : ✅ Passed 🏆 1.31 x faster
* lapjvs : ✅ Passed 🏆 2.06 x faster
* lapjvsa : ✅ Passed 🏆 2.06 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 1.55721226s
2. lapjv : 1.59465879s
3. lapjvx : 1.62343664s
4. lapjvc : 1.80744283s
5. scipy : 2.20289654s
1. lapjvs : 1.16571718s
2. lapjvsa : 1.16708573s
3. lapjvxa : 1.84065010s
4. lapjvx : 1.84106529s
5. lapjv : 1.84539000s
6. lapjvc : 2.04553916s
7. scipy ⭐ : 2.40261425s
-------------------------------

@@ -420,13 +320,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 286.09 x slower
* lapjv : ✅ Passed 🏆 1.82 x faster
* lapjvx : ✅ Passed 🏆 1.8 x faster
* lapjvxa : ✅ Passed 🏆 1.82 x faster
* lapjvc : ✅ Passed 🐌 230.42 x slower
* lapjv : ✅ Passed 🏆 2.24 x faster
* lapjvx : ✅ Passed 🏆 2.54 x faster
* lapjvxa : ✅ Passed 🏆 2.5 x faster
* lapjvs : ✅ Passed 🏆 1.66 x faster
* lapjvsa : ✅ Passed 🏆 1.68 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.15763765s
2. lapjv : 0.15809694s
3. lapjvx : 0.16012727s
4. scipy : 0.28752362s
5. lapjvc : 82.25884137s
1. lapjvx : 0.16310518s
2. lapjvxa : 0.16545943s
3. lapjv : 0.18474822s
4. lapjvsa : 0.24673601s
5. lapjvs : 0.24954140s
6. scipy ⭐ : 0.41429755s
7. lapjvc : 95.46102137s
-------------------------------

@@ -437,5 +341,5 @@ ```

<details><summary>A quick benchmark on GitHub macos-latest (arm) + python 3.14:</summary>
<details><summary>📄 Single-matrix on macos-latest (arm) + python 3.14:</summary>
https://github.com/rathaROG/lapx/actions/runs/18569524446/job/52939508983
https://github.com/rathaROG/lapx/actions/runs/18851354956/job/53788495229

@@ -446,13 +350,17 @@ ```

-----------------------------------------
* lapjvc : ✅ Passed 🐌 9.17 x slower
* lapjv : ✅ Passed 🐌 5.8 x slower
* lapjvx : ✅ Passed 🐌 1.78 x slower
* lapjvxa : ✅ Passed 🏆 1.88 x faster
* lapjvc : ✅ Passed 🐌 1.65 x slower
* lapjv : ✅ Passed 🐌 4.13 x slower
* lapjvx : ✅ Passed 🐌 1.26 x slower
* lapjvxa : ✅ Passed 🏆 3.06 x faster
* lapjvs : ✅ Passed 🐌 1.52 x slower
* lapjvsa : ✅ Passed 🐌 1.46 x slower
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00001083s
2. scipy : 0.00002042s
3. lapjvx : 0.00003642s
4. lapjv : 0.00011850s
5. lapjvc : 0.00018725s
1. lapjvxa : 0.00001037s
2. scipy ⭐ : 0.00003179s
3. lapjvx : 0.00003996s
4. lapjvsa : 0.00004642s
5. lapjvs : 0.00004833s
6. lapjvc : 0.00005250s
7. lapjv : 0.00013146s
-------------------------------

@@ -463,13 +371,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 2.0 x slower
* lapjv : ✅ Passed 🐌 1.01 x slower
* lapjvx : ✅ Passed 🐌 1.28 x slower
* lapjvxa : ✅ Passed 🏆 1.32 x faster
* lapjvc : ✅ Passed 🐌 1.51 x slower
* lapjv : ✅ Passed 🐌 1.65 x slower
* lapjvx : ✅ Passed 🐌 1.09 x slower
* lapjvxa : ✅ Passed 🏆 1.27 x faster
* lapjvs : ✅ Passed 🐌 1.67 x slower
* lapjvsa : ✅ Passed 🏆 1.99 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00000508s
2. scipy : 0.00000671s
3. lapjv : 0.00000679s
4. lapjvx : 0.00000858s
5. lapjvc : 0.00001342s
1. lapjvsa : 0.00000308s
2. lapjvxa : 0.00000483s
3. scipy ⭐ : 0.00000613s
4. lapjvx : 0.00000667s
5. lapjvc : 0.00000925s
6. lapjv : 0.00001013s
7. lapjvs : 0.00001021s
-------------------------------

@@ -480,9 +392,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.64 x slower
* lapjv : ✅ Passed 🐌 2.71 x slower
* lapjvx : ✅ Passed 🐌 1.71 x slower
* lapjvxa : ✅ Passed 🐌 1.09 x slower
3. lapjv : 0.00147846s
4. scipy : 0.00379913s
5. lapjvc : 0.01882146s
* lapjvc : ✅ Passed 🐌 1.95 x slower
* lapjv : ✅ Passed 🐌 3.42 x slower
* lapjvx : ✅ Passed 🐌 2.1 x slower
* lapjvxa : ✅ Passed 🐌 1.68 x slower
* lapjvs : ✅ Passed 🐌 3.23 x slower
* lapjvsa : ✅ Passed 🐌 4.63 x slower
----- 🎉 SPEED RANKING 🎉 -----
1. scipy ⭐ : 0.00000429s
2. lapjvxa : 0.00000721s
3. lapjvc : 0.00000837s
4. lapjvx : 0.00000900s
5. lapjvs : 0.00001387s
6. lapjv : 0.00001467s
7. lapjvsa : 0.00001988s
-------------------------------

@@ -493,13 +413,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 5.88 x slower
* lapjv : ✅ Passed 🐌 3.87 x slower
* lapjvx : ✅ Passed 🐌 2.25 x slower
* lapjvxa : ✅ Passed 🏆 1.4 x faster
* lapjvc : ✅ Passed 🐌 1.49 x slower
* lapjv : ✅ Passed 🏆 1.7 x faster
* lapjvx : ✅ Passed 🏆 2.13 x faster
* lapjvxa : ✅ Passed 🏆 2.67 x faster
* lapjvs : ✅ Passed 🏆 1.8 x faster
* lapjvsa : ✅ Passed 🏆 1.89 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00003196s
2. scipy : 0.00004483s
3. lapjvx : 0.00010071s
4. lapjv : 0.00017346s
5. lapjvc : 0.00026346s
1. lapjvxa : 0.00002146s
2. lapjvx : 0.00002683s
3. lapjvsa : 0.00003033s
4. lapjvs : 0.00003183s
5. lapjv : 0.00003358s
6. scipy ⭐ : 0.00005721s
7. lapjvc : 0.00008517s
-------------------------------

@@ -510,13 +434,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.04 x slower
* lapjv : ✅ Passed 🏆 1.85 x faster
* lapjvx : ✅ Passed 🏆 1.25 x faster
* lapjvxa : ✅ Passed 🏆 2.74 x faster
* lapjvc : ✅ Passed 🏆 1.41 x faster
* lapjv : ✅ Passed 🏆 3.95 x faster
* lapjvx : ✅ Passed 🏆 4.4 x faster
* lapjvxa : ✅ Passed 🏆 6.29 x faster
* lapjvs : ✅ Passed 🏆 3.59 x faster
* lapjvsa : ✅ Passed 🏆 6.65 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00002338s
2. lapjv : 0.00003467s
3. lapjvx : 0.00005137s
4. scipy : 0.00006404s
5. lapjvc : 0.00006692s
1. lapjvsa : 0.00001100s
2. lapjvxa : 0.00001162s
3. lapjvx : 0.00001662s
4. lapjv : 0.00001850s
5. lapjvs : 0.00002038s
6. lapjvc : 0.00005183s
7. scipy ⭐ : 0.00007312s
-------------------------------

@@ -527,13 +455,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 2.15 x slower
* lapjv : ✅ Passed 🐌 1.16 x slower
* lapjvx : ✅ Passed 🐌 1.7 x slower
* lapjvxa : ✅ Passed 🏆 3.02 x faster
* lapjvc : ✅ Passed 🐌 2.17 x slower
* lapjv : ✅ Passed 🏆 1.56 x faster
* lapjvx : ✅ Passed 🏆 1.73 x faster
* lapjvxa : ✅ Passed 🏆 2.29 x faster
* lapjvs : ✅ Passed 🏆 1.46 x faster
* lapjvsa : ✅ Passed 🏆 1.4 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00004450s
2. scipy : 0.00013425s
3. lapjv : 0.00015537s
4. lapjvx : 0.00022804s
5. lapjvc : 0.00028850s
1. lapjvxa : 0.00001733s
2. lapjvx : 0.00002292s
3. lapjv : 0.00002546s
4. lapjvs : 0.00002713s
5. lapjvsa : 0.00002838s
6. scipy ⭐ : 0.00003962s
7. lapjvc : 0.00008579s
-------------------------------

@@ -544,13 +476,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 5.07 x slower
* lapjv : ✅ Passed 🏆 3.85 x faster
* lapjvx : ✅ Passed 🏆 5.07 x faster
* lapjvxa : ✅ Passed 🏆 5.86 x faster
* lapjvc : ✅ Passed 🐌 5.08 x slower
* lapjv : ✅ Passed 🏆 1.44 x faster
* lapjvx : ✅ Passed 🏆 1.95 x faster
* lapjvxa : ✅ Passed 🏆 3.47 x faster
* lapjvs : ✅ Passed 🏆 2.22 x faster
* lapjvsa : ✅ Passed 🏆 2.18 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00084317s
2. lapjvx : 0.00097429s
3. lapjv : 0.00128471s
4. scipy : 0.00494200s
5. lapjvc : 0.02504121s
1. lapjvxa : 0.00098750s
2. lapjvs : 0.00154171s
3. lapjvsa : 0.00157042s
4. lapjvx : 0.00175387s
5. lapjv : 0.00237538s
6. scipy ⭐ : 0.00342258s
7. lapjvc : 0.01738238s
-------------------------------

@@ -561,13 +497,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.58 x slower
* lapjv : ✅ Passed 🏆 1.57 x faster
* lapjvx : ✅ Passed 🏆 2.31 x faster
* lapjvxa : ✅ Passed 🏆 2.45 x faster
* lapjvc : ✅ Passed 🐌 1.23 x slower
* lapjv : ✅ Passed 🏆 3.51 x faster
* lapjvx : ✅ Passed 🏆 3.61 x faster
* lapjvxa : ✅ Passed 🏆 3.69 x faster
* lapjvs : ✅ Passed 🏆 3.29 x faster
* lapjvsa : ✅ Passed 🏆 3.42 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00306717s
2. lapjvx : 0.00324108s
3. lapjv : 0.00478496s
4. scipy : 0.00750079s
5. lapjvc : 0.01186579s
1. lapjvxa : 0.00192367s
2. lapjvx : 0.00196654s
3. lapjv : 0.00201971s
4. lapjvsa : 0.00207583s
5. lapjvs : 0.00215921s
6. scipy ⭐ : 0.00709604s
7. lapjvc : 0.00875521s
-------------------------------

@@ -578,13 +518,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 4.95 x slower
* lapjv : ✅ Passed 🏆 2.57 x faster
* lapjvx : ✅ Passed 🏆 3.09 x faster
* lapjvxa : ✅ Passed 🏆 3.8 x faster
* lapjvc : ✅ Passed 🐌 5.09 x slower
* lapjv : ✅ Passed 🏆 3.0 x faster
* lapjvx : ✅ Passed 🏆 3.6 x faster
* lapjvxa : ✅ Passed 🏆 3.71 x faster
* lapjvs : ✅ Passed 🏆 2.83 x faster
* lapjvsa : ✅ Passed 🏆 2.74 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.00100012s
2. lapjvx : 0.00122762s
3. lapjv : 0.00147846s
4. scipy : 0.00379913s
5. lapjvc : 0.01882146s
1. lapjvxa : 0.00110967s
2. lapjvx : 0.00114104s
3. lapjv : 0.00137046s
4. lapjvs : 0.00145308s
5. lapjvsa : 0.00150308s
6. scipy ⭐ : 0.00411283s
7. lapjvc : 0.02093913s
-------------------------------

@@ -595,13 +539,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 249.66 x slower
* lapjv : ✅ Passed 🐌 1.75 x slower
* lapjvx : ✅ Passed 🐌 1.44 x slower
* lapjvxa : ✅ Passed 🏆 1.17 x faster
* lapjvc : ✅ Passed 🐌 199.7 x slower
* lapjv : ✅ Passed 🐌 1.48 x slower
* lapjvx : ✅ Passed 🏆 1.17 x faster
* lapjvxa : ✅ Passed 🏆 1.08 x faster
* lapjvs : ✅ Passed 🐌 1.75 x slower
* lapjvsa : ✅ Passed 🐌 1.58 x slower
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.07092317s
2. scipy : 0.08262608s
3. lapjvx : 0.11884879s
4. lapjv : 0.14426917s
5. lapjvc : 20.62802196s
1. lapjvx : 0.09995704s
2. lapjvxa : 0.10858558s
3. scipy ⭐ : 0.11726183s
4. lapjv : 0.17386667s
5. lapjvsa : 0.18564625s
6. lapjvs : 0.20479308s
7. lapjvc : 23.41745225s
-------------------------------

@@ -612,13 +560,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 1.89 x slower
* lapjv : ✅ Passed 🏆 1.65 x faster
* lapjvx : ✅ Passed 🏆 1.65 x faster
* lapjvxa : ✅ Passed 🏆 1.61 x faster
* lapjvc : ✅ Passed 🐌 2.01 x slower
* lapjv : ✅ Passed 🏆 1.21 x faster
* lapjvx : ✅ Passed 🏆 1.25 x faster
* lapjvxa : ✅ Passed 🏆 1.19 x faster
* lapjvs : ✅ Passed 🏆 1.73 x faster
* lapjvsa : ✅ Passed 🏆 1.84 x faster
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvx : 1.10220804s
2. lapjv : 1.10794012s
3. lapjvxa : 1.13026450s
4. scipy : 1.82365146s
5. lapjvc : 3.44077729s
1. lapjvsa : 0.92814183s
2. lapjvs : 0.98585971s
3. lapjvx : 1.36841413s
4. lapjv : 1.41392200s
5. lapjvxa : 1.43138329s
6. scipy ⭐ : 1.70584088s
7. lapjvc : 3.43550417s
-------------------------------

@@ -629,13 +581,17 @@

-----------------------------------------
* lapjvc : ✅ Passed 🐌 342.0 x slower
* lapjv : ✅ Passed 🐌 2.16 x slower
* lapjvx : ✅ Passed 🐌 1.28 x slower
* lapjvxa : ✅ Passed 🏆 1.43 x faster
* lapjvc : ✅ Passed 🐌 283.01 x slower
* lapjv : ✅ Passed 🐌 2.24 x slower
* lapjvx : ✅ Passed 🏆 1.39 x faster
* lapjvxa : ✅ Passed 🏆 2.27 x faster
* lapjvs : ✅ Passed 🐌 1.5 x slower
* lapjvsa : ✅ Passed 🐌 1.79 x slower
----- 🎉 SPEED RANKING 🎉 -----
1. lapjvxa : 0.21074092s
2. scipy : 0.30162325s
3. lapjvx : 0.38491017s
4. lapjv : 0.65042508s
5. lapjvc : 103.15502925s
1. lapjvxa : 0.16666625s
2. lapjvx : 0.27308525s
3. scipy ⭐ : 0.37829733s
4. lapjvs : 0.56853200s
5. lapjvsa : 0.67584400s
6. lapjv : 0.84921917s
7. lapjvc : 107.06137171s
-------------------------------

@@ -646,6 +602,4 @@ ```

### 🔍 See more results
👁️ See newer benchmark results on all platforms [here on GitHub](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml).
See newer benchmark results on all platforms [here on GitHub](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml).
## 🕵️‍♂️ Other Benchmarks

@@ -655,3 +609,3 @@

This [benchmark_tracking.py](https://github.com/rathaROG/lapx/blob/main/.github/test/benchmark_tracking.py) is specifically desinged for the Object Tracking applications, with [SciPy](https://pypi.org/project/scipy/) as the baseline in the benchmark.
This [benchmark_tracking.py](https://github.com/rathaROG/lapx/blob/main/.github/test/benchmark_tracking.py) is specifically desinged for the Object Tracking applications, with [SciPy](https://pypi.org/project/scipy/) as the baseline.

@@ -674,5 +628,5 @@ ```

👁️ See more results on various platforms and architectures [here](https://github.com/rathaROG/lapx/actions/runs/18668517507).
<details><summary>📊 Show the results:</summary>
<details><summary>Show the results:</summary>
https://github.com/rathaROG/lapx/actions/runs/18830580672/job/53721233510

@@ -687,11 +641,11 @@ ```

-----------------------------------------------------------------------------------------------------------------------
10x10 | 0.000270s 6th | 0.000086s ✗ 1st | 0.000117s ✓ 3rd | 0.000093s ✓ 2nd | 0.000145s ✓ 4th | 0.000156s ✓ 5th
25x20 | 0.000134s 6th | 0.000096s ✗ 1st | 0.000104s ✓ 4th | 0.000098s ✓ 2nd | 0.000109s ✓ 5th | 0.000103s ✓ 3rd
50x50 | 0.000216s 6th | 0.000161s ✗ 4th | 0.000130s ✓ 2nd | 0.000135s ✓ 3rd | 0.000163s ✓ 5th | 0.000128s ✓ 1st
100x150 | 0.000314s 4th | 0.001181s ✓ 6th | 0.000307s ✓ 3rd | 0.000304s ✓ 2nd | 0.001002s ✓ 5th | 0.000292s ✓ 1st
250x250 | 0.001926s 4th | 0.002400s ✓ 6th | 0.001819s ✓ 3rd | 0.001703s ✓ 2nd | 0.002221s ✓ 5th | 0.001585s ✓ 1st
550x500 | 0.005211s 1st | 0.046236s ✓ 6th | 0.010141s ✓ 4th | 0.009736s ✓ 3rd | 0.031337s ✓ 5th | 0.009591s ✓ 2nd
1000x1000 | 0.035298s 4th | 0.062979s ✓ 6th | 0.030774s ✓ 3rd | 0.029720s ✓ 2nd | 0.037911s ✓ 5th | 0.014011s ✓ 1st
2000x2500 | 0.047353s 4th | 2.537366s ✓ 6th | 0.017684s ✓ 1st | 0.019768s ✓ 2nd | 2.133186s ✓ 5th | 0.023504s ✓ 3rd
5000x5000 | 1.923870s 5th | 3.216478s ✓ 6th | 1.527883s ✓ 3rd | 1.501829s ✓ 2nd | 1.720995s ✓ 4th | 0.879582s ✓ 1st
10x10 | 0.000325s 6th | 0.000137s ✗ 1st | 0.000168s ✓ 3rd | 0.000177s ✓ 4th | 0.000206s ✓ 5th | 0.000162s ✓ 2nd
25x20 | 0.000170s 5th | 0.000191s ✗ 6th | 0.000155s ✓ 1st | 0.000170s ✓ 4th | 0.000162s ✓ 3rd | 0.000160s ✓ 2nd
50x50 | 0.000265s 6th | 0.000214s ✗ 4th | 0.000190s ✓ 1st | 0.000193s ✓ 2nd | 0.000246s ✓ 5th | 0.000194s ✓ 3rd
100x150 | 0.000453s 4th | 0.001335s ✓ 6th | 0.000402s ✓ 3rd | 0.000396s ✓ 2nd | 0.001067s ✓ 5th | 0.000330s ✓ 1st
250x250 | 0.002854s 5th | 0.002952s ✓ 6th | 0.001731s ✓ 3rd | 0.001559s ✓ 2nd | 0.001977s ✓ 4th | 0.001536s ✓ 1st
550x500 | 0.008365s 1st | 0.064973s ✓ 6th | 0.012927s ✓ 4th | 0.011949s ✓ 3rd | 0.030009s ✓ 5th | 0.011664s ✓ 2nd
1000x1000 | 0.051245s 2nd | 0.111529s ✓ 6th | 0.057231s ✓ 5th | 0.055981s ✓ 4th | 0.044361s ✓ 1st | 0.055155s ✓ 3rd
2000x2500 | 0.075957s 4th | 3.645535s ✓ 6th | 0.020558s ✓ 1st | 0.020706s ✓ 2nd | 2.975010s ✓ 5th | 0.034655s ✓ 3rd
5000x5000 | 2.114572s 5th | 2.563577s ✓ 6th | 1.214149s ✓ 2nd | 1.219787s ✓ 3rd | 1.844269s ✓ 4th | 0.959447s ✓ 1st
-----------------------------------------------------------------------------------------------------------------------

@@ -702,8 +656,8 @@

🎉 --------------------------- OVERALL RANKING --------------------------- 🎉
1. LAPX LAPJVS : 928.9522 ms | ✅ | 🥇x5 🥈x1 🥉x2 🏳️x1
2. LAPX LAPJVX : 1563.3861 ms | ✅ | 🥈x7 🥉x2
3. LAPX LAPJV : 1588.9597 ms | ✅ | 🥇x1 🥈x1 🥉x5 🚩x2
4. BASELINE SciPy : 2014.5920 ms | ⭐ | 🥇x1 🚩x4 🏳️x1 🥴x3
5. LAPX LAPJVC : 3927.0696 ms | ✅ | 🚩x2 🏳️x7
6. LAPX LAPJV-IFT : 5866.9837 ms | ⚠️ | 🥇x2 🚩x1 🥴x6
1. LAPX LAPJVS : 1063.3028 ms | ✅ | 🥇x3 🥈x3 🥉x3
2. LAPX LAPJV : 1307.5116 ms | ✅ | 🥇x3 🥈x1 🥉x3 🚩x1 🏳️x1
3. LAPX LAPJVX : 1310.9174 ms | ✅ | 🥈x4 🥉x2 🚩x3
4. BASELINE SciPy : 2254.2068 ms | ⭐ | 🥇x1 🥈x1 🚩x2 🏳️x3 🥴x2
5. LAPX LAPJVC : 4897.3061 ms | ✅ | 🥇x1 🥉x1 🚩x2 🏳️x5
6. LAPX LAPJV-IFT : 6390.4416 ms | ⚠️ | 🥇x1 🚩x1 🥴x7
🎉 ------------------------------------------------------------------------- 🎉

@@ -719,11 +673,11 @@

-----------------------------------------------------------------------------------------------------------------------
10x10 | 0.000181s 6th | 0.000080s ✗ 1st | 0.000091s ✓ 4th | 0.000083s ✓ 2nd | 0.000101s ✓ 5th | 0.000084s ✓ 3rd
25x20 | 0.000122s 6th | 0.000092s ✗ 1st | 0.000100s ✓ 2nd | 0.000100s ✓ 3rd | 0.000107s ✓ 5th | 0.000103s ✓ 4th
50x50 | 0.000218s 6th | 0.000149s ✗ 4th | 0.000133s ✓ 1st | 0.000140s ✓ 2nd | 0.000183s ✓ 5th | 0.000141s ✓ 3rd
100x150 | 0.000350s 4th | 0.001086s ✓ 5th | 0.000258s ✓ 1st | 0.000279s ✓ 3rd | 0.001142s ✓ 6th | 0.000273s ✓ 2nd
250x250 | 0.001713s 5th | 0.001953s ✓ 6th | 0.000978s ✓ 2nd | 0.000998s ✓ 3rd | 0.001682s ✓ 4th | 0.000929s ✓ 1st
550x500 | 0.005035s 1st | 0.113739s ✓ 6th | 0.010219s ✓ 4th | 0.010151s ✓ 3rd | 0.029781s ✓ 5th | 0.010025s ✓ 2nd
1000x1000 | 0.032870s 3rd | 0.076641s ✓ 6th | 0.037077s ✓ 5th | 0.035340s ✓ 4th | 0.031529s ✓ 1st | 0.031647s ✓ 2nd
2000x2500 | 0.050076s 4th | 2.552992s ✓ 6th | 0.017056s ✓ 1st | 0.020267s ✓ 2nd | 2.110527s ✓ 5th | 0.022934s ✓ 3rd
5000x5000 | 2.035414s 5th | 3.376261s ✓ 6th | 1.640862s ✓ 4th | 1.622361s ✓ 3rd | 1.534738s ✓ 2nd | 0.910615s ✓ 1st
10x10 | 0.000188s 6th | 0.000157s ✗ 5th | 0.000130s ✓ 3rd | 0.000129s ✓ 1st | 0.000139s ✓ 4th | 0.000129s ✓ 2nd
25x20 | 0.000152s 3rd | 0.000171s ✗ 6th | 0.000148s ✓ 1st | 0.000149s ✓ 2nd | 0.000159s ✓ 4th | 0.000160s ✓ 5th
50x50 | 0.000245s 6th | 0.000230s ✗ 4th | 0.000188s ✓ 1st | 0.000194s ✓ 2nd | 0.000231s ✓ 5th | 0.000197s ✓ 3rd
100x150 | 0.000417s 4th | 0.001254s ✓ 6th | 0.000334s ✓ 2nd | 0.000333s ✓ 1st | 0.000887s ✓ 5th | 0.000349s ✓ 3rd
250x250 | 0.002642s 5th | 0.003365s ✓ 6th | 0.001734s ✓ 2nd | 0.001751s ✓ 3rd | 0.002294s ✓ 4th | 0.001708s ✓ 1st
550x500 | 0.007055s 1st | 0.127557s ✓ 6th | 0.011708s ✓ 4th | 0.011700s ✓ 3rd | 0.040566s ✓ 5th | 0.011671s ✓ 2nd
1000x1000 | 0.045616s 5th | 0.085374s ✓ 6th | 0.041577s ✓ 3rd | 0.041732s ✓ 4th | 0.040828s ✓ 1st | 0.041053s ✓ 2nd
2000x2500 | 0.075874s 4th | 3.594363s ✓ 6th | 0.020592s ✓ 2nd | 0.020426s ✓ 1st | 2.840181s ✓ 5th | 0.024470s ✓ 3rd
5000x5000 | 2.493812s 5th | 3.415118s ✓ 6th | 1.651438s ✓ 3rd | 1.646662s ✓ 2nd | 2.010495s ✓ 4th | 0.994217s ✓ 1st
-----------------------------------------------------------------------------------------------------------------------

@@ -734,8 +688,8 @@

🎉 --------------------------- OVERALL RANKING --------------------------- 🎉
1. LAPX LAPJVS : 976.7508 ms | ✅ | 🥇x2 🥈x3 🥉x3 🚩x1
2. LAPX LAPJVX : 1689.7199 ms | ✅ | 🥈x3 🥉x5 🚩x1
3. LAPX LAPJV : 1706.7731 ms | ✅ | 🥇x3 🥈x2 🚩x3 🏳️x1
4. BASELINE SciPy : 2125.9788 ms | ⭐ | 🥇x1 🥉x1 🚩x2 🏳️x2 🥴x3
5. LAPX LAPJVC : 3709.7903 ms | ✅ | 🥇x1 🥈x1 🚩x1 🏳️x5 🥴x1
6. LAPX LAPJV-IFT : 6122.9942 ms | ⚠️ | 🥇x2 🚩x1 🏳️x1 🥴x5
1. LAPX LAPJVS : 1073.9525 ms | ✅ | 🥇x2 🥈x3 🥉x3 🏳️x1
2. LAPX LAPJVX : 1723.0752 ms | ✅ | 🥇x3 🥈x3 🥉x2 🚩x1
3. LAPX LAPJV : 1727.8499 ms | ✅ | 🥇x2 🥈x3 🥉x3 🚩x1
4. BASELINE SciPy : 2626.0008 ms | ⭐ | 🥇x1 🥉x1 🚩x2 🏳️x3 🥴x2
5. LAPX LAPJVC : 4935.7815 ms | ✅ | 🥇x1 🚩x4 🏳️x4
6. LAPX LAPJV-IFT : 7227.5912 ms | ⚠️ | 🚩x1 🏳️x1 🥴x7
🎉 ------------------------------------------------------------------------- 🎉

@@ -751,11 +705,11 @@

-----------------------------------------------------------------------------------------------------------------------
10x10 | 0.000167s 6th | 0.000119s ✓ 5th | 0.000092s ✓ 2nd | 0.000093s ✓ 3rd | 0.000105s ✓ 4th | 0.000085s ✓ 1st
25x20 | 0.000105s 6th | 0.000097s ✓ 3rd | 0.000096s ✓ 2nd | 0.000096s ✓ 1st | 0.000102s ✓ 5th | 0.000099s ✓ 4th
50x50 | 0.000192s 5th | 0.000158s ✓ 3rd | 0.000142s ✓ 1st | 0.000150s ✓ 2nd | 0.000171s ✓ 4th | 0.000193s ✓ 6th
100x150 | 0.000319s 4th | 0.001089s ✓ 6th | 0.000302s ✓ 3rd | 0.000268s ✓ 1st | 0.001078s ✓ 5th | 0.000271s ✓ 2nd
250x250 | 0.001877s 6th | 0.001662s ✓ 4th | 0.000832s ✓ 2nd | 0.000866s ✓ 3rd | 0.001686s ✓ 5th | 0.000810s ✓ 1st
550x500 | 0.004962s 1st | 0.173261s ✓ 6th | 0.010107s ✓ 4th | 0.010075s ✓ 3rd | 0.021147s ✓ 5th | 0.009892s ✓ 2nd
1000x1000 | 0.034665s 5th | 0.050879s ✓ 6th | 0.024332s ✓ 3rd | 0.023485s ✓ 2nd | 0.030950s ✓ 4th | 0.021152s ✓ 1st
2000x2500 | 0.050928s 4th | 2.503577s ✓ 6th | 0.017477s ✓ 1st | 0.019962s ✓ 2nd | 2.087273s ✓ 5th | 0.027349s ✓ 3rd
5000x5000 | 2.111693s 5th | 3.396578s ✓ 6th | 1.693776s ✓ 4th | 1.685035s ✓ 3rd | 1.567221s ✓ 2nd | 1.058214s ✓ 1st
10x10 | 0.000218s 6th | 0.000129s ✓ 1st | 0.000131s ✓ 3rd | 0.000154s ✓ 5th | 0.000139s ✓ 4th | 0.000131s ✓ 2nd
25x20 | 0.000150s 1st | 0.000178s ✓ 6th | 0.000151s ✓ 2nd | 0.000158s ✓ 4th | 0.000163s ✓ 5th | 0.000155s ✓ 3rd
50x50 | 0.000211s 5th | 0.000194s ✓ 3rd | 0.000283s ✓ 6th | 0.000180s ✓ 1st | 0.000194s ✓ 2nd | 0.000197s ✓ 4th
100x150 | 0.000404s 4th | 0.001266s ✓ 6th | 0.000344s ✓ 3rd | 0.000318s ✓ 1st | 0.000955s ✓ 5th | 0.000341s ✓ 2nd
250x250 | 0.002778s 6th | 0.002573s ✓ 5th | 0.001292s ✓ 2nd | 0.001324s ✓ 3rd | 0.001683s ✓ 4th | 0.001267s ✓ 1st
550x500 | 0.007734s 1st | 0.238647s ✓ 6th | 0.012039s ✓ 4th | 0.011927s ✓ 3rd | 0.040219s ✓ 5th | 0.011922s ✓ 2nd
1000x1000 | 0.046291s 5th | 0.075969s ✓ 6th | 0.036951s ✓ 2nd | 0.037461s ✓ 3rd | 0.039884s ✓ 4th | 0.020911s ✓ 1st
2000x2500 | 0.076470s 4th | 3.556511s ✓ 6th | 0.020127s ✓ 1st | 0.020713s ✓ 2nd | 2.866433s ✓ 5th | 0.023518s ✓ 3rd
5000x5000 | 2.853023s 5th | 2.870481s ✓ 6th | 1.372504s ✓ 3rd | 1.367633s ✓ 2nd | 1.949158s ✓ 4th | 1.205538s ✓ 1st
-----------------------------------------------------------------------------------------------------------------------

@@ -766,8 +720,8 @@

🎉 --------------------------- OVERALL RANKING --------------------------- 🎉
1. LAPX LAPJVS : 1118.0646 ms | ✅ | 🥇x4 🥈x2 🥉x1 🚩x1 🥴x1
2. LAPX LAPJVX : 1740.0298 ms | ✅ | 🥇x2 🥈x3 🥉x4
3. LAPX LAPJV : 1747.1555 ms | ✅ | 🥇x2 🥈x3 🥉x2 🚩x2
4. BASELINE SciPy : 2204.9078 ms | ⭐ | 🥇x1 🚩x2 🏳️x3 🥴x3
5. LAPX LAPJVC : 3709.7338 ms | ✅ | 🥈x1 🚩x3 🏳️x5
6. LAPX LAPJV-IFT : 6127.4199 ms | ✅ | 🥉x2 🚩x1 🏳️x1 🥴x5
1. LAPX LAPJVS : 1263.9814 ms | ✅ | 🥇x3 🥈x3 🥉x2 🚩x1
2. LAPX LAPJVX : 1439.8675 ms | ✅ | 🥇x2 🥈x2 🥉x3 🚩x1 🏳️x1
3. LAPX LAPJV : 1443.8227 ms | ✅ | 🥇x1 🥈x3 🥉x3 🚩x1 🥴x1
4. BASELINE SciPy : 2987.2792 ms | ⭐ | 🥇x2 🚩x2 🏳️x3 🥴x2
5. LAPX LAPJVC : 4898.8268 ms | ✅ | 🥈x1 🚩x4 🏳️x4
6. LAPX LAPJV-IFT : 6745.9482 ms | ✅ | 🥇x1 🥉x1 🏳️x1 🥴x6
🎉 ------------------------------------------------------------------------- 🎉

@@ -783,11 +737,11 @@

-----------------------------------------------------------------------------------------------------------------------
10x10 | 0.000168s 6th | 0.000087s ✓ 1st | 0.000090s ✓ 2nd | 0.000118s ✓ 5th | 0.000104s ✓ 4th | 0.000092s ✓ 3rd
25x20 | 0.000102s 4th | 0.000113s ✓ 6th | 0.000099s ✓ 1st | 0.000099s ✓ 2nd | 0.000107s ✓ 5th | 0.000099s ✓ 3rd
50x50 | 0.000181s 4th | 0.000226s ✓ 6th | 0.000154s ✓ 1st | 0.000162s ✓ 2nd | 0.000164s ✓ 3rd | 0.000210s ✓ 5th
100x150 | 0.000321s 4th | 0.001070s ✓ 5th | 0.000267s ✓ 2nd | 0.000265s ✓ 1st | 0.001108s ✓ 6th | 0.000267s ✓ 3rd
250x250 | 0.001731s 4th | 0.003008s ✓ 6th | 0.001673s ✓ 3rd | 0.001625s ✓ 2nd | 0.001995s ✓ 5th | 0.001460s ✓ 1st
550x500 | 0.004940s 1st | 0.168662s ✓ 6th | 0.009288s ✓ 4th | 0.009245s ✓ 3rd | 0.030654s ✓ 5th | 0.009174s ✓ 2nd
1000x1000 | 0.034701s 5th | 0.051617s ✓ 6th | 0.024396s ✓ 3rd | 0.023235s ✓ 2nd | 0.033910s ✓ 4th | 0.021512s ✓ 1st
2000x2500 | 0.050450s 4th | 2.519313s ✓ 6th | 0.017596s ✓ 1st | 0.018210s ✓ 2nd | 2.104154s ✓ 5th | 0.027215s ✓ 3rd
5000x5000 | 2.027199s 5th | 3.501020s ✓ 6th | 1.753403s ✓ 4th | 1.732642s ✓ 3rd | 1.517909s ✓ 2nd | 0.815372s ✓ 1st
10x10 | 0.000233s 6th | 0.000127s ✓ 1st | 0.000158s ✓ 5th | 0.000128s ✓ 2nd | 0.000142s ✓ 4th | 0.000129s ✓ 3rd
25x20 | 0.000144s 1st | 0.000165s ✓ 5th | 0.000172s ✓ 6th | 0.000159s ✓ 4th | 0.000155s ✓ 3rd | 0.000148s ✓ 2nd
50x50 | 0.000269s 6th | 0.000203s ✓ 3rd | 0.000184s ✓ 1st | 0.000191s ✓ 2nd | 0.000223s ✓ 4th | 0.000254s ✓ 5th
100x150 | 0.000417s 4th | 0.001233s ✓ 6th | 0.000308s ✓ 1st | 0.000356s ✓ 3rd | 0.001072s ✓ 5th | 0.000326s ✓ 2nd
250x250 | 0.002866s 5th | 0.003220s ✓ 6th | 0.001664s ✓ 1st | 0.001702s ✓ 3rd | 0.002252s ✓ 4th | 0.001676s ✓ 2nd
550x500 | 0.008314s 1st | 0.249585s ✓ 6th | 0.011429s ✓ 2nd | 0.011442s ✓ 3rd | 0.030332s ✓ 5th | 0.011470s ✓ 4th
1000x1000 | 0.046902s 5th | 0.080581s ✓ 6th | 0.039630s ✓ 2nd | 0.039960s ✓ 3rd | 0.045573s ✓ 4th | 0.038703s ✓ 1st
2000x2500 | 0.074322s 4th | 3.490300s ✓ 6th | 0.020954s ✓ 1st | 0.021199s ✓ 2nd | 2.761126s ✓ 5th | 0.024095s ✓ 3rd
5000x5000 | 2.614220s 5th | 4.553976s ✓ 6th | 2.238387s ✓ 3rd | 2.240301s ✓ 4th | 1.912648s ✓ 2nd | 1.146587s ✓ 1st
-----------------------------------------------------------------------------------------------------------------------

@@ -798,8 +752,8 @@

🎉 --------------------------- OVERALL RANKING --------------------------- 🎉
1. LAPX LAPJVS : 875.4009 ms | ✅ | 🥇x3 🥈x1 🥉x4 🏳️x1
2. LAPX LAPJVX : 1785.6020 ms | ✅ | 🥇x1 🥈x5 🥉x2 🏳️x1
3. LAPX LAPJV : 1806.9635 ms | ✅ | 🥇x3 🥈x2 🥉x2 🚩x2
4. BASELINE SciPy : 2119.7929 ms | ⭐ | 🥇x1 🚩x5 🏳️x2 🥴x1
5. LAPX LAPJVC : 3690.1060 ms | ✅ | 🥈x1 🥉x1 🚩x2 🏳️x4 🥴x1
6. LAPX LAPJV-IFT : 6245.1169 ms | ✅ | 🥇x1 🏳️x1 🥴x7
1. LAPX LAPJVS : 1223.3865 ms | ✅ | 🥇x2 🥈x3 🥉x2 🚩x1 🏳️x1
2. LAPX LAPJV : 2312.8874 ms | ✅ | 🥇x4 🥈x2 🥉x1 🏳️x1 🥴x1
3. LAPX LAPJVX : 2315.4386 ms | ✅ | 🥈x3 🥉x4 🚩x2
4. BASELINE SciPy : 2747.6856 ms | ⭐ | 🥇x2 🚩x2 🏳️x3 🥴x2
5. LAPX LAPJVC : 4753.5226 ms | ✅ | 🥈x1 🥉x1 🚩x4 🏳️x3
6. LAPX LAPJV-IFT : 8379.3885 ms | ✅ | 🥇x1 🥉x1 🏳️x1 🥴x6
🎉 ------------------------------------------------------------------------- 🎉

@@ -815,11 +769,11 @@

-----------------------------------------------------------------------------------------------------------------------
10x10 | 0.000170s 6th | 0.000079s ✓ 1st | 0.000092s ✓ 4th | 0.000085s ✓ 3rd | 0.000108s ✓ 5th | 0.000084s ✓ 2nd
25x20 | 0.000120s 5th | 0.000144s ✓ 6th | 0.000101s ✓ 1st | 0.000102s ✓ 3rd | 0.000116s ✓ 4th | 0.000101s ✓ 2nd
50x50 | 0.000185s 6th | 0.000139s ✓ 4th | 0.000127s ✓ 1st | 0.000135s ✓ 3rd | 0.000158s ✓ 5th | 0.000135s ✓ 2nd
100x150 | 0.000337s 4th | 0.001089s ✓ 6th | 0.000264s ✓ 1st | 0.000296s ✓ 3rd | 0.001083s ✓ 5th | 0.000276s ✓ 2nd
250x250 | 0.001832s 6th | 0.001699s ✓ 5th | 0.000847s ✓ 2nd | 0.000866s ✓ 3rd | 0.001471s ✓ 4th | 0.000813s ✓ 1st
550x500 | 0.005429s 1st | 0.175252s ✓ 6th | 0.010315s ✓ 4th | 0.010249s ✓ 2nd | 0.032756s ✓ 5th | 0.010292s ✓ 3rd
1000x1000 | 0.040797s 5th | 0.052160s ✓ 6th | 0.025452s ✓ 3rd | 0.024602s ✓ 2nd | 0.036510s ✓ 4th | 0.021898s ✓ 1st
2000x2500 | 0.048694s 4th | 2.440901s ✓ 6th | 0.016812s ✓ 1st | 0.018195s ✓ 2nd | 2.064631s ✓ 5th | 0.028164s ✓ 3rd
5000x5000 | 2.152508s 5th | 3.529325s ✓ 6th | 1.664839s ✓ 4th | 1.645120s ✓ 3rd | 1.626812s ✓ 2nd | 0.897383s ✓ 1st
10x10 | 0.000210s 6th | 0.000136s ✓ 4th | 0.000133s ✓ 3rd | 0.000127s ✓ 1st | 0.000142s ✓ 5th | 0.000131s ✓ 2nd
25x20 | 0.000150s 3rd | 0.000203s ✓ 6th | 0.000145s ✓ 1st | 0.000148s ✓ 2nd | 0.000152s ✓ 4th | 0.000178s ✓ 5th
50x50 | 0.000243s 6th | 0.000239s ✓ 5th | 0.000194s ✓ 1st | 0.000201s ✓ 2nd | 0.000233s ✓ 4th | 0.000203s ✓ 3rd
100x150 | 0.000426s 4th | 0.001229s ✓ 6th | 0.000335s ✓ 3rd | 0.000329s ✓ 2nd | 0.001090s ✓ 5th | 0.000311s ✓ 1st
250x250 | 0.002309s 6th | 0.002270s ✓ 5th | 0.001100s ✓ 1st | 0.001198s ✓ 3rd | 0.001776s ✓ 4th | 0.001157s ✓ 2nd
550x500 | 0.007958s 1st | 0.236500s ✓ 6th | 0.012768s ✓ 3rd | 0.012651s ✓ 2nd | 0.039369s ✓ 5th | 0.012789s ✓ 4th
1000x1000 | 0.047147s 5th | 0.089055s ✓ 6th | 0.044446s ✓ 4th | 0.044309s ✓ 3rd | 0.043942s ✓ 2nd | 0.043357s ✓ 1st
2000x2500 | 0.078020s 4th | 3.430561s ✓ 6th | 0.021284s ✓ 1st | 0.021622s ✓ 2nd | 2.844436s ✓ 5th | 0.024936s ✓ 3rd
5000x5000 | 2.490763s 5th | 4.480608s ✓ 6th | 2.195783s ✓ 3rd | 2.198696s ✓ 4th | 2.009281s ✓ 2nd | 1.052344s ✓ 1st
-----------------------------------------------------------------------------------------------------------------------

@@ -830,11 +784,13 @@

🎉 --------------------------- OVERALL RANKING --------------------------- 🎉
1. LAPX LAPJVS : 959.1463 ms | ✅ | 🥇x3 🥈x4 🥉x2
2. LAPX LAPJVX : 1699.6506 ms | ✅ | 🥈x3 🥉x6
3. LAPX LAPJV : 1718.8494 ms | ✅ | 🥇x4 🥈x1 🥉x1 🚩x3
4. BASELINE SciPy : 2250.0724 ms | ⭐ | 🥇x1 🚩x2 🏳️x3 🥴x3
5. LAPX LAPJVC : 3763.6443 ms | ✅ | 🥈x1 🚩x3 🏳️x5
6. LAPX LAPJV-IFT : 6200.7878 ms | ✅ | 🥇x1 🚩x1 🏳️x1 🥴x6
1. LAPX LAPJVS : 1135.4053 ms | ✅ | 🥇x3 🥈x2 🥉x2 🚩x1 🏳️x1
2. LAPX LAPJV : 2276.1874 ms | ✅ | 🥇x4 🥉x4 🚩x1
3. LAPX LAPJVX : 2279.2815 ms | ✅ | 🥇x1 🥈x5 🥉x2 🚩x1
4. BASELINE SciPy : 2627.2261 ms | ⭐ | 🥇x1 🥉x1 🚩x2 🏳️x2 🥴x3
5. LAPX LAPJVC : 4940.4219 ms | ✅ | 🥈x2 🚩x3 🏳️x4
6. LAPX LAPJV-IFT : 8240.8002 ms | ✅ | 🚩x1 🏳️x2 🥴x6
🎉 ------------------------------------------------------------------------- 🎉
```
👁️ See more results on various platforms and architectures [here](https://github.com/rathaROG/lapx/actions/runs/18830580672).
</details>

@@ -59,3 +59,3 @@ # Copyright (c) 2025 Ratha SIV | MIT License

__version__ = '0.8.0'
__version__ = '0.8.1'

@@ -62,0 +62,0 @@ # Single-matrix solvers

@@ -8,3 +8,2 @@ # Copyright (c) 2025 Ratha SIV | MIT License

# We build batch on top of the stable single-instance API (releases GIL inside)
from .lapjvs import lapjvs as _lapjvs_single

@@ -182,1 +181,2 @@ from .lapjvs import lapjvsa as _lapjvsa_single

return pairs_list
# Copyright (c) 2025 Ratha SIV | MIT License
import numpy as np
from typing import Optional, Tuple
from typing import Optional, Tuple, Union

@@ -18,3 +18,6 @@ from ._lapjvs import lapjvs_native as _lapjvs_native

prefer_float32: bool = True,
):
) -> Union[
Tuple[float, np.ndarray, np.ndarray],
Tuple[np.ndarray, np.ndarray]
]:
"""

@@ -154,3 +157,6 @@ Solve the Linear Assignment Problem using the 'lapjvs' algorithm.

prefer_float32: bool = True,
):
) -> Union[
Tuple[float, np.ndarray],
np.ndarray
]:
"""

@@ -157,0 +163,0 @@ Solve LAP using the 'lapjvs' algorithm (pairs API).

# Copyright (c) 2025 Ratha SIV | MIT License
import os

@@ -117,1 +118,2 @@ import numpy as np

return pairs_list
Metadata-Version: 2.4
Name: lapx
Version: 0.8.0
Version: 0.8.1
Summary: Linear assignment problem solvers, including single and batch solvers.

@@ -9,3 +9,3 @@ Home-page: https://github.com/rathaROG/lapx

License: MIT
Keywords: Linear Assignment Problem Solver,LAP solver,Jonker-Volgenant Algorithm,LAPJV,LAPMOD,lap,lapx,lapjvx,lapjvxa,lapjvc,lapjvs,lapjvsalapjvx_batch,lapjvxa_batch,lapjvs_batch,lapjvsa_batch
Keywords: Linear Assignment Problem Solver,LAP solver,Jonker-Volgenant Algorithm,LAPJV,LAPMOD,lap,lapx,lapjvx,lapjvxa,lapjvc,lapjvs,lapjvsa,lapjvx_batch,lapjvxa_batch,lapjvs_batch,lapjvsa_batch
Classifier: Development Status :: 4 - Beta

@@ -55,7 +55,7 @@ Classifier: Environment :: Console

- 2025/10/27: [v0.8.0](https://github.com/rathaROG/lapx/releases/tag/v0.8.0) introduced **`lapjvsa()`**, **`lapjvx_batch()`**, **`lapjvxa_batch()`**, **`lapjvs_batch()`** and **`lapjvsa_batch()`**.
- 2025/10/21: [v0.7.0](https://github.com/rathaROG/lapx/releases/tag/v0.7.0) introduced **`lapjvs()`**.
- 2025/10/16: [v0.6.0](https://github.com/rathaROG/lapx/releases/tag/v0.6.0) introduced **`lapjvx()`**, **`lapjvxa()`**, and **`lapjvc()`**.
- 2025/10/27: [v0.8.0](https://github.com/rathaROG/lapx/releases/tag/v0.8.0) added **`lapjvx_batch()`**, **`lapjvxa_batch()`**, **`lapjvs_batch()`**, **`lapjvsa_batch()`** and **`lapjvsa()`**.
- 2025/10/21: [v0.7.0](https://github.com/rathaROG/lapx/releases/tag/v0.7.0) added **`lapjvs()`**.
- 2025/10/16: [v0.6.0](https://github.com/rathaROG/lapx/releases/tag/v0.6.0) added **`lapjvx()`**, **`lapjvxa()`**, and **`lapjvc()`**.
- 2025/10/15: [v0.5.13](https://github.com/rathaROG/lapx/releases/tag/v0.5.13) added Python 3.14 support.
- 2024/12/01: The original [`lap`](https://github.com/gatagat/lap) and [`lapx`](https://github.com/rathaROG/lapx) have been merged.
- Looking for more? See [GitHub releases](https://github.com/rathaROG/lapx/releases).

@@ -66,2 +66,3 @@ </details>

[![GitHub release](https://img.shields.io/github/release/rathaROG/lapx.svg)](https://github.com/rathaROG/lapx/releases)
[![Test Simple](https://github.com/rathaROG/lapx/actions/workflows/test_simple.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/test_simple.yaml)

@@ -74,3 +75,3 @@ [![Benchmark](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml)

[`lapx`](https://github.com/rathaROG/lapx) supports all Single ✓ Batch ✓ Square ✓ Rectangular ✓ .
[`lapx`](https://github.com/rathaROG/lapx) supports all input cost types — Single ✓ Batch ✓ Square ✓ Rectangular ✓ .

@@ -93,2 +94,3 @@ `lapx` was initially created to maintain Tomas Kazmar's [`lap`](https://github.com/gatagat/lap) — a ***Jonker-Volgenant*** solver, but has since evolved to offer much more -> See the [usage section](https://github.com/rathaROG/lapx#-usage) for details on all available solver functions.

[![Wheels](https://img.shields.io/pypi/wheel/lapx)](https://pypi.org/project/lapx/)
[![PyPI version](https://badge.fury.io/py/lapx.svg)](https://badge.fury.io/py/lapx)

@@ -102,7 +104,9 @@ [![Downloads](https://static.pepy.tech/badge/lapx)](https://pepy.tech/project/lapx)

| **Pre-built Wheels** 🛞 | **Windows** ✅ | **Linux** ✅ | **macOS** ✅ |
<details><summary>🛞 Pre-built wheel support</summary>
| Python | **Windows** ✅ | **Linux** ✅ | **macOS** ✅ |
|:---:|:---:|:---:|:---:|
| Python 3.7 | AMD64 | x86_64/aarch64 | x86_64 |
| Python 3.8 | AMD64 | x86_64/aarch64 | x86_64/arm64 |
| Python 3.9-3.14 ¹ | AMD64/ARM64 ² | x86_64/aarch64 | x86_64/arm64 |
| 3.7 | AMD64 | x86_64/aarch64 | x86_64 |
| 3.8 | AMD64 | x86_64/aarch64 | x86_64/arm64 |
| 3.9-3.14 ¹ | AMD64/ARM64 ² | x86_64/aarch64 | x86_64/arm64 |

@@ -112,6 +116,7 @@ <sup>¹ ⚠️ Pre-built wheels for Python 3.13+ do not support free-threading. </sup><br>

</details>
<details><summary>Other options</summary>
<details><summary>🛠️ Other installation options</summary>
### Install from GitHub repo (Require C++ compiler):
### Install from GitHub repo (Requires C++ compiler):

@@ -122,3 +127,3 @@ ```

### Build and install (Require C++ compiler):
### Build and install (Requires C++ compiler):

@@ -149,3 +154,5 @@ ```

total_cost, x, y = lap.lapjv(np.random.rand(100, 150), extend_cost=True, return_cost=True)
assignments = np.array([[y[i],i] for i in x if i >= 0])
valid = x >= 0
assignments = np.column_stack((np.arange(len(x))[valid], x[valid]))
# assignments = np.array([[y[i],i] for i in x if i >= 0]) # slower
```

@@ -193,3 +200,3 @@

total_cost, row_indices, col_indices = lap.lapjvx(np.random.rand(100, 150), extend_cost=True, return_cost=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -223,3 +230,3 @@

total_cost, row_indices, col_indices = lap.lapjvc(np.random.rand(100, 150), return_cost=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -240,3 +247,3 @@

total_cost, row_indices, col_indices = lap.lapjvs(np.random.rand(100, 150), return_cost=True, jvx_like=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -370,2 +377,3 @@

Please refer to [NOTICE](https://github.com/rathaROG/lapx/blob/main/NOTICE) & [LICENSE](https://github.com/rathaROG/lapx/blob/main/LICENSE).
[![NOTICE](https://img.shields.io/badge/NOTICE-present-blue)](https://github.com/rathaROG/lapx/blob/main/NOTICE)
[![License](https://img.shields.io/pypi/l/lapx.svg)](https://github.com/rathaROG/lapx/blob/main/LICENSE)
+27
-19
Metadata-Version: 2.4
Name: lapx
Version: 0.8.0
Version: 0.8.1
Summary: Linear assignment problem solvers, including single and batch solvers.

@@ -9,3 +9,3 @@ Home-page: https://github.com/rathaROG/lapx

License: MIT
Keywords: Linear Assignment Problem Solver,LAP solver,Jonker-Volgenant Algorithm,LAPJV,LAPMOD,lap,lapx,lapjvx,lapjvxa,lapjvc,lapjvs,lapjvsalapjvx_batch,lapjvxa_batch,lapjvs_batch,lapjvsa_batch
Keywords: Linear Assignment Problem Solver,LAP solver,Jonker-Volgenant Algorithm,LAPJV,LAPMOD,lap,lapx,lapjvx,lapjvxa,lapjvc,lapjvs,lapjvsa,lapjvx_batch,lapjvxa_batch,lapjvs_batch,lapjvsa_batch
Classifier: Development Status :: 4 - Beta

@@ -55,7 +55,7 @@ Classifier: Environment :: Console

- 2025/10/27: [v0.8.0](https://github.com/rathaROG/lapx/releases/tag/v0.8.0) introduced **`lapjvsa()`**, **`lapjvx_batch()`**, **`lapjvxa_batch()`**, **`lapjvs_batch()`** and **`lapjvsa_batch()`**.
- 2025/10/21: [v0.7.0](https://github.com/rathaROG/lapx/releases/tag/v0.7.0) introduced **`lapjvs()`**.
- 2025/10/16: [v0.6.0](https://github.com/rathaROG/lapx/releases/tag/v0.6.0) introduced **`lapjvx()`**, **`lapjvxa()`**, and **`lapjvc()`**.
- 2025/10/27: [v0.8.0](https://github.com/rathaROG/lapx/releases/tag/v0.8.0) added **`lapjvx_batch()`**, **`lapjvxa_batch()`**, **`lapjvs_batch()`**, **`lapjvsa_batch()`** and **`lapjvsa()`**.
- 2025/10/21: [v0.7.0](https://github.com/rathaROG/lapx/releases/tag/v0.7.0) added **`lapjvs()`**.
- 2025/10/16: [v0.6.0](https://github.com/rathaROG/lapx/releases/tag/v0.6.0) added **`lapjvx()`**, **`lapjvxa()`**, and **`lapjvc()`**.
- 2025/10/15: [v0.5.13](https://github.com/rathaROG/lapx/releases/tag/v0.5.13) added Python 3.14 support.
- 2024/12/01: The original [`lap`](https://github.com/gatagat/lap) and [`lapx`](https://github.com/rathaROG/lapx) have been merged.
- Looking for more? See [GitHub releases](https://github.com/rathaROG/lapx/releases).

@@ -66,2 +66,3 @@ </details>

[![GitHub release](https://img.shields.io/github/release/rathaROG/lapx.svg)](https://github.com/rathaROG/lapx/releases)
[![Test Simple](https://github.com/rathaROG/lapx/actions/workflows/test_simple.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/test_simple.yaml)

@@ -74,3 +75,3 @@ [![Benchmark](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml)

[`lapx`](https://github.com/rathaROG/lapx) supports all Single ✓ Batch ✓ Square ✓ Rectangular ✓ .
[`lapx`](https://github.com/rathaROG/lapx) supports all input cost types — Single ✓ Batch ✓ Square ✓ Rectangular ✓ .

@@ -93,2 +94,3 @@ `lapx` was initially created to maintain Tomas Kazmar's [`lap`](https://github.com/gatagat/lap) — a ***Jonker-Volgenant*** solver, but has since evolved to offer much more -> See the [usage section](https://github.com/rathaROG/lapx#-usage) for details on all available solver functions.

[![Wheels](https://img.shields.io/pypi/wheel/lapx)](https://pypi.org/project/lapx/)
[![PyPI version](https://badge.fury.io/py/lapx.svg)](https://badge.fury.io/py/lapx)

@@ -102,7 +104,9 @@ [![Downloads](https://static.pepy.tech/badge/lapx)](https://pepy.tech/project/lapx)

| **Pre-built Wheels** 🛞 | **Windows** ✅ | **Linux** ✅ | **macOS** ✅ |
<details><summary>🛞 Pre-built wheel support</summary>
| Python | **Windows** ✅ | **Linux** ✅ | **macOS** ✅ |
|:---:|:---:|:---:|:---:|
| Python 3.7 | AMD64 | x86_64/aarch64 | x86_64 |
| Python 3.8 | AMD64 | x86_64/aarch64 | x86_64/arm64 |
| Python 3.9-3.14 ¹ | AMD64/ARM64 ² | x86_64/aarch64 | x86_64/arm64 |
| 3.7 | AMD64 | x86_64/aarch64 | x86_64 |
| 3.8 | AMD64 | x86_64/aarch64 | x86_64/arm64 |
| 3.9-3.14 ¹ | AMD64/ARM64 ² | x86_64/aarch64 | x86_64/arm64 |

@@ -112,6 +116,7 @@ <sup>¹ ⚠️ Pre-built wheels for Python 3.13+ do not support free-threading. </sup><br>

</details>
<details><summary>Other options</summary>
<details><summary>🛠️ Other installation options</summary>
### Install from GitHub repo (Require C++ compiler):
### Install from GitHub repo (Requires C++ compiler):

@@ -122,3 +127,3 @@ ```

### Build and install (Require C++ compiler):
### Build and install (Requires C++ compiler):

@@ -149,3 +154,5 @@ ```

total_cost, x, y = lap.lapjv(np.random.rand(100, 150), extend_cost=True, return_cost=True)
assignments = np.array([[y[i],i] for i in x if i >= 0])
valid = x >= 0
assignments = np.column_stack((np.arange(len(x))[valid], x[valid]))
# assignments = np.array([[y[i],i] for i in x if i >= 0]) # slower
```

@@ -193,3 +200,3 @@

total_cost, row_indices, col_indices = lap.lapjvx(np.random.rand(100, 150), extend_cost=True, return_cost=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -223,3 +230,3 @@

total_cost, row_indices, col_indices = lap.lapjvc(np.random.rand(100, 150), return_cost=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -240,3 +247,3 @@

total_cost, row_indices, col_indices = lap.lapjvs(np.random.rand(100, 150), return_cost=True, jvx_like=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -370,2 +377,3 @@

Please refer to [NOTICE](https://github.com/rathaROG/lapx/blob/main/NOTICE) & [LICENSE](https://github.com/rathaROG/lapx/blob/main/LICENSE).
[![NOTICE](https://img.shields.io/badge/NOTICE-present-blue)](https://github.com/rathaROG/lapx/blob/main/NOTICE)
[![License](https://img.shields.io/pypi/l/lapx.svg)](https://github.com/rathaROG/lapx/blob/main/LICENSE)
+25
-17
<details><summary>🆕 What's new</summary><br>
- 2025/10/27: [v0.8.0](https://github.com/rathaROG/lapx/releases/tag/v0.8.0) introduced **`lapjvsa()`**, **`lapjvx_batch()`**, **`lapjvxa_batch()`**, **`lapjvs_batch()`** and **`lapjvsa_batch()`**.
- 2025/10/21: [v0.7.0](https://github.com/rathaROG/lapx/releases/tag/v0.7.0) introduced **`lapjvs()`**.
- 2025/10/16: [v0.6.0](https://github.com/rathaROG/lapx/releases/tag/v0.6.0) introduced **`lapjvx()`**, **`lapjvxa()`**, and **`lapjvc()`**.
- 2025/10/27: [v0.8.0](https://github.com/rathaROG/lapx/releases/tag/v0.8.0) added **`lapjvx_batch()`**, **`lapjvxa_batch()`**, **`lapjvs_batch()`**, **`lapjvsa_batch()`** and **`lapjvsa()`**.
- 2025/10/21: [v0.7.0](https://github.com/rathaROG/lapx/releases/tag/v0.7.0) added **`lapjvs()`**.
- 2025/10/16: [v0.6.0](https://github.com/rathaROG/lapx/releases/tag/v0.6.0) added **`lapjvx()`**, **`lapjvxa()`**, and **`lapjvc()`**.
- 2025/10/15: [v0.5.13](https://github.com/rathaROG/lapx/releases/tag/v0.5.13) added Python 3.14 support.
- 2024/12/01: The original [`lap`](https://github.com/gatagat/lap) and [`lapx`](https://github.com/rathaROG/lapx) have been merged.
- Looking for more? See [GitHub releases](https://github.com/rathaROG/lapx/releases).

@@ -13,2 +13,3 @@ </details>

[![GitHub release](https://img.shields.io/github/release/rathaROG/lapx.svg)](https://github.com/rathaROG/lapx/releases)
[![Test Simple](https://github.com/rathaROG/lapx/actions/workflows/test_simple.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/test_simple.yaml)

@@ -21,3 +22,3 @@ [![Benchmark](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml/badge.svg)](https://github.com/rathaROG/lapx/actions/workflows/benchmark.yaml)

[`lapx`](https://github.com/rathaROG/lapx) supports all Single ✓ Batch ✓ Square ✓ Rectangular ✓ .
[`lapx`](https://github.com/rathaROG/lapx) supports all input cost types — Single ✓ Batch ✓ Square ✓ Rectangular ✓ .

@@ -40,2 +41,3 @@ `lapx` was initially created to maintain Tomas Kazmar's [`lap`](https://github.com/gatagat/lap) — a ***Jonker-Volgenant*** solver, but has since evolved to offer much more -> See the [usage section](https://github.com/rathaROG/lapx#-usage) for details on all available solver functions.

[![Wheels](https://img.shields.io/pypi/wheel/lapx)](https://pypi.org/project/lapx/)
[![PyPI version](https://badge.fury.io/py/lapx.svg)](https://badge.fury.io/py/lapx)

@@ -49,7 +51,9 @@ [![Downloads](https://static.pepy.tech/badge/lapx)](https://pepy.tech/project/lapx)

| **Pre-built Wheels** 🛞 | **Windows** ✅ | **Linux** ✅ | **macOS** ✅ |
<details><summary>🛞 Pre-built wheel support</summary>
| Python | **Windows** ✅ | **Linux** ✅ | **macOS** ✅ |
|:---:|:---:|:---:|:---:|
| Python 3.7 | AMD64 | x86_64/aarch64 | x86_64 |
| Python 3.8 | AMD64 | x86_64/aarch64 | x86_64/arm64 |
| Python 3.9-3.14 ¹ | AMD64/ARM64 ² | x86_64/aarch64 | x86_64/arm64 |
| 3.7 | AMD64 | x86_64/aarch64 | x86_64 |
| 3.8 | AMD64 | x86_64/aarch64 | x86_64/arm64 |
| 3.9-3.14 ¹ | AMD64/ARM64 ² | x86_64/aarch64 | x86_64/arm64 |

@@ -59,6 +63,7 @@ <sup>¹ ⚠️ Pre-built wheels for Python 3.13+ do not support free-threading. </sup><br>

</details>
<details><summary>Other options</summary>
<details><summary>🛠️ Other installation options</summary>
### Install from GitHub repo (Require C++ compiler):
### Install from GitHub repo (Requires C++ compiler):

@@ -69,3 +74,3 @@ ```

### Build and install (Require C++ compiler):
### Build and install (Requires C++ compiler):

@@ -96,3 +101,5 @@ ```

total_cost, x, y = lap.lapjv(np.random.rand(100, 150), extend_cost=True, return_cost=True)
assignments = np.array([[y[i],i] for i in x if i >= 0])
valid = x >= 0
assignments = np.column_stack((np.arange(len(x))[valid], x[valid]))
# assignments = np.array([[y[i],i] for i in x if i >= 0]) # slower
```

@@ -140,3 +147,3 @@

total_cost, row_indices, col_indices = lap.lapjvx(np.random.rand(100, 150), extend_cost=True, return_cost=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -170,3 +177,3 @@

total_cost, row_indices, col_indices = lap.lapjvc(np.random.rand(100, 150), return_cost=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -187,3 +194,3 @@

total_cost, row_indices, col_indices = lap.lapjvs(np.random.rand(100, 150), return_cost=True, jvx_like=True)
assignments = np.array(list(zip(row_indices, col_indices)))
assignments = np.column_stack((row_indices, col_indices)) # or np.array(list(zip(row_indices, col_indices)))
```

@@ -317,2 +324,3 @@

Please refer to [NOTICE](https://github.com/rathaROG/lapx/blob/main/NOTICE) & [LICENSE](https://github.com/rathaROG/lapx/blob/main/LICENSE).
[![NOTICE](https://img.shields.io/badge/NOTICE-present-blue)](https://github.com/rathaROG/lapx/blob/main/NOTICE)
[![License](https://img.shields.io/pypi/l/lapx.svg)](https://github.com/rathaROG/lapx/blob/main/LICENSE)

@@ -110,3 +110,3 @@ # Copyright (c) 2025 Ratha SIV | MIT License

'Jonker-Volgenant Algorithm', 'LAPJV', 'LAPMOD', 'lap',
'lapx', 'lapjvx', 'lapjvxa', 'lapjvc', 'lapjvs', 'lapjvsa'
'lapx', 'lapjvx', 'lapjvxa', 'lapjvc', 'lapjvs', 'lapjvsa',
'lapjvx_batch', 'lapjvxa_batch', 'lapjvs_batch', 'lapjvsa_batch'],

@@ -113,0 +113,0 @@ packages=find_packages(include=[PACKAGE_PATH, f"{PACKAGE_PATH}.*"]),

# _lapjvx.pyx | Wrote on 2025/10/16 by rathaROG
# The function lapjvx returns assignments as two parallel arrays
# (row_indices, col_indices), so you can do:
# np.array(list(zip(row_indices, col_indices)))
# just like with scipy.optimize.linear_sum_assignment or lapjvc.
# lapjvx returns assignments as two arrays: (row_indices, col_indices)
# Combine them with:
# assignments = np.column_stack((row_indices, col_indices)) # fast!
# Or:
# assignments = np.array(list(zip(row_indices, col_indices))) # works too
# Same as scipy.optimize.linear_sum_assignment.

@@ -57,9 +59,2 @@ # cython: language_level=3

Indices of assigned columns.
Note
----
The arrays row_indices and col_indices are parallel:
row_indices[i] is assigned to col_indices[i].
You can do: r = np.array(list(zip(row_indices, col_indices)))
just like with scipy.optimize.linear_sum_assignment or lapjvc.
"""

@@ -66,0 +61,0 @@ if cost.ndim != 2:

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display