docs: def get_splitting_stream(self, input_plate_value):
          """
          Get the splitting stream
  
          :param input_plate_value: The input plate value
          :return: The splitting stream
          """
          if not self.splitting_node:
              return None
  
          if len(self.splitting_node.plates) == 0:
              # Use global plate value
              return self.splitting_node.streams[None]
  
          if len(self.splitting_node.plates) > 1:
              raise ValueError("Splitting node cannot live on multiple plates for factor {}"
                               .format(self.factor_id))
  
          # now len(self.splitting_node.plates) == 1:
          if not self.input_plate and len(self.splitting_node.plates) > 0:
              raise ValueError("Splitting node cannot live on a plate if there is no input plate")
  
          splitting_plate = self.splitting_node.plates[0]
          if self.input_plate == splitting_plate:
              # Use matching plate value
              splitting_stream = self.splitting_node.streams[input_plate_value]
          else:
              # First check if it's a direct child
              if splitting_plate.is_child(self.input_plate):
                  ppv = filter(lambda x: all(p in input_plate_value for p in x), self.input_plate.parent.values)
                  if len(ppv) != 1:
                      raise ValueError("Parent plate value not found")
                  splitting_stream = self.splitting_node.streams[ppv[0]]
              # Then more generally if it's a descendant
              elif splitting_plate.is_descendant(self.input_plate):
                  # Here we need to find the splitting plate value that is valid for the
                  # current input plate value
                  # TODO: This needs checking - is the logic still the same as for the case above?
                  ppv = filter(lambda x: all(p in input_plate_value for p in x), self.input_plate.parent.values)
                  if len(ppv) != 1:
                      raise ValueError("Parent plate value not found")
                  splitting_stream = self.splitting_node.streams[ppv]
              else:
                  raise IncompatiblePlatesError(
                      "Splitting node plate {} does not match input plate {} for factor {}"
                      .format(self.input_plate, self.splitting_node.plates[0], self.factor_id))
          return splitting_stream