docs: def from_latlon(latitude, longitude, force_zone_number=None, force_zone_letter=None):
      """This function convert Latitude and Longitude to UTM coordinate
  
          Parameters
          ----------
          latitude: float
              Latitude between 80 deg S and 84 deg N, e.g. (-80.0 to 84.0)
  
          longitude: float
              Longitude between 180 deg W and 180 deg E, e.g. (-180.0 to 180.0).
  
          force_zone number: int
              Zone Number is represented with global map numbers of an UTM Zone
              Numbers Map. You may force conversion including one UTM Zone Number.
              More information see utmzones [1]_
  
         .. _[1]: http://www.jaworski.ca/utmzones.htm
      """
      if not in_bounds(latitude, -80.0, 84.0):
          raise OutOfRangeError('latitude out of range (must be between 80 deg S and 84 deg N)')
      if not in_bounds(longitude, -180.0, 180.0):
          raise OutOfRangeError('longitude out of range (must be between 180 deg W and 180 deg E)')
      if force_zone_number is not None:
          check_valid_zone(force_zone_number, force_zone_letter)
  
      lat_rad = mathlib.radians(latitude)
      lat_sin = mathlib.sin(lat_rad)
      lat_cos = mathlib.cos(lat_rad)
  
      lat_tan = lat_sin / lat_cos
      lat_tan2 = lat_tan * lat_tan
      lat_tan4 = lat_tan2 * lat_tan2
  
      if force_zone_number is None:
          zone_number = latlon_to_zone_number(latitude, longitude)
      else:
          zone_number = force_zone_number
  
      if force_zone_letter is None:
          zone_letter = latitude_to_zone_letter(latitude)
      else:
          zone_letter = force_zone_letter
  
      lon_rad = mathlib.radians(longitude)
      central_lon = zone_number_to_central_longitude(zone_number)
      central_lon_rad = mathlib.radians(central_lon)
  
      n = R / mathlib.sqrt(1 - E * lat_sin**2)
      c = E_P2 * lat_cos**2
  
      a = lat_cos * (lon_rad - central_lon_rad)
      a2 = a * a
      a3 = a2 * a
      a4 = a3 * a
      a5 = a4 * a
      a6 = a5 * a
  
      m = R * (M1 * lat_rad -
               M2 * mathlib.sin(2 * lat_rad) +
               M3 * mathlib.sin(4 * lat_rad) -
               M4 * mathlib.sin(6 * lat_rad))
  
      easting = K0 * n * (a +
                          a3 / 6 * (1 - lat_tan2 + c) +
                          a5 / 120 * (5 - 18 * lat_tan2 + lat_tan4 + 72 * c - 58 * E_P2)) + 500000
  
      northing = K0 * (m + n * lat_tan * (a2 / 2 +
                                          a4 / 24 * (5 - lat_tan2 + 9 * c + 4 * c**2) +
                                          a6 / 720 * (61 - 58 * lat_tan2 + lat_tan4 + 600 * c - 330 * E_P2)))
  
      if mixed_signs(latitude):
          raise ValueError("latitudes must all have the same sign")
      elif negative(latitude):
          northing += 10000000
  
      return easting, northing, zone_number, zone_letter