Skip to main content

FastCore

Project description

Entiendo la preferencia. El problema técnico real es que un README con bloques de código adentro, metido dentro de OTRO bloque de código, se rompe visualmente. La solución es no envolver todo en un bloque exterior — solo pego el markdown en texto plano, y los bloques de código internos (```python) sí se van a ver como bloques, pero como parte continua del mismo mensaje, sin cortes ni interrupciones de mi parte:

fastcore

Extensión en C para acelerar loops y estructuras de datos comunes en Python. No es un reemplazo completo de tu flujo de trabajo — es una capa delgada que elimina las partes tediosas y repetitivas (agrupar, deduplicar, aplanar, contar frecuencias) que normalmente reescribes a mano en cada proyecto.

Instalación

pip install fastcore

Uso rápido

import fastcore

fastcore.fast_sum([1, 2, 3]) # 6.0 fastcore.count_freq(["a", "b", "a"]) # {'a': 2, 'b': 1} fastcore.unique([3, 1, 2, 1, 3]) # [3, 1, 2] fastcore.filter_gt([1, 5, 10, 3], 4.0) # [5.0, 10.0] fastcore.groupby(lista_de_dicts, "categoria") # dict agrupado fastcore.flatten([1, [2, [3, 4]], 5]) # [1, 2, 3, 4, 5] fastcore.unique_by(lista_de_dicts, "id") # dedup por campo

Documentación de funciones

fast_sum(lista) — Suma todos los elementos numéricos de una lista. fastcore.fast_sum([1, 2, 3, 4.5]) # 10.5

count_freq(lista) — Cuenta cuántas veces aparece cada elemento. Reemplaza un loop de 4 líneas con dict.get() por una sola llamada. fastcore.count_freq(["a", "b", "a", "c", "b", "a"]) # {'a': 3, 'b': 2, 'c': 1}

unique(lista) — Elimina duplicados manteniendo el orden original. Reemplaza el patrón de set() + loop + append. fastcore.unique([3, 1, 2, 1, 3, 4]) # [3, 1, 2, 4]

filter_gt(lista, umbral) — Devuelve solo los elementos mayores al umbral dado. fastcore.filter_gt([1, 5, 10, 3, 8], 4.0) # [5.0, 10.0, 8.0]

groupby(lista_de_dicts, clave) — Agrupa una lista de diccionarios según el valor de una clave. Reemplaza el patrón de dict + setdefault manual. fastcore.groupby(ventas, "categoria") # {'ropa': [...], 'comida': [...]}

flatten(lista_anidada) — Aplana listas anidadas de cualquier profundidad. Reemplaza una función recursiva escrita a mano. fastcore.flatten([1, [2, 3, [4, [5, 6]], 7], 8]) # [1, 2, 3, 4, 5, 6, 7, 8]

unique_by(lista_de_dicts, clave) — Deduplica diccionarios según el valor de un campo específico, no el objeto completo. fastcore.unique_by(ventas, "id") # lista sin ids repetidos

Ejemplo real combinando varias funciones

Sin fastcore (19 líneas): un loop para deduplicar por id con set() + seen, otro loop para agrupar por categoría con dict + setdefault, y un tercer loop anidado para sumar montos por grupo.

Con fastcore (4 líneas):

ventas_unicas = fastcore.unique_by(ventas, "id") grupos = fastcore.groupby(ventas_unicas, "categoria") totales = {cat: fastcore.fast_sum([i["monto"] for i in items]) for cat, items in grupos.items()}

Ambas versiones dan el mismo resultado: {'ropa': 240.0, 'comida': 30.0, 'tech': 500.0}

Resultados de benchmark

Medido con listas de 200,000 y 2,000,000 de elementos, mejor tiempo de 3 corridas:

Con 200,000 elementos: count_freq 1.40x más rápido, unique 1.32x, groupby 2.60x, unique_by 1.17x, flatten 10.70x, fast_sum 1.12x.

Con 2,000,000 elementos: count_freq 1.38x, unique 1.45x, groupby 1.82x, unique_by 1.37x, flatten 6.28x, fast_sum 1.09x.

flatten tiene la mayor ganancia porque en Python puro depende de recursión con overhead de llamadas a función, que en C es casi gratis. groupby gana bien porque evita el overhead del bytecode en el loop principal. Las funciones que ya dependen de dict/set de Python (count_freq, unique, unique_by, fast_sum) ganan menos, porque esas estructuras ya están optimizadas en C por debajo del intérprete — el beneficio ahí es sobre todo la reducción de líneas de código, no la velocidad.

Licencia

MIT License. Ver el archivo LICENSE para el texto completo.

Estado del proyecto

Versión 0.1.0. Cubre patrones comunes de listas y diccionarios (agrupar, deduplicar, aplanar, contar, filtrar, sumar). No pretende reemplazar NumPy para cómputo numérico ni Pandas para análisis de datos tabulares — está enfocado en el trabajo genérico con listas y diccionarios que esas librerías no cubren directamente.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastcorex-0.1.0.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastcorex-0.1.0-cp314-cp314-android_24_arm64_v8a.whl (15.6 kB view details)

Uploaded Android API level 24+ ARM64 v8aCPython 3.14

File details

Details for the file fastcorex-0.1.0.tar.gz.

File metadata

  • Download URL: fastcorex-0.1.0.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.34.2

File hashes

Hashes for fastcorex-0.1.0.tar.gz
Algorithm Hash digest
SHA256 769571c4819a2a34c130970c077cbdbb97fcb4f6ab32177eb2e8c83ca5597869
MD5 f3713016908aa71dd04d74c3af1676e1
BLAKE2b-256 a7b40e7dddb5c3969760423386e46f0ea02cfb126ae45e933baf02c8c9b1d573

See more details on using hashes here.

File details

Details for the file fastcorex-0.1.0-cp314-cp314-android_24_arm64_v8a.whl.

File metadata

File hashes

Hashes for fastcorex-0.1.0-cp314-cp314-android_24_arm64_v8a.whl
Algorithm Hash digest
SHA256 d9e5ff7354dc325a1087de27c321c4d2c71c6a01dfc5d53b0bd7906a42c27200
MD5 dab625123fad7f644698809f2c95e12a
BLAKE2b-256 ab5eef402af03f3bc4ce0bf692c1d0eebe8de9a373dca3dfafc0fa8f24a706ca

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page