docs: def and_edge_predicates(edge_predicates: EdgePredicates) -> EdgePredicate:
      """Concatenate multiple edge predicates to a new predicate that requires all predicates to be met."""
      # If something that isn't a list or tuple is given, assume it's a function and return it
      if not isinstance(edge_predicates, Iterable):
          return edge_predicates
  
      edge_predicates = tuple(edge_predicates)
  
      # If only one predicate is given, don't bother wrapping it
      if 1 == len(edge_predicates):
          return edge_predicates[0]
  
      def concatenated_edge_predicate(graph: BELGraph, u: BaseEntity, v: BaseEntity, k: str) -> bool:
          """Pass only for an edge that pass all enclosed predicates.
  
          :return: If the edge passes all enclosed predicates
          """
          return all(
              edge_predicate(graph, u, v, k)
              for edge_predicate in edge_predicates
          )
  
      return concatenated_edge_predicate