docstr: Reduce the scatter a list of tensors across the group.
  
  Args:
      tensors: the output tensors (could be unspecified), each
                      located on CPU.
      tensor_lists (List[List]): the list of tensors to be reduced then
                                 scattered.
      reducescatter_options: reduce-scatter options.
  
  Returns:
      None
docstr_tok: ["Reduce","the","scatter","a","list","of","tensors","across","the","group",".","Args",":","tensors",":","the","output","tensors","(","could","be","unspecified",")",",","each","located","on","CPU",".","tensor_lists","(","List","[","List","]",")",":","the","list","of","tensors","to","be","reduced","then","scattered",".","reducescatter_options",":","reduce-scatter","options",".","Returns",":","None"]
code: def reducescatter(
      self,
      tensors,
      tensor_lists,
      reducescatter_options=ReduceScatterOptions(),
  ):
      """Reduce the scatter a list of tensors across the group.
  
      Args:
          tensors: the output tensors (could be unspecified), each
                          located on CPU.
          tensor_lists (List[List]): the list of tensors to be reduced then
                                     scattered.
          reducescatter_options: reduce-scatter options.
  
      Returns:
          None
      """
  
      def collective_fn(input_tensor, output_tensor, context):
          size = gloo_util.get_tensor_n_elements(input_tensor)
          world_size = self._gloo_context.size
          pygloo.reduce_scatter(
              context,
              gloo_util.get_tensor_ptr(input_tensor),
              gloo_util.get_tensor_ptr(output_tensor),
              size,
              [size // world_size for _ in range(world_size)],
              gloo_util.get_gloo_tensor_dtype(output_tensor),
              gloo_util.get_gloo_reduce_op(
                  reducescatter_options.reduceOp
              ),
          )
  
      _check_inputs_compatibility_for_scatter_gather(
          tensors, tensor_lists
      )
      input_flattened = [
          _flatten_for_scatter_gather(tensor_list, copy=False)
          for tensor_list in tensor_lists
      ]
  
      def preprocess_fn():
          for i, tensor_list in enumerate(tensor_lists):
              for j, tensor in enumerate(tensor_list):
                  gloo_util.copy_tensor(input_flattened[i][j], tensor)
  
      self._collective(
          input_flattened,
          tensors,
          collective_fn,
          preprocess_fn=preprocess_fn,
      )
  
imports: import datetime
  import logging
  import os
  import shutil
  import time
  import numpy
  import pygloo
  import ray
  from ray._private import ray_constants
  from ray.util.collective.collective_group import gloo_util
  from ray.util.collective.collective_group.base_collective_group import BaseGroup
  from ray.util.collective.const import get_store_name
  from ray.util.collective.types import AllGatherOptions, AllReduceOptions, Backend, BarrierOptions, BroadcastOptions, RecvOptions, ReduceOptions, ReduceScatterOptions, SendOptions
label_desc: Use image node_id 9 for calling the GLOOGroup obj's underlying member method code with example usage: obj.reducescatter(tensors, tensor_lists, reducescatter_options) without return types