code: def concatenate_block_managers(mgrs_indexers, axes, concat_axis, copy):
      
      concat_plans = [get_mgr_concatenation_plan(mgr, indexers)
                      for mgr, indexers in mgrs_indexers]
      concat_plan = combine_concat_plans(concat_plans, concat_axis)
      blocks = []
  
      for placement, join_units in concat_plan:
  
          if len(join_units) == 1 and not join_units[0].indexers:
              b = join_units[0].block
              values = b.values
              if copy:
                  values = values.copy()
              elif not copy:
                  values = values.view()
              b = b.make_block_same_class(values, placement=placement)
          elif is_uniform_join_units(join_units):
              b = join_units[0].block.concat_same_type(
                  [ju.block for ju in join_units], placement=placement)
          else:
              b = make_block(
                  concatenate_join_units(join_units, concat_axis, copy=copy),
                  placement=placement)
          blocks.append(b)
  
      return BlockManager(blocks, axes)
docs: Concatenate block managers into one.
  
      Parameters
      ----------
      mgrs_indexers : list of (BlockManager, {axis: indexer,...}) tuples
      axes : list of Index
      concat_axis : int
      copy : bool