class_docstr: Jax Rainbow network for Full Rainbow.
  
  Attributes:
      num_actions: The number of actions the agent can take at any state.
      num_atoms: The number of buckets of the value function distribution.
      noisy: Whether to use noisy networks.
      dueling: Whether to use dueling network architecture.
      distributional: Whether to use distributional RL.
code: def setup(self):
      self.transition_model = TransitionModel(
          num_actions=self.num_actions,
          latent_dim=64,
          renormalize=self.renormalize,
      )
      self.projection, self.apply_projection = feature_layer(
          self.noisy, 512
      )
      self.predictor = nn.Dense(512)
      self.encoder = RainbowCNN(stack_sizes=(32, 64, 64))
  
imports: import collections
  import functools
  import time
  from typing import Any, Callable, Optional, Tuple
  from dopamine.jax.networks import preprocess_atari_inputs
  from flax import linen
  import gin
  import jax
  from jax import lax
  from jax import random
  from jax.nn import initializers
  import jax.numpy
  import numpy
label_desc: Use image node_id 1 for calling the SPRNetwork obj's underlying member method code with example usage: obj.setup() without return types