> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/gym/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/gym/_mcp/server.

# nemo_gym.sandbox.api

Provider-neutral public sandbox API.

## Module Contents

### Classes

| Name                                                         | Description                                        |
| ------------------------------------------------------------ | -------------------------------------------------- |
| [`AsyncSandbox`](#nemo_gym-sandbox-api-AsyncSandbox)         | Async sandbox object backed by a runtime provider. |
| [`Sandbox`](#nemo_gym-sandbox-api-Sandbox)                   | Synchronous wrapper around `AsyncSandbox`.         |
| [`_AsyncLoopRunner`](#nemo_gym-sandbox-api-_AsyncLoopRunner) | Run async sandbox operations for sync callers.     |

### Data

[`SYNC_LOOP_CLOSE_TIMEOUT_S`](#nemo_gym-sandbox-api-SYNC_LOOP_CLOSE_TIMEOUT_S)

[`SYNC_OPERATION_TIMEOUT_S`](#nemo_gym-sandbox-api-SYNC_OPERATION_TIMEOUT_S)

[`T`](#nemo_gym-sandbox-api-T)

### API

```python
class nemo_gym.sandbox.api.AsyncSandbox(
    provider: collections.abc.Mapping[str, typing.Any] | nemo_gym.sandbox.providers.SandboxProvider,
    spec: nemo_gym.sandbox.providers.SandboxSpec | None = None
)
```

Async sandbox object backed by a runtime provider.

```python
nemo_gym.sandbox.api.AsyncSandbox.__aenter__() -> nemo_gym.sandbox.api.AsyncSandbox
```

async

```python
nemo_gym.sandbox.api.AsyncSandbox.__aexit__(
    exc_type: typing.Any,
    exc_val: typing.Any,
    exc_tb: typing.Any
) -> None
```

async

```python
nemo_gym.sandbox.api.AsyncSandbox._require_handle() -> nemo_gym.sandbox.providers.SandboxHandle
```

```python
nemo_gym.sandbox.api.AsyncSandbox.download(
    remote_path: str,
    local_path: pathlib.Path | str
) -> None
```

async

```python
nemo_gym.sandbox.api.AsyncSandbox.exec(
    command: str,
    cwd: str | None = None,
    env: dict[str, str] | None = None,
    timeout_s: int | float | None = 180,
    user: str | int | None = None
) -> nemo_gym.sandbox.providers.SandboxExecResult
```

async

```python
nemo_gym.sandbox.api.AsyncSandbox.start(
    spec: nemo_gym.sandbox.providers.SandboxSpec | None = None
) -> nemo_gym.sandbox.api.AsyncSandbox
```

async

```python
nemo_gym.sandbox.api.AsyncSandbox.status() -> nemo_gym.sandbox.providers.SandboxStatus
```

async

```python
nemo_gym.sandbox.api.AsyncSandbox.stop() -> None
```

async

```python
nemo_gym.sandbox.api.AsyncSandbox.upload(
    local_path: pathlib.Path | str,
    remote_path: str
) -> None
```

async

```python
class nemo_gym.sandbox.api.Sandbox(
    provider: collections.abc.Mapping[str, typing.Any] | nemo_gym.sandbox.providers.SandboxProvider,
    spec: nemo_gym.sandbox.providers.SandboxSpec | None = None
)
```

Synchronous wrapper around `AsyncSandbox`.

```python
nemo_gym.sandbox.api.Sandbox.__del__() -> None
```

```python
nemo_gym.sandbox.api.Sandbox.__enter__() -> nemo_gym.sandbox.api.Sandbox
```

```python
nemo_gym.sandbox.api.Sandbox.__exit__(
    exc_type: typing.Any,
    exc_val: typing.Any,
    exc_tb: typing.Any
) -> None
```

```python
nemo_gym.sandbox.api.Sandbox.download(
    remote_path: str,
    local_path: pathlib.Path | str
) -> None
```

```python
nemo_gym.sandbox.api.Sandbox.exec(
    command: str,
    cwd: str | None = None,
    env: dict[str, str] | None = None,
    timeout_s: int | float | None = 180,
    user: str | int | None = None
) -> nemo_gym.sandbox.providers.SandboxExecResult
```

```python
nemo_gym.sandbox.api.Sandbox.start(
    spec: nemo_gym.sandbox.providers.SandboxSpec | None = None
) -> nemo_gym.sandbox.api.Sandbox
```

```python
nemo_gym.sandbox.api.Sandbox.status() -> nemo_gym.sandbox.providers.SandboxStatus
```

```python
nemo_gym.sandbox.api.Sandbox.stop() -> None
```

```python
nemo_gym.sandbox.api.Sandbox.upload(
    local_path: pathlib.Path | str,
    remote_path: str
) -> None
```

```python
class nemo_gym.sandbox.api._AsyncLoopRunner(
    wait_timeout_s: float = SYNC_OPERATION_TIMEOUT_S,
    close_timeout_s: float = SYNC_LOOP_CLOSE_TIMEOUT_S
)
```

Run async sandbox operations for sync callers.

```python
nemo_gym.sandbox.api._AsyncLoopRunner._ensure_can_block(
    operation: str
) -> None
```

```python
nemo_gym.sandbox.api._AsyncLoopRunner._run_loop() -> None
```

```python
nemo_gym.sandbox.api._AsyncLoopRunner._wait_for_result(
    operation: str,
    future: concurrent.futures.Future[nemo_gym.sandbox.api.T]
) -> nemo_gym.sandbox.api.T
```

```python
nemo_gym.sandbox.api._AsyncLoopRunner.call(
    operation: str,
    func: collections.abc.Callable[[], nemo_gym.sandbox.api.T]
) -> nemo_gym.sandbox.api.T
```

```python
nemo_gym.sandbox.api._AsyncLoopRunner.close() -> None
```

```python
nemo_gym.sandbox.api._AsyncLoopRunner.run(
    operation: str,
    awaitable_factory: collections.abc.Callable[[], collections.abc.Awaitable[nemo_gym.sandbox.api.T]]
) -> nemo_gym.sandbox.api.T
```

```python
nemo_gym.sandbox.api.SYNC_LOOP_CLOSE_TIMEOUT_S = 5.0
```

```python
nemo_gym.sandbox.api.SYNC_OPERATION_TIMEOUT_S = 3600.0
```

```python
nemo_gym.sandbox.api.T = TypeVar('T')
```