docs: def difference(self,
                     geometries,
                     sr,
                     geometry
                     ):
          """
          The difference operation is performed on a geometry service resource. This 
          operation constructs the set-theoretic difference between each element of an 
          array of geometries and another geometry, the so-called difference geometry. 
          In other words, let B be the difference geometry. For each geometry, A, in 
          the input geometry array, it constructs A - B.
          
          Inputs:
              geometries - array of points, multipoints, polylines or polygons (structured 
                           as JSON geometry objects returned by the ArcGIS REST API).
              geometry - single geometry of any type and of a dimension equal to or greater 
                         than the elements of geometries (structured as JSON geometry objects 
                         returned by the ArcGIS REST API).
              sr - spatial reference of the input geometries WKID.
          """
          url = self._url + "/difference"
          params = {
              "f" : "json",
              "sr" : sr
  
          }
          if isinstance(geometries, list) and len(geometries) > 0:
              template = {"geometryType": None,
                          "geometries" : []}
              for g in geometries:
                  if isinstance(g, Polyline):
                      template['geometryType'] = "esriGeometryPolyline"
                  elif isinstance(g, Polygon):
                      template['geometryType'] = "esriGeometryPolygon"
                  elif isinstance(g, Point):
                      template['geometryType'] = "esriGeometryPoint"
                  elif isinstance(g, Point):
                      template['geometryType'] = "esriGeometryMultipoint"
                  else:
                      raise AttributeError("Invalid geometry type")
                  template['geometries'].append(g.asDictionary)
              del g
              params['geometries'] = template
          geomTemplate = {"geometryType": None,
                          "geometries" : []
                          }
          if isinstance(geometry, Polyline):
              geomTemplate['geometryType'] = "esriGeometryPolyline"
          elif isinstance(geometry, Polygon):
              geomTemplate['geometryType'] = "esriGeometryPolygon"
          elif isinstance(geometry, Point):
              geomTemplate['geometryType'] = "esriGeometryPoint"
          elif isinstance(geometry, Point):
              geomTemplate['geometryType'] = "esriGeometryMultipoint"
          else:
              raise AttributeError("Invalid geometry type")
          geomTemplate['geometry'] = geometry.asDictionary
          params['geometry'] = geomTemplate
          return self._get(url=url, param_dict=params,
                              securityHandler=self._securityHandler,
                              proxy_port=self._proxy_port,
                              proxy_url=self._proxy_url)