class_docstr: Stack of pooling and convolutional blocks with residual connections.
code: def __call__(self, x):
      initializer = nn.initializers.xavier_uniform()
      conv_out = nn.Conv(
          features=self.num_ch,
          kernel_size=(3, 3),
          strides=1,
          kernel_init=initializer,
          padding="SAME",
      )(x)
      if self.use_max_pooling:
          conv_out = nn.max_pool(
              conv_out,
              window_shape=(3, 3),
              padding="SAME",
              strides=(2, 2),
          )
  
      for _ in range(self.num_blocks):
          block_input = conv_out
          conv_out = nn.relu(conv_out)
          conv_out = nn.Conv(
              features=self.num_ch,
              kernel_size=(3, 3),
              strides=1,
              padding="SAME",
          )(conv_out)
          conv_out = nn.relu(conv_out)
          conv_out = nn.Conv(
              features=self.num_ch,
              kernel_size=(3, 3),
              strides=1,
              padding="SAME",
          )(conv_out)
          conv_out += block_input
  
      return conv_out
  
imports: import itertools
  import time
  from typing import Optional, Sequence, Tuple, Union
  from absl import logging
  from dopamine.discrete_domains import atari_lib
  from flax import linen
  import gin
  import jax
  import jax.numpy
  import numpy
label_desc: Use image node_id 1 for calling the Stack obj's underlying member method code with example usage: obj.__call__(x) and returns: conv_out