class_docstr: ConvStrategyGenerator is a generic class to generate strategies.
  The operation data is defined as `output = input x other + bias`.
class_docstr_tok: ["ConvStrategyGenerator","is","a","generic","class","to","generate","strategies",".","The","operation","data","is","defined","as","`","output","=","input","x","other","+","bias","`","."]
code: def split_input_batch_weight_out_channel(
      self, mesh_dim_0, mesh_dim_1
  ):
      name = f"S{mesh_dim_0}S{mesh_dim_1} = S{mesh_dim_0}R x RS{mesh_dim_1}"
  
      dim_partition_dict_mapping = {
          "input": {0: [mesh_dim_0]},
          "other": {1: [mesh_dim_1]},
          "output": {0: [mesh_dim_0], 1: [mesh_dim_1]},
      }
      if self.has_bias:
          dim_partition_dict_mapping["bias"] = {0: [mesh_dim_1]}
  
      sharding_spec_mapping = self.to_sharding_spec_mapping(
          dim_partition_dict_mapping
      )
  
      # set communication action
      input_comm_action = self.get_communication_action(
          sharding_spec=sharding_spec_mapping["input"],
          communication_pattern=CollectiveCommPattern.IDENTITY_FWD_ALLREDUCE_BWD,
          logical_process_axis=mesh_dim_1,
          comm_type=CommType.BEFORE,
          arg_index=0,
      )
      communication_action_mapping = {"input": input_comm_action}
  
      if self.is_param("other"):
          other_comm_action = self.get_communication_action(
              sharding_spec_mapping["other"],
              communication_pattern=CollectiveCommPattern.IDENTITY_FWD_ALLREDUCE_BWD,
              logical_process_axis=mesh_dim_0,
              comm_type=CommType.HOOK,
          )
  
      else:
          other_comm_action = self.get_communication_action(
              sharding_spec_mapping["other"],
              communication_pattern=CollectiveCommPattern.IDENTITY_FWD_ALLREDUCE_BWD,
              logical_process_axis=mesh_dim_0,
              comm_type=CommType.BEFORE,
              arg_index=1,
          )
  
      communication_action_mapping["other"] = other_comm_action
  
      if self.has_bias:
          if self.is_param("bias"):
              bias_comm_action = self.get_communication_action(
                  sharding_spec_mapping["bias"],
                  communication_pattern=CollectiveCommPattern.IDENTITY_FWD_ALLREDUCE_BWD,
                  logical_process_axis=mesh_dim_0,
                  comm_type=CommType.HOOK,
              )
          else:
              bias_comm_action = self.get_communication_action(
                  sharding_spec_mapping["bias"],
                  communication_pattern=CollectiveCommPattern.IDENTITY_FWD_ALLREDUCE_BWD,
                  logical_process_axis=mesh_dim_0,
                  comm_type=CommType.BEFORE,
                  key_for_kwarg="bias",
              )
          communication_action_mapping["bias"] = bias_comm_action
  
      return self.get_sharding_strategy(
          name=name,
          sharding_spec_mapping=sharding_spec_mapping,
          communication_action_mapping=communication_action_mapping,
      )
  
imports: import copy
  import operator
  from functools import reduce
  from typing import List
  from colossalai.auto_parallel.tensor_shard.sharding_strategy import CommType, MemoryCost, ShardingStrategy, TrainCycleItem
  from colossalai.auto_parallel.tensor_shard.utils import ignore_sharding_exception
  from colossalai.tensor.shape_consistency import CollectiveCommPattern
  from .strategy_generator import StrategyGenerator
label_desc: Use image node_id 4 for calling the ConvStrategyGenerator obj's underlying member method code with example usage: obj.split_input_batch_weight_out_channel(mesh_dim_0, mesh_dim_1) and returns: self