# `Monty.Frameworks.Models.Salience.ReturnInhibitor`
[🔗](https://github.com/d-led/ex.tbp.monty/blob/v0.1.0/packages/ex_tbp_monty_core/lib/monty/frameworks/models/salience/return_inhibitor.ex#L1)

Inhibition of return: do not propose the place you just looked at.

Mirrors `tbp/monty/frameworks/models/salience/return_inhibitor.py::ReturnInhibitor`.
A salience module's goals are where to look next, and without this it would keep
proposing the most interesting pixel of the last view — which is the one place it
has already seen. Each call records where the sensor was, weighs every candidate
location against every visit, and then ages the visits by a step.

Monty mutates the field; a struct here is a value, so a call answers both the
weights and the inhibitor that produced them.

# `t`

```elixir
@type t() :: %Monty.Frameworks.Models.Salience.ReturnInhibitor{
  decay_field: Monty.Frameworks.Models.Salience.ReturnInhibitor.DecayField.t()
}
```

# `call`

```elixir
@spec call(t(), [float()] | nil, [[float()]]) :: {[float()], t()}
```

How much each of `query_locations` is inhibited, having just looked from
`visited_location` (`nil` when the middle of the view was not on an object).

# `new`

```elixir
@spec new(keyword()) :: t()
```

# `reset`

```elixir
@spec reset(t()) :: t()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
