class_docstr: Base class that tests mirrored variable creator.
  
  Currently it assumes all strategy objects have two replicas.
code: def testWithGetVariableAndVariableScope(self, distribution):
      def model_fn():
          v0 = variable_scope.get_variable("var0", [1])
          with variable_scope.variable_scope("common"):
              v1 = variable_scope.get_variable("var1", [1])
              # This will pause the current thread, and execute the other thread.
              distribute_lib.get_replica_context().merge_call(
                  lambda _: _
              )
              v2 = variable_scope.get_variable(
                  "var2",
                  [1],
                  synchronization=variable_scope.VariableSynchronization.ON_READ,
                  aggregation=variable_scope.VariableAggregation.SUM,
              )
              v3 = variable_scope.get_variable(
                  "var3",
                  [1],
                  synchronization=variable_scope.VariableSynchronization.ON_WRITE,
                  aggregation=variable_scope.VariableAggregation.MEAN,
              )
  
          return v0, v1, v2, v3
  
      with distribution.scope():
          with variable_scope.variable_scope("main"):
              v = variable_scope.get_variable("var-main0", [1])
              self.assertEqual("main/var-main0:0", v.name)
  
              result = distribution.extended.call_for_each_replica(
                  model_fn
              )
              self.assertEqual(4, len(result))
              v0, v1, v2, v3 = result
              self.assertTrue(distribute_utils.is_mirrored(v0))
              self.assertEqual("main/var0:0", v0.name)
              self.assertTrue(distribute_utils.is_mirrored(v1))
              self.assertEqual("main/common/var1:0", v1.name)
              self.assertTrue(distribute_utils.is_sync_on_read(v2))
              self.assertEqual("main/common/var2:0", v2.name)
              self.assertEqual(
                  variable_scope.VariableAggregation.SUM, v2.aggregation
              )
              self.assertTrue(distribute_utils.is_mirrored(v3))
              self.assertEqual("main/common/var3:0", v3.name)
              self.assertEqual(
                  variable_scope.VariableAggregation.MEAN,
                  v3.aggregation,
              )
  
imports: from tensorflow.python.checkpoint import checkpoint
  from tensorflow.python.distribute import collective_all_reduce_strategy
  from tensorflow.python.distribute import combinations
  from tensorflow.python.distribute import distribute_lib
  from tensorflow.python.distribute import distribute_utils
  from tensorflow.python.distribute import strategy_combinations
  from tensorflow.python.distribute import values
  from tensorflow.python.eager import backprop
  from tensorflow.python.eager import context
  from tensorflow.python.eager import def_function
  from tensorflow.python.eager import test
  from tensorflow.python.framework import config
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import errors
  from tensorflow.python.framework import func_graph
  from tensorflow.python.framework import ops
  from tensorflow.python.framework import tensor
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import custom_gradient
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops import rnn
  from tensorflow.python.ops import rnn_cell_impl
  from tensorflow.python.ops import state_ops
  from tensorflow.python.ops import variable_scope
  from tensorflow.python.ops import variable_v1
  from tensorflow.python.ops import variables
  from tensorflow.python.saved_model import load
  from tensorflow.python.saved_model import save
label_desc: Use image node_id 13 for calling the MirroredVariableCreationTest obj's underlying member method code with example usage: obj.testWithGetVariableAndVariableScope(distribution) and returns: v0,  v1,  v2,  v3