# `Monty.Frameworks.Models.SensorModules.PerceptFilter`
[🔗](https://github.com/d-led/ex.tbp.monty/blob/v0.1.0/packages/ex_tbp_monty_core/lib/monty/frameworks/models/sensor_modules/percept_filter.ex#L1)

Something that decides whether a percept carries features or only a location.

Mirrors `tbp/monty/frameworks/models/sensor_modules.py::PerceptFilter`, the
protocol a sensor module's filter answers. `CameraSM` passes every percept
through one: the default passes everything on, and `FeatureChangeFilter` sends
a point to a learning module only when something about it changed enough to be
worth learning.

A filter is a value here, so what it remembers travels beside it rather than
inside it: the callback takes the filter, the percept and that memory, and
answers both the percept and the memory's next version.

# `memory`

```elixir
@type memory() :: term()
```

# `t`

```elixir
@type t() :: struct()
```

# `call`

```elixir
@callback call(t(), Monty.Cmp.Message.t(), memory()) :: {Monty.Cmp.Message.t(), memory()}
```

The percept, marked, and the filter's record of it.

# `reset`

```elixir
@callback reset(memory()) :: memory()
```

The memory a new episode starts with, which is what `reset` answers.

---

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