def generate_review_allocations(
            self, master_repo_name: str, students: Iterable[str],
            num_reviews: int,
            review_team_name_function: Callable[[str, str], str]
    ) -> Mapping[str, List[str]]:
        """Generate a (peer_review_team -> reviewers) mapping for each student
        repository (i.e. <student>-<master_repo_name>), where len(reviewers) =
        num_reviews.

        review_team_name_function should be used to generate review team names.
        It should be called like:

        .. code-block:: python
            
            review_team_name_function(master_repo_name, student)

        .. important::
                
            There must be strictly more students than reviewers per repo
            (`num_reviews`). Otherwise, allocation is impossible.

        Args:
            master_repo_name: Name of a master repository.
            students: Students for which to generate peer review allocations.
            num_reviews: Amount of reviews each student should perform (and
                consequently amount of reviewers per repo)
            review_team_name_function: A function that takes a master repo name
                as its first argument, and a student username as its second, and
                returns a review team name.
        Returns:
            a (peer_review_team -> reviewers) mapping for each student repository.
        """
def generate_review_allocations ( self , master_repo_name : str , students : Iterable [ str ] , num_reviews : int , review_team_name_function : Callable [ [ str , str ] , str ] ) -> Mapping [ str , List [ str ] ] :
Generate a (peer_review_team -> reviewers) mapping for each student
        repository (i.e. <student>-<master_repo_name>), where len(reviewers) =
        num_reviews.

        review_team_name_function should be used to generate review team names.
        It should be called like:

        .. code-block:: python
            
            review_team_name_function(master_repo_name, student)

        .. important::
                
            There must be strictly more students than reviewers per repo
            (`num_reviews`). Otherwise, allocation is impossible.

        Args:
            master_repo_name: Name of a master repository.
            students: Students for which to generate peer review allocations.
            num_reviews: Amount of reviews each student should perform (and
                consequently amount of reviewers per repo)
            review_team_name_function: A function that takes a master repo name
                as its first argument, and a student username as its second, and
                returns a review team name.
        Returns:
            a (peer_review_team -> reviewers) mapping for each student repository.