code: def testLinearOutputTwoModules(self):
      batch_size = 4
      input_size_a = 5
      input_size_b = 6
      output_size = 3
      lin_a = linear.Linear(output_size, name="lin_a")
      lin_b = linear.Linear(output_size, name="lin_b")
      input_a = tf.random.uniform([batch_size, input_size_a])
      input_b = tf.random.uniform([batch_size, input_size_b])
      output = util.apply_linear(
          (input_a, input_b), (lin_a, lin_b), activation=tf.nn.relu
      )
      expected_output = np.maximum(
          0,
          (
              np.matmul(input_a.numpy(), lin_a.w.numpy())
              + lin_a.b.numpy()
              + np.matmul(input_b.numpy(), lin_b.w.numpy())
              + lin_b.b.numpy()
          ),
      )
      self.assertAllClose(
          expected_output, output.numpy(), atol=self.get_atol()
      )
  
imports: from absl.testing import parameterized
  import numpy
  from sonnet.src import linear
  from sonnet.src import test_utils
  from sonnet.src.nets.dnc import util
  import tensorflow
  import tree
label_desc: Use image node_id 2 for calling the LinearTest obj's underlying member method code with example usage: obj.testLinearOutputTwoModules() without return types