smooth-criminal


Namesmooth-criminal JSON
Version 0.8.0 PyPI version JSON
download
home_pageNone
SummaryDashboard de análisis de rendimiento con decoradores inteligentes
upload_time2025-10-26 18:48:01
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 🎩 Smooth Criminal

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

[![Python](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/Alphonsus411/smooth_criminal/HEAD?urlpath=streamlit/examples/benchmark_streamlit.py)
[![Streamlit](https://static.streamlit.io/badges/streamlit.svg)](https://smooth-criminal-demo.streamlit.app)

---

## 🚀 ¿Qué es esto?

**Smooth Criminal** es una librería de Python para acelerar funciones y scripts automáticamente usando:
- 🧠 [Numba](https://numba.pydata.org/)
- ⚡ Asyncio y threading
- 📊 Dashboard visual con [Flet](https://flet.dev)
- 🧪 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|async")` | Paralelismo con hilos, procesos o asyncio (cola dinámica) |
| `@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:

```bash
python -m smooth_criminal.dashboard
```
O bien:

````bash
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:

```bash
python -m smooth_criminal.dashboard --animation spin
```

## ⚙️ Instalación

````bash
pip install smooth-criminal
````

O para desarrollo local:

````bash
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:

````bash
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

````python
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`

```python
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`

```python
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`

```python
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

````python
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

````python
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

````bash
smooth-criminal analyze my_script.py
````

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

Para exportar el historial en distintos formatos:

````bash
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:

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

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

````bash
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:

```bash
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:

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

Después puedes obtener los datos con:

```bash
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:

```bash
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`:

````bash
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](CHANGELOG.md) para conocer el historial completo de versiones.

## 📦 Empaquetado

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

```bash
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](THIRD_PARTY_LICENSES.md) para el listado completo.

## 🙏 Agradecimientos

| Colaborador / Tecnología | Rol / Licencia |
|--------------------------|----------------|
| [Adolfo González](https://github.com/Alphonsus411) | Autor principal |
| Michael Jackson | Inspiración musical |
| [Flet](https://flet.dev) (Apache 2.0) | Dashboard visual |
| [Numba](https://numba.pydata.org) (BSD-3-Clause) | Aceleración JIT |
| [NumPy](https://numpy.org) (BSD-3-Clause) | Operaciones vectoriales |
| [Rich](https://rich.readthedocs.io) (MIT) | Salida de consola |


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "smooth-criminal",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Adolfo Gonz\u00e1lez <tucorreo@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/33/94/8bbcf2820a6ecc5b9685f735a5fc85e51996b9a3ca0ae17a448e802b2f88/smooth_criminal-0.8.0.tar.gz",
    "platform": null,
    "description": "# \ud83c\udfa9 Smooth Criminal\r\n\r\n**A Python performance acceleration toolkit with the soul of Michael Jackson.**\r\n\r\n[![Python](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/)\r\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\r\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/Alphonsus411/smooth_criminal/HEAD?urlpath=streamlit/examples/benchmark_streamlit.py)\r\n[![Streamlit](https://static.streamlit.io/badges/streamlit.svg)](https://smooth-criminal-demo.streamlit.app)\r\n\r\n---\r\n\r\n## \ud83d\ude80 \u00bfQu\u00e9 es esto?\r\n\r\n**Smooth Criminal** es una librer\u00eda de Python para acelerar funciones y scripts autom\u00e1ticamente usando:\r\n- \ud83e\udde0 [Numba](https://numba.pydata.org/)\r\n- \u26a1 Asyncio y threading\r\n- \ud83d\udcca Dashboard visual con [Flet](https://flet.dev)\r\n- \ud83e\uddea Benchmarks y profiling\r\n- \ud83c\udfb6 Estilo, carisma y mensajes inspirados en MJ\r\n\r\n---\r\n\r\n## \ud83d\udca1 Caracter\u00edsticas principales\r\n\r\n| Decorador / Funci\u00f3n     | Descripci\u00f3n                                           |\r\n|-------------------------|--------------------------------------------------------|\r\n| `@smooth`               | Aceleraci\u00f3n con Numba (modo sigiloso y r\u00e1pido)        |\r\n| `@vectorized`          | Vectoriza funciones estilo NumPy con *fallback*       |\r\n| `@guvectorized`        | Generaliza ufuncs con *fallback* seguro               |\r\n| `@moonwalk`             | Convierte funciones en corutinas `async` sin esfuerzo |\r\n| `@thriller`             | Benchmark antes y despu\u00e9s (con ritmo)                 |\r\n| `@jam(workers=n, backend=\"thread|process|async\")` | Paralelismo con hilos, procesos o asyncio (cola din\u00e1mica) |\r\n| `@black_or_white(mode)` | Optimiza tipos num\u00e9ricos (`float32` vs `float64`)     |\r\n| `@bad`                  | Modo de optimizaci\u00f3n agresiva (`fastmath`)            |\r\n| `@beat_it`              | Fallback autom\u00e1tico si algo falla                     |\r\n| `@mj_mode`              | Aplica un decorador aleatorio con mensaje de MJ       |\r\n| `dangerous(func)`       | Mezcla poderosa de decoradores (`@bad + @thriller`)   |\r\n| `@bad_and_dangerous`    | Optimiza, perfila y maneja errores autom\u00e1ticamente    |\r\n| `profile_it(func)`      | Estad\u00edsticas detalladas de rendimiento                |\r\n| `analyze_ast(func)`     | An\u00e1lisis est\u00e1tico para detectar c\u00f3digo optimizable    |\r\n\r\n---\r\n\r\n## \ud83e\udde0 Dashboard visual\r\n\r\nEjecuta el panel interactivo para ver m\u00e9tricas de tus funciones decoradas:\r\n\r\n```bash\r\npython -m smooth_criminal.dashboard\r\n```\r\nO bien:\r\n\r\n````bash\r\npython scripts/example_flet_dashboard.py\r\n````\r\n\r\n- Tabla con tiempos, decoradores y puntuaciones\r\n\r\n- Botones para exportar CSV/JSON/XLSX/MD, limpiar historial o ver gr\u00e1fico\r\n\r\n- Interfaz elegante con Flet (modo oscuro)\r\n\r\n### \ud83d\udd7a Animaci\u00f3n Moonwalk\r\n\r\nActiva el interruptor **Moonwalk** para ver c\u00f3mo un \u00edcono de MJ cruza la\r\npantalla y desaparece al finalizar.\r\n\r\nPrueba manual:\r\n\r\n1. Ejecuta `python -m smooth_criminal.dashboard` o `python scripts/example_flet_dashboard.py`.\r\n2. Pulsa el interruptor **Moonwalk** en la fila de botones.\r\n3. Observa al bailar\u00edn deslizarse y liberarse autom\u00e1ticamente.\r\n\r\n### \ud83c\udfac Nuevas animaciones\r\n\r\nEl dashboard incorpora efectos como \"Spin\" y \"Toe Stand\" para dar m\u00e1s ritmo a tus m\u00e9tricas.\r\nAct\u00edvalos desde la l\u00ednea de comandos:\r\n\r\n```bash\r\npython -m smooth_criminal.dashboard --animation spin\r\n```\r\n\r\n## \u2699\ufe0f Instalaci\u00f3n\r\n\r\n````bash\r\npip install smooth-criminal\r\n````\r\n\r\nO para desarrollo local:\r\n\r\n````bash\r\ngit clone https://github.com/Alphonsus411/smooth_criminal.git\r\ncd smooth_criminal\r\npip install -e .\r\n````\r\n\r\n\r\n## \ud83d\udee0\ufe0f Configuraci\u00f3n de entorno\r\n\r\nAntes de ejecutar la librer\u00eda copia el archivo de ejemplo y ajusta las variables:\r\n\r\n````bash\r\ncp .env.example .env\r\n````\r\n\r\nDentro de `.env` puedes definir:\r\n\r\n```\r\n# Ruta donde se guardan las m\u00e9tricas\r\nLOG_PATH=.smooth_criminal_log.json\r\n\r\n# Backend de almacenamiento: json (por defecto), sqlite o tinydb\r\nSMOOTH_CRIMINAL_STORAGE=json\r\n```\r\n\r\nPara backend `tinydb` instala la dependencia opcional `tinydb` y para exportar a\r\n`xlsx` instala `openpyxl`.\r\n\r\n\r\n## \ud83d\udc83 Ejemplo r\u00e1pido\r\n\r\n````python\r\nfrom smooth_criminal import smooth, thriller\r\n\r\n@thriller\r\n@smooth\r\ndef square(n):\r\n    return [i * i for i in range(n)]\r\n\r\nprint(square(10))\r\n````\r\n\r\n### \ud83c\udfb7 Paralelismo con `jam`\r\n\r\n```python\r\nfrom smooth_criminal.core import jam\r\n\r\n@jam(workers=4, backend=\"process\")\r\ndef cube(x):\r\n    return x ** 3\r\n\r\nprint(cube([1, 2, 3]))\r\n\r\n# Tambi\u00e9n disponible backend=\"thread\" (por defecto) o backend=\"async\"\r\n```\r\n\r\n### \u23f1\ufe0f Benchmark de backends con `benchmark_jam`\r\n\r\n```python\r\nfrom smooth_criminal.benchmark import benchmark_jam, detect_fastest_backend\r\n\r\ndef cube(x):\r\n    return x ** 3\r\n\r\ndata = benchmark_jam(cube, [1, 2, 3], [\"thread\", \"process\", \"async\"])\r\nprint(data[\"fastest\"])            # backend m\u00e1s veloz\r\n\r\nbest = detect_fastest_backend(cube, [1, 2, 3], [\"thread\", \"process\", \"async\"])\r\nprint(best)\r\n```\r\n\r\n### \ud83c\udfb2 Decorador aleatorio `mj_mode`\r\n\r\n```python\r\nimport random\r\nfrom smooth_criminal import mj_mode\r\n\r\nrandom.seed(0)\r\n\r\n@mj_mode\r\ndef identidad(x):\r\n    return x\r\n\r\nprint(identidad([1, 2, 3]))\r\n# Posible salida: \"\ud83e\udd41 Jam session with 4 workers!\"\r\n```\r\n\r\nMensajes posibles:\r\n\r\n- \ud83d\udd7a Hee-Hee! You're now smooth.\r\n- \ud83d\ude0e Who's bad? You're bad!\r\n- \ud83c\udfac It's Thriller time!\r\n- \ud83e\udd41 Jam session with 4 workers!\r\n\r\n## \ud83d\udea7 Modo bad_and_dangerous\r\n\r\n````python\r\nfrom smooth_criminal import bad_and_dangerous\r\n\r\ndef fallback(_):\r\n    return -1\r\n\r\n@bad_and_dangerous(fallback=fallback)\r\ndef risky(n):\r\n    total = 0\r\n    for i in range(n):\r\n        total += i\r\n    return total\r\n\r\nprint(risky(5))\r\n````\r\n\r\n## \ud83e\uddee Vectorizaci\u00f3n segura\r\n\r\n````python\r\nimport numpy as np\r\nfrom smooth_criminal import vectorized, guvectorized\r\n\r\n\r\n@vectorized([\"float64(float64)\"])\r\ndef doble(x):\r\n    return x * 2\r\n\r\n\r\n@guvectorized([\"void(float64[:], float64[:], float64[:])\"], \"(n),(n)->(n)\")\r\ndef suma(a, b, res):\r\n    for i in range(a.shape[0]):\r\n        res[i] = a[i] + b[i]\r\n\r\n\r\nprint(doble(np.array([1.0, 2.0])))\r\nprint(suma(np.array([1.0, 2.0]), np.array([3.0, 4.0])))\r\n````\r\n\r\n## \ud83e\uddea CLI interactiva\r\n\r\n````bash\r\nsmooth-criminal analyze my_script.py\r\n````\r\n\r\nEsto analizar\u00e1 tu c\u00f3digo buscando funciones lentas, bucles, range(), etc.\r\n\r\nPara exportar el historial en distintos formatos:\r\n\r\n````bash\r\nsmooth-criminal export history.xlsx --format xlsx\r\nsmooth-criminal export history.md --format md\r\nsmooth-criminal export history.json --format json\r\n````\r\n\r\nTambi\u00e9n puedes comparar r\u00e1pidamente los backends de `jam` desde la l\u00ednea de comandos:\r\n\r\n````bash\r\nsmooth-criminal jam-test paquete.modulo:funcion --workers 4 --reps 3\r\n````\r\n\r\nSi prefieres un resultado en JSON sin mensajes adicionales, a\u00f1ade `--silent`:\r\n\r\n````bash\r\nsmooth-criminal jam-test paquete.modulo:funcion --workers 4 --reps 3 --silent\r\n````\r\n\r\nEsto mostrar\u00e1 una tabla comparativa de tiempos y, al finalizar sin errores, el mensaje especial:\r\n\r\n```\r\n\ud83c\udfb6 Just jammin' through those CPU cores! \ud83e\udde0\ud83d\udd7a\r\n```\r\n\r\n### \ud83d\udd7a Flag --mj-mode\r\n\r\nActiva efectos especiales al detectar mejoras de rendimiento:\r\n\r\n```bash\r\nsmooth-criminal jam-test paquete.modulo:funcion --workers 4 --mj-mode\r\n```\r\n\r\nCuando el modo est\u00e1 activo y el rendimiento mejora al menos un 10\u00a0%, se\r\nreproducir\u00e1 un peque\u00f1o efecto de Michael Jackson.  Si la dependencia\r\n`playsound` no est\u00e1 disponible, se mostrar\u00e1 un mensaje o GIF/ASCII mediante\r\n`rich`.  En ausencia de estas dependencias, solo se emitir\u00e1 una advertencia.\r\n\r\n## \ud83c\udf10 API\r\n\r\nLanza una API HTTP para consultar las estad\u00edsticas desde otras aplicaciones:\r\n\r\n```bash\r\nsmooth-criminal api --host 127.0.0.1 --port 8000\r\n```\r\n\r\nDespu\u00e9s puedes obtener los datos con:\r\n\r\n```bash\r\ncurl http://127.0.0.1:8000/history\r\n```\r\n\r\n## \ud83d\udd0c Plugin\r\n\r\nEl directorio `vscode-extension` contiene un plugin para VS Code que integra los comandos de Smooth Criminal.\r\nInst\u00e1lalo con:\r\n\r\n```bash\r\ncd vscode-extension\r\nnpm install\r\nnpm run build\r\n```\r\n\r\nEn VS Code, carga la extensi\u00f3n desde esta carpeta y podr\u00e1s ejecutar an\u00e1lisis desde el editor.\r\n\r\n## \ud83d\udcbe Backends de almacenamiento\r\n\r\nEl historial de ejecuciones se guarda usando un backend configurable.\r\nSelecciona el backend con la variable de entorno `SMOOTH_CRIMINAL_STORAGE`:\r\n\r\n````bash\r\nexport SMOOTH_CRIMINAL_STORAGE=sqlite  # json | sqlite | tinydb\r\nsmooth-criminal analyze my_script.py\r\n````\r\n\r\nEl backend `sqlite` no requiere extras. Para `tinydb` instala `tinydb` y para\r\nexportar a `xlsx` instala `openpyxl`.\r\n\r\n## \ud83d\udcda Documentaci\u00f3n\r\n\r\nPr\u00f3ximamente en ReadTheDocs\u2026\r\n\r\nConsulta el [changelog](CHANGELOG.md) para conocer el historial completo de versiones.\r\n\r\n## \ud83d\udce6 Empaquetado\r\n\r\nPara crear una distribuci\u00f3n local y verificar sus metadatos:\r\n\r\n```bash\r\npython -m build\r\ntwine check dist/*\r\n```\r\n\r\n## \ud83d\udcdd Licencia\r\n\r\nMIT \u00a9 Adolfo Gonz\u00e1lez\r\n\r\nEste proyecto incluye bibliotecas de terceros con licencias permisivas, como\r\nFlet (Apache 2.0), Numba y NumPy (BSD-3-Clause) o Rich (MIT). Consulta\r\n[THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md) para el listado completo.\r\n\r\n## \ud83d\ude4f Agradecimientos\r\n\r\n| Colaborador / Tecnolog\u00eda | Rol / Licencia |\r\n|--------------------------|----------------|\r\n| [Adolfo Gonz\u00e1lez](https://github.com/Alphonsus411) | Autor principal |\r\n| Michael Jackson | Inspiraci\u00f3n musical |\r\n| [Flet](https://flet.dev) (Apache 2.0) | Dashboard visual |\r\n| [Numba](https://numba.pydata.org) (BSD-3-Clause) | Aceleraci\u00f3n JIT |\r\n| [NumPy](https://numpy.org) (BSD-3-Clause) | Operaciones vectoriales |\r\n| [Rich](https://rich.readthedocs.io) (MIT) | Salida de consola |\r\n\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Dashboard de an\u00e1lisis de rendimiento con decoradores inteligentes",
    "version": "0.8.0",
    "project_urls": {
        "Documentation": "https://smooth-criminal.readthedocs.io/en/latest/",
        "Homepage": "https://github.com/Alphonsus411/smooth_criminal"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f2683240b48610e71bf8da53b412a326b7961e22c629da4630a196789fcd329b",
                "md5": "b208c0846c14b00a06d68a795c79b9b8",
                "sha256": "055838cfa4697278fcdf2bbd28cd4f934ffc839c494ac693f655e18548cbedf2"
            },
            "downloads": -1,
            "filename": "smooth_criminal-0.8.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b208c0846c14b00a06d68a795c79b9b8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 31504,
            "upload_time": "2025-10-26T18:48:00",
            "upload_time_iso_8601": "2025-10-26T18:48:00.614084Z",
            "url": "https://files.pythonhosted.org/packages/f2/68/3240b48610e71bf8da53b412a326b7961e22c629da4630a196789fcd329b/smooth_criminal-0.8.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "33948bbcf2820a6ecc5b9685f735a5fc85e51996b9a3ca0ae17a448e802b2f88",
                "md5": "f323ec0f824c25e4806c2965bd6838e3",
                "sha256": "d206991eca00cafa0df8d24c4b79e42ab84fd23fbdbe8a3e0265073b6c5efd6d"
            },
            "downloads": -1,
            "filename": "smooth_criminal-0.8.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f323ec0f824c25e4806c2965bd6838e3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 41735,
            "upload_time": "2025-10-26T18:48:01",
            "upload_time_iso_8601": "2025-10-26T18:48:01.860809Z",
            "url": "https://files.pythonhosted.org/packages/33/94/8bbcf2820a6ecc5b9685f735a5fc85e51996b9a3ca0ae17a448e802b2f88/smooth_criminal-0.8.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-26 18:48:01",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Alphonsus411",
    "github_project": "smooth_criminal",
    "github_not_found": true,
    "lcname": "smooth-criminal"
}
        
Elapsed time: 1.49167s