feat(browser): auto-commit con 178 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-20 18:22:23 +02:00
parent 7d100e7f3e
commit 763e06c127
178 changed files with 19917 additions and 317 deletions
@@ -0,0 +1,60 @@
"""Tests para cramers_v."""
import os
import random
import sys
sys.path.insert(0, os.path.dirname(__file__))
from cramers_v import cramers_v
def test_perfect_association_is_near_one():
a = ["x", "y", "z", "x", "y", "z", "x", "y", "z", "x", "y", "z"]
b = list(a) # b == a -> asociacion perfecta
v = cramers_v(a, b)
assert v > 0.95
assert v <= 1.0
def test_independent_columns_low_value():
rng = random.Random(42)
cats = ["a", "b", "c", "d"]
a = [rng.choice(cats) for _ in range(2000)]
b = [rng.choice(cats) for _ in range(2000)]
v = cramers_v(a, b)
assert 0.0 <= v < 0.5
def test_single_category_returns_zero():
a = ["only"] * 10 # <2 categorias en a
b = ["x", "y", "x", "y", "x", "y", "x", "y", "x", "y"]
assert cramers_v(a, b) == 0.0
def test_fewer_than_two_pairs_returns_zero():
assert cramers_v([], []) == 0.0
assert cramers_v(["a"], ["b"]) == 0.0
def test_none_pairs_are_discarded():
a = ["x", None, "y", "x", None, "y", "x", "y"]
b = ["x", "z", "y", "x", "z", "y", None, "y"]
v = cramers_v(a, b)
assert isinstance(v, float)
assert 0.0 <= v <= 1.0
def test_always_returns_float_never_none():
assert isinstance(cramers_v(["a", "b"], ["a", "b"]), float)
assert isinstance(cramers_v([None], [None]), float)
def test_derived_column_high_association():
rng = random.Random(7)
a = [rng.choice(["red", "green", "blue"]) for _ in range(600)]
# b derivada de a (mapeo deterministico) -> alta asociacion.
mapping = {"red": "hot", "green": "cool", "blue": "cool"}
b = [mapping[x] for x in a]
v = cramers_v(a, b)
assert v > 0.5