code: def is_game_over(self, *, claim_draw: bool = False) -> bool:
          
          # Seventyfive-move rule.
          if self.is_seventyfive_moves():
              return True
  
          # Insufficient material.
          if self.is_insufficient_material():
              return True
  
          # Stalemate or checkmate.
          if not any(self.generate_legal_moves()):
              return True
  
          # Fivefold repetition.
          if self.is_fivefold_repetition():
              return True
  
          # Claim draw.
          if claim_draw and self.can_claim_draw():
              return True
  
          return False
docs: Checks if the game is over due to
          :func:`checkmate <chess.Board.is_checkmate()>`,
          :func:`stalemate <chess.Board.is_stalemate()>`,
          :func:`insufficient material <chess.Board.is_insufficient_material()>`,
          the :func:`seventyfive-move rule <chess.Board.is_seventyfive_moves()>`,
          :func:`fivefold repetition <chess.Board.is_fivefold_repetition()>`
          or a :func:`variant end condition <chess.Board.is_variant_end()>`.
  
          The game is not considered to be over by the
          :func:`fifty-move rule <chess.Board.can_claim_fifty_moves()>` or
          :func:`threefold repetition <chess.Board.can_claim_threefold_repetition()>`,
          unless *claim_draw* is given. Note that checking the latter can be
          slow.