# effective_matches

<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#L553-L581)</td>
    </tr>
</table>

:::{.padded_bottom_10pt}

:::{.def_block}


<b>effective_matches</b>(<br>
    &nbsp;&nbsp;&nbsp;&nbsp;stated
,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;by_index
,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;answers
,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;by_inventory
,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;headers
 = None,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;conflict
 = None,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;resolved
 = None,<br>
)-> 'np.ndarray'


:::

:::
Combine the index's verdict with the inventory's the way extraction will.

An unstated row holds whatever the inventory answers, so its verdict
is the inventory's. A stated row keeps the index's verdict unless a
pending enrichment rewrites the name: under `keep_first` the
inventory's answer replaces the header where it has one, and under
`drop` a header disagreeing with the answer comes out blank, which
nothing selects. `resolved` is given when `on_missing="null"` is
pending on a named attr: a resolved row the inventory has no answer
for then comes out blank too. `conflict` is None when nothing rewrites.

