code: def parse_uci(self, uci: str) -> Move:
          
          move = Move.from_uci(uci)
  
          if not move:
              return move
  
          move = self._to_chess960(move)
          move = self._from_chess960(self.chess960, move.from_square, move.to_square, move.promotion, move.drop)
  
          if not self.is_legal(move):
              raise ValueError("illegal uci: {!r} in {}".format(uci, self.fen()))
  
          return move
docs: Parses the given move in UCI notation.
  
          Supports both Chess960 and standard UCI notation.
  
          The returned move is guaranteed to be either legal or a null move.
  
          :raises: :exc:`ValueError` if the move is invalid or illegal in the
              current position (but not a null move).