code: def _yield_minibatches(dataset, minibatch_size, num_epochs):
      assert dataset
      buf = []
      n = 0
      while n < len(dataset) * num_epochs:
          while len(buf) < minibatch_size:
              buf = random.sample(dataset, k=len(dataset)) + buf
          assert len(buf) >= minibatch_size
          yield buf[-minibatch_size:]
          n += minibatch_size
          buf = buf[:-minibatch_size]
  
imports: import collections
  import itertools
  import random
  import numpy
  import torch
  import torch.nn.functional
  import pfrl
  from pfrl import agent
  from pfrl.utils.batch_states import batch_states
  from pfrl.utils.mode_of_distribution import mode_of_distribution
  from pfrl.utils.recurrent import concatenate_recurrent_states, flatten_sequences_time_first, get_recurrent_state_at, mask_recurrent_state_at, one_step_forward, pack_and_forward
label_desc: Use image node_id 12 for calling a global function with example usage: _yield_minibatches(dataset, minibatch_size, num_epochs) without return types