# `GEPA.Strategies.BatchSampler.EpochShuffled`
[🔗](https://github.com/nshkrdotcom/gepa_ex/blob/v0.3.0/lib/gepa/strategies/batch_sampler.ex#L43)

Epoch-shuffled sampler matching the Python reference semantics.

A deterministic shuffle is generated per epoch; incomplete epoch tails are
padded with least-seen IDs so every returned minibatch has `minibatch_size` IDs.

# `t`

```elixir
@type t() :: %GEPA.Strategies.BatchSampler.EpochShuffled{
  current_position: non_neg_integer(),
  epoch: integer(),
  id_freqs: %{required(term()) =&gt; pos_integer()},
  last_trainset_size: non_neg_integer(),
  minibatch_size: pos_integer(),
  rng_state: :rand.state(),
  seed: integer(),
  shuffled_ids: [term()]
}
```

# `new`

---

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