class_docstr: Geocoder using the Google Maps v3 API.
  
  Documentation at:
      https://developers.google.com/maps/documentation/geocoding/
  
  Pricing details:
      https://developers.google.com/maps/documentation/geocoding/usage-and-billing
docstr: Return a location point by address.
  
  :param str query: The address or query you wish to geocode. Optional,
      if ``components`` param is set::
  
          >>> g.geocode(components={"city": "Paris", "country": "FR"})
          Location(France, (46.227638, 2.213749, 0.0))
  
  :param bool exactly_one: Return one result or a list of results, if
      available.
  
  :param int timeout: Time, in seconds, to wait for the geocoding service
      to respond before raising a :class:`geopy.exc.GeocoderTimedOut`
      exception. Set this only if you wish to override, on this call
      only, the value set during the geocoder's initialization.
  
  :type bounds: list or tuple of 2 items of :class:`geopy.point.Point` or
      ``(latitude, longitude)`` or ``"%(latitude)s, %(longitude)s"``.
  :param bounds: The bounding box of the viewport within which
      to bias geocode results more prominently.
      Example: ``[Point(22, 180), Point(-22, -180)]``.
  
  :param str region: The region code, specified as a ccTLD
      ("top-level domain") two-character value.
  
  :type components: dict or list
  :param components: Restricts to an area. Can use any combination of:
      `route`, `locality`, `administrative_area`, `postal_code`,
      `country`.
  
      Pass a list of tuples if you want to specify multiple components of
      the same type, e.g.:
  
          >>> [('administrative_area', 'VA'), ('administrative_area', 'Arlington')]
  
  :param str place_id: Retrieve a Location using a Place ID.
      Cannot be not used with ``query`` or ``bounds`` parameters.
  
          >>> g.geocode(place_id='ChIJOcfP0Iq2j4ARDrXUa7ZWs34')
  
  :param str language: The language in which to return results.
  
  :param bool sensor: Whether the geocoding request comes from a
      device with a location sensor.
  
  :rtype: ``None``, :class:`geopy.location.Location` or a list of them, if
      ``exactly_one=False``.
docstr_tok: ["Return","a","location","point","by","address",".",":","param","str","query",":","The","address","or","query","you","wish","to","geocode",".","Optional",",","if","``","components","``","param","is","set",":",":",">",">",">","g.geocode","(","components=","{","``","city","''",":","``","Paris","''",",","``","country","''",":","``","FR","''","}",")","Location","(","France",",","(","46.227638",",","2.213749",",","0.0",")",")",":","param","bool","exactly_one",":","Return","one","result","or","a","list","of","results",",","if","available",".",":","param","int","timeout",":","Time",",","in","seconds",",","to","wait","for","the","geocoding","service","to","respond","before","raising","a",":","class",":","`","geopy.exc.GeocoderTimedOut","`","exception",".","Set","this","only","if","you","wish","to","override",",","on","this","call","only",",","the","value","set","during","the","geocoder","'s","initialization",".",":","type","bounds",":","list","or","tuple","of","2","items","of",":","class",":","`","geopy.point.Point","`","or","``","(","latitude",",","longitude",")","``","or","``","``","%","(","latitude",")","s",",","%","(","longitude",")","s","''","``",".",":","param","bounds",":","The","bounding","box","of","the","viewport","within","which","to","bias","geocode","results","more","prominently",".","Example",":","``","[","Point","(","22",",","180",")",",","Point","(","-22",",","-180",")","]","``",".",":","param","str","region",":","The","region","code",",","specified","as","a","ccTLD","(","``","top-level","domain","''",")","two-character","value",".",":","type","components",":","dict","or","list",":","param","components",":","Restricts","to","an","area",".","Can","use","any","combination","of",":","`","route","`",",","`","locality","`",",","`","administrative_area","`",",","`","postal_code","`",",","`","country","`",".","Pass","a","list","of","tuples","if","you","want","to","specify","multiple","components","of","the","same","type",",","e.g",".",":",">",">",">","[","(","'administrative_area","'",",","'VA","'",")",",","(","'administrative_area","'",",","'Arlington","'",")","]",":","param","str","place_id",":","Retrieve","a","Location","using","a","Place","ID",".","Can","not","be","not","used","with","``","query","``","or","``","bounds","``","parameters",".",">",">",">","g.geocode","(","place_id='ChIJOcfP0Iq2j4ARDrXUa7ZWs34","'",")",":","param","str","language",":","The","language","in","which","to","return","results",".",":","param","bool","sensor",":","Whether","the","geocoding","request","comes","from","a","device","with","a","location","sensor",".",":","rtype",":","``","None","``",",",":","class",":","`","geopy.location.Location","`","or","a","list","of","them",",","if","``","exactly_one=False","``","."]
code: def geocode(
      self,
      query=None,
      *,
      exactly_one=True,
      timeout=DEFAULT_SENTINEL,
      bounds=None,
      region=None,
      components=None,
      place_id=None,
      language=None,
      sensor=False,
  ):
      """
      Return a location point by address.
  
      :param str query: The address or query you wish to geocode. Optional,
          if ``components`` param is set::
  
              >>> g.geocode(components={"city": "Paris", "country": "FR"})
              Location(France, (46.227638, 2.213749, 0.0))
  
      :param bool exactly_one: Return one result or a list of results, if
          available.
  
      :param int timeout: Time, in seconds, to wait for the geocoding service
          to respond before raising a :class:`geopy.exc.GeocoderTimedOut`
          exception. Set this only if you wish to override, on this call
          only, the value set during the geocoder's initialization.
  
      :type bounds: list or tuple of 2 items of :class:`geopy.point.Point` or
          ``(latitude, longitude)`` or ``"%(latitude)s, %(longitude)s"``.
      :param bounds: The bounding box of the viewport within which
          to bias geocode results more prominently.
          Example: ``[Point(22, 180), Point(-22, -180)]``.
  
      :param str region: The region code, specified as a ccTLD
          ("top-level domain") two-character value.
  
      :type components: dict or list
      :param components: Restricts to an area. Can use any combination of:
          `route`, `locality`, `administrative_area`, `postal_code`,
          `country`.
  
          Pass a list of tuples if you want to specify multiple components of
          the same type, e.g.:
  
              >>> [('administrative_area', 'VA'), ('administrative_area', 'Arlington')]
  
      :param str place_id: Retrieve a Location using a Place ID.
          Cannot be not used with ``query`` or ``bounds`` parameters.
  
              >>> g.geocode(place_id='ChIJOcfP0Iq2j4ARDrXUa7ZWs34')
  
      :param str language: The language in which to return results.
  
      :param bool sensor: Whether the geocoding request comes from a
          device with a location sensor.
  
      :rtype: ``None``, :class:`geopy.location.Location` or a list of them, if
          ``exactly_one=False``.
      """
      params = {"sensor": str(sensor).lower()}
      if place_id and (bounds or query):
          raise ValueError(
              "Only one of the `query` or `place id` or `bounds` "
              " parameters must be entered."
          )
  
      if place_id is not None:
          params["place_id"] = place_id
  
      if query is not None:
          params["address"] = query
  
      if query is None and place_id is None and not components:
          raise ValueError(
              "Either `query` or `components` or `place_id` "
              "must be set."
          )
  
      if self.api_key:
          params["key"] = self.api_key
      if bounds:
          params["bounds"] = self._format_bounding_box(
              bounds, "%(lat1)s,%(lon1)s|%(lat2)s,%(lon2)s"
          )
      if region:
          params["region"] = region
      if components:
          params["components"] = self._format_components_param(
              components
          )
      if language:
          params["language"] = language
  
      if self.premier:
          url = self._get_signed_url(params)
      else:
          url = "?".join((self.api, urlencode(params)))
  
      logger.debug("%s.geocode: %s", self.__class__.__name__, url)
      callback = partial(self._parse_json, exactly_one=exactly_one)
      return self._call_geocoder(url, callback, timeout=timeout)
  
imports: import base64
  import collections.abc
  import hashlib
  import hmac
  from calendar import timegm
  from datetime import datetime
  from functools import partial
  from urllib.parse import urlencode
  from geopy.exc import ConfigurationError, GeocoderQueryError, GeocoderQuotaExceeded, GeocoderServiceError, GeocoderUnavailable
  from geopy.geocoders.base import DEFAULT_SENTINEL, Geocoder
  from geopy.location import Location
  from geopy.timezone import ensure_pytz_is_installed, from_timezone_name
  from geopy.util import logger
label_desc: Use image node_id 4 for calling the GoogleV3 obj's underlying member method code with example usage: obj.geocode(query) and returns: self