# resolve_row_epochs

<table class=".origin_table">
    <tr>
        <td style="text-align: left; border-style: hidden">*function*  of [dascore.core._spool_inventory](`dascore.core._spool_inventory`)</td>
        <td style="text-align: right; border-style: hidden">[source](https://github.com/DASDAE/dascore/blob/dev/dascore/core/_spool_inventory.py#L790-L863)</td>
    </tr>
</table>

:::{.padded_bottom_10pt}

:::{.def_block}


<b>resolve_row_epochs</b>(<br>
    &nbsp;&nbsp;&nbsp;&nbsp;inventory
,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;keys
,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;starts
,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;ends
,<br>
)-> 'list[RowEpochs]'


:::

:::
Report how each index row sits against the inventory's epochs.

Where `resolve_contexts` asks for the one context a row has and gives
up on a row with two, this reports *where* the row's answers change,
so a caller can split it into pieces which each have one. A row the
inventory does not describe over its whole span is reported
undescribed rather than partly described: the piece it does describe
is not what the caller asked about, and keeping the edge simple is
worth more than salvaging it.

## Parameters

<table class="table">
  <thead>
    <tr>
            <th scope="col"> Parameter</th>
            <th scope="col"> Description</th>
    </tr>
  </thead>
  <tbody>
        <tr>
            <td>inventory</td>
            <td>The inventory to resolve against.</td>
        </tr>
        <tr>
            <td>keys</td>
            <td>Each row's acquisition_key.</td>
        </tr>
        <tr>
            <td>starts, ends</td>
            <td>Each row's first and last instant — the instants themselves, so<br>a row whose last instant falls exactly on a bound reaches into<br>the epoch that bound opens.</td>
        </tr>
  </tbody>
</table>

## Returns
A list of `RowEpochs`, one per row.

