init. core algorithm, initial testing, basic cli.

This commit is contained in:
Thomas (Tom) C. Gorordo 2026-05-20 11:39:03 -07:00
commit 8836c49091
Signed by: tgorordo
GPG key ID: 0CBED22BB0D94490
12 changed files with 2297 additions and 0 deletions

5
test/test_ballot.csv Normal file
View file

@ -0,0 +1,5 @@
Alice,Bob,Carol
1 ,2 ,3
2 ,1 ,3
1 ,3 ,2
3 ,1 ,2
1 Alice Bob Carol
2 1 2 3
3 2 1 3
4 1 3 2
5 3 1 2

47
test/test_nb.py Normal file
View file

@ -0,0 +1,47 @@
import marimo
__generated_with = "0.23.6"
app = marimo.App(width="medium")
@app.cell
def _():
import marimo as mo
from pathlib import Path
return (mo,)
@app.cell
def _():
import polars as pl
from smithy import smith_set
return pl, smith_set
@app.cell
def _(mo, pl):
df = pl.read_csv(mo.notebook_dir() / "test_ballot.csv")
df = df.with_columns([ pl.col(c) # make safe, clean up
.cast(pl.Utf8)
.str.strip_chars()
.cast(pl.Int64, strict=False).fill_null(df.width + 1)
for c in df.columns ])
df
return (df,)
@app.cell
def _(df, smith_set):
smith_set(df) # find the smith set (should be "Alice" and "Bob" as a pair)
return
@app.cell
def _():
return
if __name__ == "__main__":
app.run()

35
test/test_rcvs.py Normal file
View file

@ -0,0 +1,35 @@
import polars as pl
from smithy import smith_set
def test_condorcet():
df = pl.DataFrame({
'A': [1, 1, 2, 1],
'B': [2, 2, 1, 2],
'C': [3, 3, 3, 3],
})
assert smith_set(df) == ['A']
def test_rockpprscrcycle():
df = pl.DataFrame({
'A': [1, 2, 3],
'B': [2, 3, 1],
'C': [3, 1, 2],
})
assert smith_set(df) == ['A', 'B', 'C']
def test_abpair():
df = pl.DataFrame({
"A": [1, 2, 1, 3],
"B": [2, 1, 3, 1],
"C": [3, 3, 2, 2]
})
assert smith_set(df) == ['A', 'B']
def test_fourcycle():
df = pl.DataFrame({
"A": [1,2,3,4],
"B": [2,3,4,1],
"C": [3,4,1,2],
"D": [4,1,2,3],
})
assert smith_set(df) == ['A', 'B', 'C', 'D']