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

Every place the sensor has been, as kernels that fade.

Mirrors `tbp/monty/frameworks/models/salience/return_inhibitor.py::DecayField`.
A field answers a salience module's inhibition-of-return: at each point, how
strongly the sensor's recent visits argue against looking there. Overlapping
visits do not add up — the strongest kernel wins — so walking over a patch
twice does not make it twice as unattractive, only as unattractive as the most
recent visit says.

Kernels are dropped once they stop mattering, which is what keeps an episode's
memory of where it has been finite.

# `t`

```elixir
@type t() :: %Monty.Frameworks.Models.Salience.ReturnInhibitor.DecayField{
  kernel_factory:
    Monty.Frameworks.Models.Salience.ReturnInhibitor.DecayKernelFactory.t(),
  kernels: [Monty.Frameworks.Models.Salience.ReturnInhibitor.DecayKernel.t()]
}
```

# `add`

```elixir
@spec add(t(), [float()]) :: t()
```

Adds a kernel where the sensor just was.

# `new`

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

# `reset`

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

# `step`

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

One step older, and the kernels that have stopped mattering are gone.

# `weights`

```elixir
@spec weights(t(), [[float()]]) :: [float()]
```

How strongly the field argues against each point; zero when it is empty.

---

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