---
name: cuda_available
kind: function
lang: py
domain: ml
version: "1.0.0"
purity: impure
signature: "def cuda_available() -> dict"
description: "Detecta si CUDA esta disponible via torch. Devuelve device_count, nombres de GPU y version de CUDA. Si torch no esta instalado, retorna available=False sin lanzar excepcion."
tags: [cuda, gpu, torch, pytorch, hardware, probe, ml, device]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params: []
output: "dict con claves: available (bool), device_count (int), devices (list[str] con nombres de GPU), torch_version (str o 'not_installed'), cuda_version (str | None)"
tested: true
tests:
  - "sin torch retorna available=False y torch_version=not_installed"
  - "con torch sin cuda retorna available=False y device_count=0"
  - "claves del dict siempre presentes"
test_file_path: "python/functions/ml/tests/test_cuda_available.py"
file_path: "python/functions/ml/cuda_available.py"
---

## Ejemplo

```python
from ml.cuda_available import cuda_available

info = cuda_available()
# Sin GPU:
# {
#   "available": False,
#   "device_count": 0,
#   "devices": [],
#   "torch_version": "2.3.0",
#   "cuda_version": None
# }

# Con GPU:
# {
#   "available": True,
#   "device_count": 1,
#   "devices": ["NVIDIA RTX 4090"],
#   "torch_version": "2.3.0",
#   "cuda_version": "12.1"
# }

# Sin torch instalado:
# {
#   "available": False,
#   "device_count": 0,
#   "devices": [],
#   "torch_version": "not_installed",
#   "cuda_version": None
# }
```

## Notas

- Nunca lanza ImportError aunque torch no este instalado.
- `cuda_version` es la version de CUDA con la que fue compilado torch, no necesariamente la del sistema.
- Usar junto a `torch_device_select` para elegir device y `gpu_info` para estadisticas de VRAM.
- impure: depende del estado del hardware y de librerias del sistema en tiempo de ejecucion.
