docs: def concept_distance(c1, c2):
      """Return the distance between two concepts in concept space.
  
      Args:
          c1 (Concept): The first concept.
          c2 (Concept): The second concept.
  
      Returns:
          float: The distance between the two concepts in concept space.
      """
      # Calculate the sum of the cause and effect EMDs, expanding the repertoires
      # to the combined purview of the two concepts, so that the EMD signatures
      # are the same size.
      cause_purview = tuple(set(c1.cause.purview + c2.cause.purview))
      effect_purview = tuple(set(c1.effect.purview + c2.effect.purview))
      # Take the sum
      return (repertoire_distance(c1.expand_cause_repertoire(cause_purview),
                                  c2.expand_cause_repertoire(cause_purview)) +
              repertoire_distance(c1.expand_effect_repertoire(effect_purview),
                                  c2.expand_effect_repertoire(effect_purview)))