code: def test_add_adapter_fusion_different_config(self):
      model = self.get_model()
      model.eval()
  
      # fusion between a and b should be possible whereas fusion between a and c should fail
      model.add_adapter("a", config=SeqBnConfig(reduction_factor=16))
      model.add_adapter("b", config=SeqBnConfig(reduction_factor=2))
      model.add_adapter("c", config="double_seq_bn")
  
      # correct fusion
      model.add_adapter_fusion(["a", "b"])
      self.assertIn("a,b", model.adapters_config.fusions)
      # failing fusion
      self.assertRaises(
          ValueError, lambda: model.add_adapter_fusion(["a", "c"])
      )
  
file_path: adapters/tests/test_adapter_fusion_common.py
imports: import copy
  import os
  import tempfile
  from dataclasses import asdict
  import torch
  from adapters import ADAPTER_MODEL_MAPPING, ADAPTERFUSION_CONFIG_MAP, AdapterConfig, AutoAdapterModel, SeqBnConfig
  from adapters.composition import Fuse
  from adapters.utils import ADAPTERFUSION_WEIGHTS_NAME
  from adapters.wrappers import load_model
  from transformers.testing_utils import require_torch, torch_device
label_desc: Use image node_id 2 for calling the AdapterFusionModelTestMixin obj's underlying member method code with example usage: obj.test_add_adapter_fusion_different_config() without return types