code: def eval_policy(
      network: networks_lib.FeedForwardNetwork, eval_epsilon: float
  ) -> dqn_actor.EpsilonPolicy:
      """Returns a function that computes actions.
  
      Note that this differs from default_behavior_policy with that it
      expects c51-style network head which returns a tuple with the first entry
      representing q-values.
  
      Args:
        network: A c51-style feedforward network.
        eval_epsilon: for epsilon-greedy exploration.
  
      Returns:
        A feedforward policy.
      """
      policy = apply_policy_and_sample(network)
  
      def apply_and_sample(params, key, obs, _):
          return policy(params, key, obs, eval_epsilon)
  
      return apply_and_sample
  
file_path: acme/acme/agents/jax/dqn/rainbow.py
imports: import dataclasses
  from typing import Callable
  from acme import specs
  from acme.agents.jax.dqn import actor
  from acme.agents.jax.dqn import builder
  from acme.agents.jax.dqn import config
  from acme.agents.jax.dqn import losses
  from acme.jax import networks
  from acme.jax import utils
  import rlax
label_desc: Use image node_id 2 for calling a global function with example usage: eval_policy(network, eval_epsilon) and returns: apply_and_sample, policy