docs: def nominate(self, owner_id, player_idx, bid):
          """
          Nominates the player for auctioning.
  
          :param int owner_id: index of the owner who is nominating
          :param int player_idx: index of the player to nominate in the players list
          :param int bid: starting bid
  
          :raise InvalidActionError: if the action is not allowed according to the rules. See the error message
              for details.
          """
  
          owner = self.owners[owner_id]
          nominated_player = self.players[player_idx]
  
          if self.state != AuctionState.NOMINATE:
              raise InvalidActionError("Owner " + str(owner_id) +
                                       " tried to nominate, but Auction state "
                                       "is not NOMINATE, so nomination is not allowed")
          elif self.turn_index != owner_id:
              raise InvalidActionError("Owner " + str(owner_id) + " tried to nominate, but it is currently " +
                                       str(self.turn_index) + "'s turn")
          elif nominated_player not in self.undrafted_players:
              raise InvalidActionError("Owner " + str(owner_id) + "tried to nominate the player with index " + str(player_idx) + ", named " +
                                       nominated_player.name +
                                       ", but they have already been purchased and cannot be nominated.")
          elif bid > owner.max_bid():
              raise InvalidActionError("Bid amount was " + str(bid) + " but this owner (Owner " + str(owner_id) +
                                       " can only bid a maximum of " +
                                       str(owner.max_bid()))
          elif bid < 1:
              raise InvalidActionError("Owner " + str(owner_id) + "'s bid amount was " + str(bid) +
                                       " but must be greater than 1")
          elif not owner.can_buy(nominated_player, bid):
              raise InvalidActionError("Owner " + str(owner_id) + " cannot make this nomination for player with index "
                                       + str(player_idx) + ", named " +
                                       nominated_player.name + ", because they cannot slot or cannot"
                                       " afford the player for the specified bid amount")
  
          # nomination successful, bidding time
          self.nominee = nominated_player
          self._nominee_index = player_idx
          self.bid = bid
          self.tickbids[owner_id] = bid