docs: def place_bid(self, owner_id, bid):
          """
          Submits a bid for this tick for current player. This is not a guarantee that it will be accepted!
          If other players submit a higher bid this same tick, the bid won't be counted. Try again next tick if it's not
          too high!
          :param int owner_id: id of owner who is submitting the bid
          :param int bid: bid amount
  
          :raise InvalidActionError: if the action is not allowed according to the rules. See the error message
              for details.
          """
  
          if self.state != AuctionState.BID:
              raise InvalidActionError("Bid was attempted, but it is not currently time to submit bids.")
          elif self.bid >= bid:
              raise InvalidActionError("Bid amount " + str(bid) + " must be greater than current bid of " + str(self.bid))
          elif not self.owners[owner_id].can_buy(self.nominee, bid):
              raise InvalidActionError("The owner with index " + str(owner_id) +
                                       " cannot afford a bid of " + str(bid) + " for player " + self.nominee.name +
                                       " or cannot actually buy this player (due to "
                                       "not having any free slots)")
  
          # success, add their bid to the current tick
          self.tickbids[owner_id] = bid