code: def _merge_multi_context(outputs, major_axis):
      
      rets = []
      for tensors, axis in zip(outputs, major_axis):
          if axis >= 0:
              # pylint: disable=no-member,protected-access
              if len(tensors) == 1:
                  rets.append(tensors[0])
              else:
                  # Concatenate if necessary
                  rets.append(nd.concat(*[tensor.as_in_context(tensors[0].context)
                                          for tensor in tensors],
                                        dim=axis))
              # pylint: enable=no-member,protected-access
          else:
              # negative axis means the there is no batch_size axis, and all the
              # results should be the same on each device. We simply take the
              # first one, without checking they are actually the same
              rets.append(tensors[0])
      return rets
docs: Merge outputs that lives on multiple context into one, so that they look
      like living on one context.