code: def uci(self) -> str:
          
          if self.drop:
              return piece_symbol(self.drop).upper() + "@" + SQUARE_NAMES[self.to_square]
          elif self.promotion:
              return SQUARE_NAMES[self.from_square] + SQUARE_NAMES[self.to_square] + piece_symbol(self.promotion)
          elif self:
              return SQUARE_NAMES[self.from_square] + SQUARE_NAMES[self.to_square]
          else:
              return "0000"
docs: Gets an UCI string for the move.
  
          For example, a move from a7 to a8 would be ``a7a8`` or ``a7a8q``
          (if the latter is a promotion to a queen).
  
          The UCI representation of a null move is ``0000``.