code: def search_features(
              self, feature_set_id=None, parent_id="", reference_name="",
              start=0, end=0, feature_types=[], name="", gene_symbol=""):
          
          request = protocol.SearchFeaturesRequest()
          request.feature_set_id = feature_set_id
          request.parent_id = parent_id
          request.reference_name = reference_name
          request.name = name
          request.gene_symbol = gene_symbol
          request.start = start
          request.end = end
          request.feature_types.extend(feature_types)
          request.page_size = pb.int(self._page_size)
          return self._run_search_request(
              request, "features",
              protocol.SearchFeaturesResponse)
docs: Returns the result of running a search_features method
          on a request with the passed-in parameters.
  
          :param str feature_set_id: ID of the feature Set being searched
          :param str parent_id: ID (optional) of the parent feature
          :param str reference_name: name of the reference to search
              (ex: "chr1")
          :param int start: search start position on reference
          :param int end: end position on reference
          :param feature_types: array of terms to limit search by (ex: "gene")
          :param str name: only return features with this name
          :param str gene_symbol: only return features on this gene
          :return: an iterator over Features as returned in the
              SearchFeaturesResponse object.