docs: def end_parallel(self):
          """
          Ends a parallel region by merging the channels into a single stream.
  
          Returns:
              Stream: Stream for which subsequent transformations are no longer parallelized.
  
          .. seealso:: :py:meth:`set_parallel`, :py:meth:`parallel`
          """
          outport = self.oport
          if isinstance(self.oport.operator, streamsx.topology.graph.Marker):
              if self.oport.operator.kind == "$Union$":
                  pto = self.topology.graph.addPassThruOperator()
                  pto.addInputPort(outputPort=self.oport)
                  outport = pto.addOutputPort(schema=self.oport.schema)
          op = self.topology.graph.addOperator("$EndParallel$")
          op.addInputPort(outputPort=outport)
          oport = op.addOutputPort(schema=self.oport.schema)
          endP = Stream(self.topology, oport)
          return endP