ea6678ec23
Añade dos funciones impuras dict-no-throw, deterministas por seed, al dominio datascience (grupo eda): - generate_synthetic_eda_table: una tabla DuckDB de 19 columnas (numéricas correlacionadas + outliers, categóricas desbalanceadas, texto largo multi-idioma es/en/fr, fecha DATE, lat/lon válidas, PII email/iban/phone/uuid, nulos con patrón MCAR/MAR co-ocurrentes). Activa 14 capítulos del motor AutomaticEDA (num_distr, cat_distr, text_distr, calidad, missingness, correlacion, relaciones, modelos, timeseries, geospatial, agregacion, glosario + portada/overview). - generate_synthetic_eda_folder: 3 CSV relacionados (customers/orders/reviews) con FK customer detectable por containment, para el EDA de carpeta multi-tabla. Determinismo via Faker.seed_instance + numpy.default_rng. Tests: 16 passed (incluye determinismo por hash, rangos lat/lon, co-nulos income/spending, mediana palabras review >=20, phone formato internacional, FK containment). Añade faker (40.27.0) a python/pyproject.toml + uv.lock. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
73 lines
1.9 KiB
TOML
73 lines
1.9 KiB
TOML
[project]
|
|
name = "fn-registry-python"
|
|
version = "0.1.0"
|
|
description = "Funciones Python del fn-registry: Metabase API, ML, utilidades"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"chardet>=7.4.3",
|
|
"contextily>=1.7.0",
|
|
"cryptography>=46.0.6",
|
|
"duckdb>=1.5.2",
|
|
"faker>=40.27.0",
|
|
"fpdf2>=2.8.7",
|
|
"geopandas>=1.1.3",
|
|
"google-api-python-client>=2.197.0",
|
|
"google-auth>=2.49.1",
|
|
"google-cloud-bigquery>=3.25",
|
|
"google-cloud-bigquery-datatransfer>=3.22.0",
|
|
"google-cloud-bigquery-storage>=2.27",
|
|
"google-cloud-storage>=3.10.1",
|
|
"httpx",
|
|
"langdetect>=1.0.9",
|
|
"matplotlib>=3.10.9",
|
|
"opencv-contrib-python-headless>=4.13.0.92",
|
|
"openpyxl>=3.1.5",
|
|
"pillow>=12.2.0",
|
|
"polars>=1.40.1",
|
|
"pymeshlab>=2025.7.post1",
|
|
"pymssql>=2.3.13",
|
|
"pymupdf>=1.28.0",
|
|
"pypdf>=6.10.0",
|
|
"pyproj>=3.7.2",
|
|
"python-docx>=1.2.0",
|
|
"python-pptx>=1.0.2",
|
|
"pyyaml>=6.0.3",
|
|
"qrcode[pil]>=8.2",
|
|
"rapidfuzz>=3.14.5",
|
|
"reportlab>=4.5.0",
|
|
"scikit-image>=0.26.0",
|
|
"scikit-learn>=1.8.0",
|
|
"scipy>=1.17.1",
|
|
"seaborn>=0.13.2",
|
|
"shapely>=2.1.2",
|
|
"statsmodels>=0.14.6",
|
|
"textstat>=0.7.13",
|
|
"trimesh>=4.12.2",
|
|
"xlrd>=2.0.2",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
nlp = [
|
|
"gliner>=0.2.13",
|
|
"glirel>=1.0.0",
|
|
]
|
|
jupyter = [
|
|
"jupyterlab>=4.0",
|
|
"jupyter-collaboration>=2.0",
|
|
"jupyter-mcp-server",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest>=9.0.2",
|
|
]
|
|
|
|
[tool.pytest.ini_options]
|
|
# Las funciones del registry importan paquetes por su nombre raiz
|
|
# (p.ej. `from obsidian import format_obsidian_note`), por lo que el
|
|
# directorio `functions/` debe estar en sys.path al recolectar tests.
|
|
# `functions/obsidian` permite a los tests importar los modulos hoja por
|
|
# su nombre directo (p.ej. `from format_obsidian_note import ...`).
|
|
pythonpath = ["functions", "functions/obsidian"]
|