Metadata-Version: 2.4
Name: simulo
Version: 0.7.1
Summary: Simulo SDK and CLI — define robotics simulation and training apps in Python and run them on the Simulo cloud.
Author-email: Simulo Team <team@simulo.ai>
License: BSD-3-Clause
Project-URL: Homepage, https://simulo.ai
Keywords: robotics,simulation,reinforcement-learning,simulo
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: simulo-interfaces<0.2,>=0.1
Provides-Extra: dev
Requires-Dist: black>=24.0; extra == "dev"
Requires-Dist: isort>=5.13; extra == "dev"
Requires-Dist: ruff>=0.5; extra == "dev"
Requires-Dist: mypy>=1.10; extra == "dev"
Requires-Dist: pytest>=8.2; extra == "dev"
Requires-Dist: build>=1.2; extra == "dev"
Requires-Dist: twine>=5.1; extra == "dev"
Provides-Extra: release
Requires-Dist: commitizen>=3.27; extra == "release"
Requires-Dist: build>=1.2; extra == "release"
Requires-Dist: twine>=5.1; extra == "release"

# simulo

The Simulo SDK and CLI — define robotics simulation and training apps in Python,
submit them to the Simulo cloud, monitor jobs, and retrieve trained models.

Simulo is a cloud-first robotics simulation and training platform. Write your app
against a small, stable Python API; Simulo handles running it.

## Install

```bash
pip install simulo
```

Requires Python 3.11+.

## Quickstart

Log in once to submit to the Simulo cloud:

```bash
simulo login
```

Write an app:

```python
# app.py
import simulo

runtime = simulo.Runtime.from_registry("simulo/python-cpu:3.11")
app = simulo.App("hello", runtime=runtime)


@app.job(timeout=5 * 60)
def hello(name: str = "world", repeat: int = 3) -> dict:
    for i in range(repeat):
        print(f"[hello] {i + 1}/{repeat}: hello, {name}!")
    return {"greeting": f"hello, {name}", "repeat": repeat}


@app.local_entrypoint
def main(name: str = "world", repeat: int = 3) -> None:
    handle = hello.spawn(name=name, repeat=repeat)
    print(f"Submitted job: {handle.job_name}")
```

Run it:

```bash
simulo run app.py --name robot --repeat 5
```

Without logging in, `simulo run` packages the app locally without submitting it.

Learn more at [simulo.ai](https://simulo.ai).
