class_docstr: Offline Rainbow agent with BC regularization (akin to CQL).
code: def log_gradient_steps_per_epoch(self):
      num_steps_per_epoch = self._replay.gradient_steps_per_epoch
      steps_per_epoch = self.training_steps / num_steps_per_epoch
      if self.summary_writer is not None:
          with self.summary_writer.as_default():
              tf.summary.scalar(
                  "Info/EpochFractionSteps",
                  steps_per_epoch,
                  step=self.training_steps,
              )
  
imports: import functools
  from absl import logging
  from dopamine.jax import losses
  from dopamine.jax.agents.full_rainbow import full_rainbow_agent
  from dopamine.jax.agents.rainbow import rainbow_agent
  from dopamine.labs.offline_rl import fixed_replay
  from dopamine.labs.offline_rl.rlu_tfds import tfds_replay
  import gin
  import jax
  import jax.numpy
  import numpy
  import optax
  import tensorflow
label_desc: Use image node_id 4 for calling the OfflineJaxRainbowAgent obj's underlying member method code with example usage: obj.log_gradient_steps_per_epoch() without return types