---
title: Total
description: "A report's total, which is a lower bound whenever anything is unpriced."
---

```python
@final
class Total
```

A report's total, which is a lower bound whenever anything is unpriced.

The core makes `AtLeast { floor, unpriced }` a *different variant* from `Exact`, so a
lower bound cannot be read without seeing the reasons. Python has no exhaustive match
to lean on, so the port keeps the floor under a name that says what it is:
\[`Self::floor`], never `total`. A caller reading a field called `total` would have no
reason to check `is_lower_bound`.

## Constructor

`Total` declares no `__new__` or `__init__`, so it is not constructed directly: an instance comes back from another call in this package.

## Properties

### `floor`

```python
floor: EstimatedUsd
```

Everything that could be priced. For a lower bound this is **not** the total.

### `is_lower_bound`

```python
is_lower_bound: bool
```

True when line items with no published rate are missing from the floor.

### `unpriced_reasons`

```python
unpriced_reasons: list[str]
```

Why each unpriced line could not be priced, in report order. Empty for an exact
total.

## Special methods

### `__repr__`

```python
def __repr__() -> str
```

### `__str__`

```python
def __str__() -> str
```

`at least ~$X (estimated), plus N unpriced (...)` — "at least" leads, because that
is the whole point.

## Provenance

This page is generated from `bindings/microvms-py/microvms.pyi` by Griffe 2.3.0, run from `site/scripts/gen-reference.mjs` on every `pnpm run sync`, so an edit made here is overwritten by the next run.

To change the page, change the doc comment in the binding's Rust source, then regenerate the declarations with `mise run stubs`. `mise run stubs:check` fails when the committed file no longer matches the source.