class_docstr: ARS learner.
code: def _generate_perturbations(self):
      with self._lock:
          rng, noise_key = jax.random.split(self._evaluation_state.key)
          self._evaluation_state = EvaluationState(
              key=rng,
              evaluation_queue=collections.deque(),
              received_results={},
              noises=[],
          )
  
          all_noise = jax.random.normal(
              noise_key,
              shape=(self._config.num_directions,)
              + self._training_state.policy_params.shape,
              dtype=self._training_state.policy_params.dtype,
          )
          for i in range(self._config.num_directions):
              noise = all_noise[i]
              self._evaluation_state.noises.append(noise)
              for direction in (-1, 1):
                  self._evaluation_state.evaluation_queue.append(
                      EvaluationRequest(
                          PerturbationKey(
                              self._training_state.training_iteration,
                              i,
                              direction == -1,
                          ),
                          self._training_state.policy_params
                          + direction
                          * noise
                          * self._config.exploration_noise_std,
                          self._training_state.normalizer_params,
                      )
                  )
  
imports: import collections
  import threading
  import time
  from typing import Any, Deque, Dict, Iterator, List, NamedTuple, Optional
  import acme
  from acme import specs
  from acme.adders import reverb
  from acme.agents.jax.ars import config
  from acme.agents.jax.ars import networks
  from acme.jax import networks
  from acme.jax import running_statistics
  from acme.jax import utils
  from acme.utils import counting
  from acme.utils import loggers
  import jax
  import numpy
  import reverb
label_desc: Use image node_id 2 for calling the ARSLearner obj's underlying member method code with example usage: obj._generate_perturbations() without return types