code: def mock_geocoder() -> "MockGeocoder":
      point_gdf = geo_data_frame([Point(-5, 17)])
      point_dict = {
          "coord": ['{"type": "Point", "coordinates": [-5.0, 17.0]}']
      }
  
      polygon_gdf = geo_data_frame(
          [
              MultiPolygon(
                  [
                      Polygon(
                          LinearRing(
                              [(11, 12), (13, 14), (15, 13), (7, 4)]
                          )
                      ),
                      Polygon(LinearRing([(10, 2), (13, 10), (12, 3)])),
                  ]
              )
          ]
      )
  
      polygon_dict = {
          "coord": [
              "{"
              '"type": "MultiPolygon", '
              '"coordinates": ['
              "[[[11.0, 12.0], [13.0, 14.0], [15.0, 13.0], [7.0, 4.0], [11.0, 12.0]]], "
              "[[[10.0, 2.0], [13.0, 10.0], [12.0, 3.0], [10.0, 2.0]]]]"
              "}"
          ]
      }
  
      class MockGeocoder(Geocoder):
          def __init__(self):
              self._get_geocodes_invoked = False
              self._limits_fetched = False
              self._centroids_fetched = False
              self._boundaries_fetched = False
  
          def get_test_point_dict(self):
              return point_dict
  
          def get_test_polygon_dict(self):
              return polygon_dict
  
          def get_test_geocodes(self) -> dict:
              return {"request": ["foo"], "found name": ["FOO"]}
  
          def get_geocodes(self):
              self._get_geocodes_invoked = True
              return DataFrame(self.get_test_geocodes())
  
          def get_limits(self) -> GeoDataFrame:
              self._limits_fetched = True
              return polygon_gdf
  
          def get_centroids(self) -> GeoDataFrame:
              self._centroids_fetched = True
              return point_gdf
  
          def get_boundaries(self, resolution=None) -> GeoDataFrame:
              self._boundaries_fetched = True
              return polygon_gdf
  
          def assert_get_geocodes_invocation(self):
              assert (
                  self._get_geocodes_invoked
              ), "to_data_frame() invocation expected, but not happened"
  
      return MockGeocoder()
  
imports: import pandas
  import pytest
  from geopandas import GeoDataFrame
  from pandas import DataFrame
  from shapely.geometry import Point, Polygon, LinearRing, MultiPolygon
  from lets_plot._kbridge import _standardize_plot_spec
  from lets_plot.geo_data import DF_COLUMN_CITY, DF_COLUMN_STATE, DF_COLUMN_COUNTY
  from lets_plot.geo_data.geocoder import Geocoder
  from lets_plot.plot import ggplot, geom_polygon, geom_point, geom_map, geom_rect, geom_text, geom_path, geom_livemap
  from lets_plot.plot import util
  from geo_data_test_util import get_map_data_meta, assert_error
label_desc: Use image node_id 15 for calling a global function with example usage: mock_geocoder() and returns: MockGeocoder, point_dict, polygon_dict, dict, DataFrame, polygon_gdf, point_gdf, polygon_gdf