docs: def thing(random=random, *args, **kwargs):
      """
      Return a ... thing.
  
      >>> mock_random.seed(0)
      >>> thing(random=mock_random)
      'two secrets'
      >>> mock_random.seed(1)
      >>> thing(random=mock_random, capitalize=True)
      'Mighty Poop'
      >>> mock_random.seed(2)
      >>> thing(random=mock_random, slugify=True)
      'poop'
      >>> mock_random.seed(4)
      >>> thing(random=mock_random, slugify=True)
      'two-chimps'
  
      """
  
      def noun_or_adjective_noun():
          if random.choice([True, False]):
              return noun(random=random)
          else:
              return adjective(random=random) + " " + noun(random=random)
  
      def plural_or_adjective_plural():
          if random.choice([True, False]):
              return plural(random=random)
          else:
              return adjective(random=random) + " " + plural(random=random)
  
      def container_of_nouns():
          return container(random=random) + " of " + plural_or_adjective_plural()
  
      def number_of_plurals():
          return numberwang(random=random) + " " + plural_or_adjective_plural()
  
      if "an" in kwargs and kwargs['an']:
          return random.choice([
              inflectify.a(noun_or_adjective_noun()),
              inflectify.a(container_of_nouns()),
              number_of_plurals(),
          ])
      else:
          return random.choice([
              noun_or_adjective_noun(),
              container_of_nouns(),
              number_of_plurals(),
          ])