docs: def _run_helper(self, graph, protocol: Iterable[Dict]):
          """Help run the protocol.
  
          :param pybel.BELGraph graph: A BEL graph
          :param protocol: The protocol to run, as JSON
          :rtype: pybel.BELGraph
          """
          result = graph
  
          for entry in protocol:
              meta_entry = entry.get('meta')
  
              if meta_entry is None:
                  name, args, kwargs = _get_protocol_tuple(entry)
                  func = self._get_function(name)
                  result = func(result, *args, **kwargs)
              else:
                  networks = (
                      self._run_helper(graph, subprotocol)
                      for subprotocol in entry['pipelines']
                  )
  
                  if meta_entry == META_UNION:
                      result = union(networks)
  
                  elif meta_entry == META_INTERSECTION:
                      result = node_intersection(networks)
  
                  else:
                      raise MetaValueError('invalid meta-command: {}'.format(meta_entry))
  
          return result