> ## Documentation Index
> Fetch the complete documentation index at: https://systematica.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Base

> systematica.portfolio.metrics.base

## Variables

* `default_metric_registry`: Default metric registry instance.

## `MetricRegistry`

```python theme={null}
MetricRegistry(
    registry: vectorbtpro.utils.config.HybridConfig = None,
)
```

MetricRegistry class to manage and execute portfolio metrics.

Method generated by attrs for class MetricRegistry.

### Instance variables

* `registry: vectorbtpro.utils.config.HybridConfig`: Metric `vbt.HybridConfig` registry. This registry should have a retrivable metric name as key and schema. if `None`, fallbacks to `METRIC_REGISTRY`.

### Methods

#### `get_all_metrics`

```python theme={null}
get_all_metrics(
    self,
    include_non_tunable: bool = False,
) ‑> List[str]
```

Get a list of metric keys from the registry.
Optionally include non-tunable metrics based on user choice.

**Parameters**:

| Name                  | Type   | Default | Description                                                  |
| --------------------- | ------ | ------- | ------------------------------------------------------------ |
| `include_non_tunable` | `bool` | `False` | Whether to include non-tunable metrics. Defaults to `False`. |

**Returns**:

| Type        | Description                                                        |
| ----------- | ------------------------------------------------------------------ |
| `List[str]` | List of metric keys with valid (non-`NaNs`) `rolling_func` values. |

#### `get_all_rolling_metrics`

```python theme={null}
get_all_rolling_metrics(
    self,
    include_non_tunable: bool = False,
) ‑> List[str]
```

Get a list of metric keys from the registry that have a valid `rolling_func`.
Optionally include non-tunable metrics based on user choice.

**Parameters**:

| Name                  | Type   | Default | Description                                                 |
| --------------------- | ------ | ------- | ----------------------------------------------------------- |
| `include_non_tunable` | `bool` | `False` | Whether to include non-tunable metrics. Defaults to`False`. |

**Returns**:

| Type        | Description                                                        |
| ----------- | ------------------------------------------------------------------ |
| `List[str]` | List of metric keys with valid (non-`NaNs`) `rolling_func` values. |

#### `get_all_pf_metrics`

```python theme={null}
get_all_pf_metrics(
    self,
    include_non_tunable: bool = False,
) ‑> List[str]
```

Get a list of metric keys from the registry that have a valid pf\_func.
Optionally include non-tunable metrics based on user choice.

**Parameters**:

| Name                  | Type   | Default | Description                                                  |
| --------------------- | ------ | ------- | ------------------------------------------------------------ |
| `include_non_tunable` | `bool` | `False` | Whether to include non-tunable metrics. Defaults to `False`. |

**Returns**:

| Type        | Description                                                   |
| ----------- | ------------------------------------------------------------- |
| `List[str]` | List of metric keys with valid (non-`NaNs`) `pf_func` values. |

#### `get_all_non_tunable_metrics`

```python theme={null}
get_all_non_tunable_metrics(
    self,
) ‑> List[str]
```

Get a list of non-tunable metric keys from the registry.

**Returns**:

| Type        | Description                  |
| ----------- | ---------------------------- |
| `List[str]` | List of non-tunable metrics. |

#### `run`

```python theme={null}
run(
    self,
    pf: vectorbtpro.portfolio.base.Portfolio,
    metrics: str | List[str],
    key: str,
    frame_to_dict: bool = True,
    validate_metrics: bool = True,
    **kwargs,
) ‑> Dict[str, float | pandas.core.series.Series | pandas.core.frame.DataFrame]
```

Retrieve a dictionary of metric keys and their function values from the
registry and execute it using `vbt.deep_get_attr`. Only includes metrics
with non-`None` and string-type values.

<Note>
  * Metrics with `None` or missing are excluded.
  * The function stops iterating once all requested metrics are found.
  * Input validation ensures all provided metrics exist in the registry.
</Note>

**Parameters**:

| Name               | Type            | Default | Description                                                                                                                                                                                                                                       |
| ------------------ | --------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `pf`               | `vbt.Portfolio` | `--`    | Portfolio instance.                                                                                                                                                                                                                               |
| `metrics`          | `str`           | `--`    | or list of str A single metric key or a list of metric keys to look up in the registry.                                                                                                                                                           |
| `key`              | `str`           | `--`    | Type of key to fetch.                                                                                                                                                                                                                             |
| `frame_to_dict`    | `bool`          | `True`  | Change frame format output to dict type if set to `True`. Raw `pd.DataFrame` object data otherwise. Frames are retrieve when group\_by is `False` in the `vbt.PF` configuration and/or when rolling calculation is triggered. Defaults to `True`. |
| `validate_metrics` | `bool`          | `True`  | Check if metric is valid in the registry. Might slow-down code if set to `True`. Defaults to `True`.                                                                                                                                              |
| `kwargs`           | `tp.Kwargs`     | `--`    | Additional key-word arguments.                                                                                                                                                                                                                    |

**Raises**:

| Type       | Description                                              |
| ---------- | -------------------------------------------------------- |
| `KeyError` | If any provided metric key is not found in the registry. |

**Returns**:

| Type                                    | Description                                                                |
| --------------------------------------- | -------------------------------------------------------------------------- |
| `tp.Dict[str, float \| tp.SeriesFrame]` | Dictionary mapping valid metric keys to their corresponding output values. |

#### `run_rolling_metric`

```python theme={null}
run_rolling_metric(
    self,
    pf: vectorbtpro.portfolio.base.Portfolio,
    metrics: str | List[str],
    window: int,
    minp: int = None,
    to_numpy: bool = False,
    validate_metrics: bool = True,
    **kwargs,
) ‑> pandas.core.frame.DataFrame | numpy.ndarray
```

Retrieve a dictionary of metric keys and their rolling function values
from the registry and execute it using `vbt.deep_get_attr`. Only
includes metrics with non-`None` and string-type values.

**Parameters**:

| Name               | Type            | Default | Description                                                                                      |
| ------------------ | --------------- | ------- | ------------------------------------------------------------------------------------------------ |
| `pf`               | `vbt.Portfolio` | `--`    | Portfolio instance.                                                                              |
| `metrics`          | `str`           | `--`    | or list of str A single metric key or a list of metric keys to look up in the registry.          |
| `window`           | `int`           | `--`    | Rolling window size.                                                                             |
| `minp`             | `int`           | `None`  | Minimum number of observations required.                                                         |
| `to_numpy`         | `bool`          | `False` | If False, returns a pandas DataFrame. Otherwise a numpy array.                                   |
| `validate_metrics` | `bool`          | `True`  | Check if metric is valid in the registry. Might slow-down code if set to True. Defaults to True. |
| `kwargs`           | `tp.Kwargs`     | `--`    | Additional key-word arguments.                                                                   |

**Returns**:

| Type                       | Description     |
| -------------------------- | --------------- |
| `pd.DataFrame \| tp.Array` | Rolling output. |

#### `run_pf_metric`

```python theme={null}
run_pf_metric(
    self,
    pf: vectorbtpro.portfolio.base.Portfolio,
    metrics: str | List[str],
    to_numpy: bool = False,
    validate_metrics: bool = True,
    **kwargs,
) ‑> collections.OrderedDict | numpy.ndarray
```

Retrieve a dictionary of metric keys and their pf function values
from the registry and execute it using `vbt.deep_get_attr`. Only
includes metrics with non-`None` and string-type values.

**Parameters**:

| Name               | Type            | Default | Description                                                                                                                                                                                       |
| ------------------ | --------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `pf`               | `vbt.Portfolio` | `--`    | Portfolio instance.                                                                                                                                                                               |
| `metrics`          | `str`           | `--`    | or list of str A single metric key or a list of metric keys to look up in the registry.                                                                                                           |
| `frame_to_dict`    | `bool`          | `True`  | Change frame format output to dict type if set to`True`. Raw `pd.DataFrame` object data otherwise. Frames are retrieve when group\_by is False in the `vbt.PF` configuration. Defaults to` True`. |
| `to_numpy`         | `bool`          | `False` | If False, returns a pandas DataFrame. Otherwise a numpy array.                                                                                                                                    |
| `validate_metrics` | `bool`          | `True`  | Check if metric is valid in the registry. Might slow-down code if set to True. Defaults to True.                                                                                                  |
| `kwargs`           | `tp.Kwargs`     | `--`    | Additional key-word arguments.                                                                                                                                                                    |

**Returns**:

| Type          | Description                                                                                                 |
| ------------- | ----------------------------------------------------------------------------------------------------------- |
| `OrderedDict` | Float or int if metrics is standalone. OrderedDict mapping valid metric keys to their corresponding output. |
