Skip to main content

🎩 Smooth Criminal

A Python performance acceleration toolkit with the soul of Michael Jackson.

Python License Binder Streamlit


🚀 ¿Qué es esto?

Smooth Criminal es una librería de Python para acelerar funciones y scripts automáticamente usando:

  • 🧠 Numba
  • ⚡ Asyncio y threading
  • 📊 Dashboard visual con Flet
  • 🧪 Benchmarks y profiling
  • 🎶 Estilo, carisma y mensajes inspirados en MJ

💡 Características principales

Decorador / Función Descripción
@smooth Aceleración con Numba (modo sigiloso y rápido)
@vectorized Vectoriza funciones estilo NumPy con fallback
@guvectorized Generaliza ufuncs con fallback seguro
@moonwalk Convierte funciones en corutinas async sin esfuerzo
@thriller Benchmark antes y después (con ritmo)
`@jam(workers=n, backend="thread process
@black_or_white(mode) Optimiza tipos numéricos (float32 vs float64)
@bad Modo de optimización agresiva (fastmath)
@beat_it Fallback automático si algo falla
@mj_mode Aplica un decorador aleatorio con mensaje de MJ
dangerous(func) Mezcla poderosa de decoradores (@bad + @thriller)
@bad_and_dangerous Optimiza, perfila y maneja errores automáticamente
profile_it(func) Estadísticas detalladas de rendimiento
analyze_ast(func) Análisis estático para detectar código optimizable

🧠 Dashboard visual

Ejecuta el panel interactivo para ver métricas de tus funciones decoradas:

python -m smooth_criminal.dashboard

O bien:

python scripts/example_flet_dashboard.py
  • Tabla con tiempos, decoradores y puntuaciones

  • Botones para exportar CSV/JSON/XLSX/MD, limpiar historial o ver gráfico

  • Interfaz elegante con Flet (modo oscuro)

🕺 Animación Moonwalk

Activa el interruptor Moonwalk para ver cómo un ícono de MJ cruza la pantalla y desaparece al finalizar.

Prueba manual:

  1. Ejecuta python -m smooth_criminal.dashboard o python scripts/example_flet_dashboard.py.
  2. Pulsa el interruptor Moonwalk en la fila de botones.
  3. Observa al bailarín deslizarse y liberarse automáticamente.

🎬 Nuevas animaciones

El dashboard incorpora efectos como "Spin" y "Toe Stand" para dar más ritmo a tus métricas. Actívalos desde la línea de comandos:

python -m smooth_criminal.dashboard --animation spin

⚙️ Instalación

pip install smooth-criminal

O para desarrollo local:

git clone https://github.com/Alphonsus411/smooth_criminal.git
cd smooth_criminal
pip install -e .

🛠️ Configuración de entorno

Antes de ejecutar la librería copia el archivo de ejemplo y ajusta las variables:

cp .env.example .env

Dentro de .env puedes definir:

# Ruta donde se guardan las métricas
LOG_PATH=.smooth_criminal_log.json

# Backend de almacenamiento: json (por defecto), sqlite o tinydb
SMOOTH_CRIMINAL_STORAGE=json

Para backend tinydb instala la dependencia opcional tinydb y para exportar a xlsx instala openpyxl.

💃 Ejemplo rápido

from smooth_criminal import smooth, thriller

@thriller
@smooth
def square(n):
    return [i * i for i in range(n)]

print(square(10))

🎷 Paralelismo con jam

from smooth_criminal.core import jam

@jam(workers=4, backend="process")
def cube(x):
    return x ** 3

print(cube([1, 2, 3]))

# También disponible backend="thread" (por defecto) o backend="async"

⏱️ Benchmark de backends con benchmark_jam

from smooth_criminal.benchmark import benchmark_jam, detect_fastest_backend

def cube(x):
    return x ** 3

data = benchmark_jam(cube, [1, 2, 3], ["thread", "process", "async"])
print(data["fastest"])            # backend más veloz

best = detect_fastest_backend(cube, [1, 2, 3], ["thread", "process", "async"])
print(best)

🎲 Decorador aleatorio mj_mode

import random
from smooth_criminal import mj_mode

random.seed(0)

@mj_mode
def identidad(x):
    return x

print(identidad([1, 2, 3]))
# Posible salida: "🥁 Jam session with 4 workers!"

Mensajes posibles:

  • 🕺 Hee-Hee! You're now smooth.
  • 😎 Who's bad? You're bad!
  • 🎬 It's Thriller time!
  • 🥁 Jam session with 4 workers!

🚧 Modo bad_and_dangerous

from smooth_criminal import bad_and_dangerous

def fallback(_):
    return -1

@bad_and_dangerous(fallback=fallback)
def risky(n):
    total = 0
    for i in range(n):
        total += i
    return total

print(risky(5))

🧮 Vectorización segura

import numpy as np
from smooth_criminal import vectorized, guvectorized


@vectorized(["float64(float64)"])
def doble(x):
    return x * 2


@guvectorized(["void(float64[:], float64[:], float64[:])"], "(n),(n)->(n)")
def suma(a, b, res):
    for i in range(a.shape[0]):
        res[i] = a[i] + b[i]


print(doble(np.array([1.0, 2.0])))
print(suma(np.array([1.0, 2.0]), np.array([3.0, 4.0])))

🧪 CLI interactiva

smooth-criminal analyze my_script.py

Esto analizará tu código buscando funciones lentas, bucles, range(), etc.

Para exportar el historial en distintos formatos:

smooth-criminal export history.xlsx --format xlsx
smooth-criminal export history.md --format md
smooth-criminal export history.json --format json

También puedes comparar rápidamente los backends de jam desde la línea de comandos:

smooth-criminal jam-test paquete.modulo:funcion --workers 4 --reps 3

Si prefieres un resultado en JSON sin mensajes adicionales, añade --silent:

smooth-criminal jam-test paquete.modulo:funcion --workers 4 --reps 3 --silent

Esto mostrará una tabla comparativa de tiempos y, al finalizar sin errores, el mensaje especial:

🎶 Just jammin' through those CPU cores! 🧠🕺

🕺 Flag --mj-mode

Activa efectos especiales al detectar mejoras de rendimiento:

smooth-criminal jam-test paquete.modulo:funcion --workers 4 --mj-mode

Cuando el modo está activo y el rendimiento mejora al menos un 10 %, se reproducirá un pequeño efecto de Michael Jackson. Si la dependencia playsound no está disponible, se mostrará un mensaje o GIF/ASCII mediante rich. En ausencia de estas dependencias, solo se emitirá una advertencia.

🌐 API

Lanza una API HTTP para consultar las estadísticas desde otras aplicaciones:

smooth-criminal api --host 127.0.0.1 --port 8000

Después puedes obtener los datos con:

curl http://127.0.0.1:8000/history

🔌 Plugin

El directorio vscode-extension contiene un plugin para VS Code que integra los comandos de Smooth Criminal. Instálalo con:

cd vscode-extension
npm install
npm run build

En VS Code, carga la extensión desde esta carpeta y podrás ejecutar análisis desde el editor.

💾 Backends de almacenamiento

El historial de ejecuciones se guarda usando un backend configurable. Selecciona el backend con la variable de entorno SMOOTH_CRIMINAL_STORAGE:

export SMOOTH_CRIMINAL_STORAGE=sqlite  # json | sqlite | tinydb
smooth-criminal analyze my_script.py

El backend sqlite no requiere extras. Para tinydb instala tinydb y para exportar a xlsx instala openpyxl.

📚 Documentación

Próximamente en ReadTheDocs…

Consulta el changelog para conocer el historial completo de versiones.

📦 Empaquetado

Para crear una distribución local y verificar sus metadatos:

python -m build
twine check dist/*

📝 Licencia

MIT © Adolfo González

Este proyecto incluye bibliotecas de terceros con licencias permisivas, como Flet (Apache 2.0), Numba y NumPy (BSD-3-Clause) o Rich (MIT). Consulta THIRD_PARTY_LICENSES.md para el listado completo.

🙏 Agradecimientos

Colaborador / Tecnología Rol / Licencia
Adolfo González Autor principal
Michael Jackson Inspiración musical
Flet (Apache 2.0) Dashboard visual
Numba (BSD-3-Clause) Aceleración JIT
NumPy (BSD-3-Clause) Operaciones vectoriales
Rich (MIT) Salida de consola

Metadata

Release files for smooth-criminal 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for smooth-criminal 0.8.0
File Size Uploaded Provenance Actions
smooth_criminal-0.8.0.tar.gz 41.7 kB Without provenance Details for smooth_criminal-0.8.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for smooth-criminal 0.8.0
File Interpreter ABI Platform Actions
smooth_criminal-0.8.0-py3-none-any.whl Python 3 none any Details for smooth_criminal-0.8.0-py3-none-any.whl

Total release size: 73.2 kB

Release files / smooth_criminal-0.8.0.tar.gz

Download URL smooth_criminal-0.8.0.tar.gz
Size 41.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d206991eca00cafa0df8d24c4b79e42ab84fd23fbdbe8a3e0265073b6c5efd6d
BLAKE2b-256 checksum
How to use checksums
33948bbcf2820a6ecc5b9685f735a5fc85e51996b9a3ca0ae17a448e802b2f88
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.10

Release files / smooth_criminal-0.8.0-py3-none-any.whl

Download URL smooth_criminal-0.8.0-py3-none-any.whl
Size 31.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
055838cfa4697278fcdf2bbd28cd4f934ffc839c494ac693f655e18548cbedf2
BLAKE2b-256 checksum
How to use checksums
f2683240b48610e71bf8da53b412a326b7961e22c629da4630a196789fcd329b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.10

Security for smooth-criminal 0.8.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page