@callback initialize(map()) :: :ok
@callback partition(integer()) :: [function()]
@callback select_value(Variable.t()) :: integer()