def METHOD_NAME(self, *,
         per_page: int = 100,
         branch_id: Optional[UUID] = None,
         version: Optional[Union[int, str]] = None) -> Iterator[ExperimentDataSource]:
    """Paginate over the experiment data sources.
    Parameters
    ---------
    per_page: int, optional
        Max number of results to return per page. Default is 100.  This parameter
        is used when making requests to the backend service.  If the page parameter
        is specified it limits the maximum number of elements in the response.
    branch_id: UUID, optional
        Filter the list by the root branch ID.
    version: Union[int, str], optional
        Filter the list by the data source version. Also accepts "latest".
    Returns
    -------
    Iterator[ExperimentDataSource]
        An iterator that can be used to loop over all matching experiment data sources.
    """
    params = {}
    if branch_id:
        params["branch"] = branch_id
    if version:
        params["version"] = version
    fetcher = partial(self._fetch_page, additional_params=params)
    return self._paginator.paginate(page_fetcher=fetcher,
                                    collection_builder=self._build_collection_elements,
                                    per_page=per_page)