docs: def main_composite(kind, toolkits=None, name=None):
      """Wrap a main composite invocation as a `Topology`.
    
      Provides a bridge between an SPL application (main composite)
      and a `Topology`. Create a `Topology` that contains just
      the invocation of the main composite defined by `kind`.
  
      The returned `Topology` may be used like any other topology
      instance including job configuration, tester or even addition
      of SPL operator invocations or functional transformations.
  
      .. note:: Since a main composite by definition has no input
          or output ports any functionality added to the topology cannot
          interact directly with its invocation.
  
      Args:
          kind(str): Kind of the main composite operator invocation.
          toolkits(list[str]): Optional list of toolkits the main composite depends on.
          name(str): Invocation name for the main composite.
  
      Returns:
          tuple: tuple containing:
  
          - **Topology**: Topology with main composite invocation.
          - **Invoke**: Invocation of the main composite
  
      .. versionadded: 1.11
      """
      if '::' in kind:
          ns, name = kind.rsplit('::', 1)
          ns += '._spl'
      else:
          raise ValueError('Main composite requires a namespace qualified name: ' + str(kind))
      topo = streamsx.topology.topology.Topology(name=name, namespace=ns)
      if toolkits:
          for tk_path in toolkits:
              streamsx.spl.toolkit.add_toolkit(topo, tk_path)
      return topo, Invoke(topo, kind, name=name)