code: def test_share_params_chain_list(self):
      model_a = chainer.ChainList(
          L.BatchNormalization(3),
          chainer.ChainList(L.Linear(3, 5)),
      )
  
      arrays = async_.share_params_as_shared_arrays(model_a)
      assert isinstance(arrays, dict)
      assert set(arrays.keys()) == {
          "/0/gamma",
          "/0/beta",
          "/0/avg_mean",
          "/0/avg_var",
          "/0/N",
          "/1/0/W",
          "/1/0/b",
      }
  
      model_b = chainer.ChainList(
          L.BatchNormalization(3),
          chainer.ChainList(L.Linear(3, 5)),
      )
      model_c = chainer.ChainList(
          L.BatchNormalization(3),
          chainer.ChainList(L.Linear(3, 5)),
      )
  
      async_.set_shared_params(model_b, arrays)
      async_.set_shared_params(model_c, arrays)
  
      # Pointers to parameters must be the same
      _assert_same_pointers_to_param_data(model_a, model_b)
      _assert_same_pointers_to_param_data(model_a, model_c)
      # Pointers to gradients must be different
      _assert_different_pointers_to_param_grad(model_a, model_b)
      _assert_different_pointers_to_param_grad(model_a, model_c)
      _assert_different_pointers_to_param_grad(model_b, model_c)
      # Pointers to persistent values must be the same
      _assert_same_pointers_to_persistent_values(model_a, model_b)
      _assert_same_pointers_to_persistent_values(model_a, model_c)
  
imports: import multiprocessing
  import os
  import signal
  import sys
  import unittest
  import warnings
  import chainer
  import chainer.links
  from chainer import optimizers
  import copy
  import numpy
  import chainerrl
  from chainerrl.misc import async_
label_desc: Use image node_id 4 for calling the TestAsync obj's underlying member method code with example usage: obj.test_share_params_chain_list() without return types