Metadata-Version: 2.1
Name: lunagen
Version: 0.1.1
Summary: Simulación de cultivos basada en agentes: configurable, optimizable y con visualización en vivo.
Author-email: Metzli-Aislinn Alvarez-Molotla <metzli.alvarez23ibi@nube.unadmexico.mx>
License: MIT
Project-URL: Homepage, https://satsh.org/lunagen/
Project-URL: Documentation, https://satsh.org/lunagen/
Keywords: simulación,simulation,agent-based,basada en agentes,bioprocess,bioprocesos,optimización,optimization,celulosa bacteriana,bacterial cellulose,Komagataeibacter xylinus,cultivo,fermentación
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Education
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Classifier: Topic :: Scientific/Engineering :: Visualization
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy >=1.21
Provides-Extra: all
Requires-Dist: pygame-ce >=2.4 ; extra == 'all'
Requires-Dist: scipy ; extra == 'all'
Provides-Extra: viz
Requires-Dist: pygame-ce >=2.4 ; extra == 'viz'
Requires-Dist: scipy ; extra == 'viz'

# lunagen

**Simulación de cultivos basada en agentes: configurable, optimizable y con visualización en vivo.**

`lunagen` simula poblaciones de células una por una (metabolismo, crecimiento, división, muerte y
producción de uno o varios compuestos) y busca las condiciones de cultivo que maximizan lo que te
interese: celulosa bacteriana, etanol, otra biomasa, tiempo de vida, velocidad de reproducción…

El motor no sabe nada de ningún organismo concreto: **todo lo específico se declara** (variables,
respuestas al entorno, productos, qué medir). Incluye un preset de *Komagataeibacter xylinus*
(celulosa bacteriana) y se pueden describir organismos nuevos en unas decenas de líneas.

## Instalación

```bash
pip install lunagen                 # núcleo (solo requiere numpy)
pip install "lunagen[viz]"          # + ventana en vivo (pygame-ce y scipy)
```

También se puede instalar desde el archivo `.whl`:

```bash
pip install lunagen-0.1.1-py3-none-any.whl
```

## Inicio rápido

```python
import lunagen as lg

if __name__ == "__main__":        # necesario si usas varios procesos (workers > 1)
    organismo = lg.presets.komagataeibacter_xylinus()
    estudio = lg.Study(organismo, objective="yield[cellulose]", workers=4)
    resultado = estudio.optimize(samples=60, generations=8, population=16, viz=True)
    print(resultado.best_conditions, resultado.best_value)
```

Imprime en consola todo lo que hace, anima cada simulación en una ventana (`viz=True`) y escribe
`evaluations.csv`, `results.json` y `best_unity.xml` en la carpeta `output/`.

## Qué puedes hacer con pocas líneas

```python
# Otra pregunta con el mismo organismo
lg.Study(org, objective="mean_lifespan_h", space=["temperature_c", "ph"])      # tiempo de vida
lg.Study(org, objective="doubling_time_h", direction="min")                    # reproducción
lg.Study(org, objective={"yield[cellulose]": 1.0, "survival_fraction": 2.0},   # varios objetivos
         constraints=[("final_population", ">=", 100)])                        # y restricciones

# Operar solo con algunas variables
lg.Study(org, space=["temperature_c", "ph"], fixed={"glucose_gl": 30})

# Una métrica propia
@lg.metric("viabilidad", unit="%")
def viabilidad(result, cond, ctx):
    return 100 * result.final_alive / max(1, result.peak_alive)

# Sin escribir código: un archivo JSON
lg.run("config.json")          # o en la terminal:  lunagen config.json
```

## Documentación

La documentación completa en español (conceptos, referencia de la API, cómo describir un organismo
nuevo, calibración, ventana en vivo, exportación y publicación) está en
<https://satsh.org/lunagen/>.

## Fiabilidad

Las pruebas incluidas comparan la librería con el modelo original del que nació: con las mismas
condiciones y semilla, los resultados son **idénticos bit a bit**. Ejecuta `python tests/test_regression.py`.

## Licencia

MIT (ver `LICENSE`).
