class_docstr: Marker and symbol layer
  
  This class represent a layer of markers and symbols. Add this to a
  :class:`gmaps.Map` instance to draw a set of markers or symbols.
  
  In general, prefer instantiating this using the higher-level
  :func:`gmaps.marker_layer` and :func:`gmaps.symbol_layer`
  factory functions.
  
  :param markers: Markers and symbols to draw on the map.
  :type markers: list of :class:`gmaps.Marker` and
      :class:`gmaps.Symbol` objects.
  
  :Examples:
  
  {marker_examples}
  
  To change the style of markers or symbols on an existing layer
  mutate the marker directly.
  
  >>> marker_layer.markers[0].label = 'C'  # markers[0] is a Marker
  >>> marker_layer.markers[0].scale = 5    # markers[0] is a Symbol
class_docstr_tok: ["Marker","and","symbol","layer","This","class","represent","a","layer","of","markers","and","symbols",".","Add","this","to","a",":","class",":","`","gmaps.Map","`","instance","to","draw","a","set","of","markers","or","symbols",".","In","general",",","prefer","instantiating","this","using","the","higher-level",":","func",":","`","gmaps.marker_layer","`","and",":","func",":","`","gmaps.symbol_layer","`","factory","functions",".",":","param","markers",":","Markers","and","symbols","to","draw","on","the","map",".",":","type","markers",":","list","of",":","class",":","`","gmaps.Marker","`","and",":","class",":","`","gmaps.Symbol","`","objects",".",":","Examples",":","{","marker_examples","}","To","change","the","style","of","markers","or","symbols","on","an","existing","layer","mutate","the","marker","directly",".",">",">",">","marker_layer.markers","[","0","]",".label","=","'","C","'","#","markers","[","0","]","is","a","Marker",">",">",">","marker_layer.markers","[","0","]",".scale","=","5","#","markers","[","0","]","is","a","Symbol"]
code: def _calc_bounds(self, change):
      markers = change["new"]
      if markers:
          locations = [marker.location for marker in markers]
          latitudes = [location[0] for location in locations]
          longitudes = [location[1] for location in locations]
          min_latitude, max_latitude = bounds.latitude_bounds(latitudes)
          min_longitude, max_longitude = bounds.longitude_bounds(
              longitudes
          )
          self.data_bounds = [
              (min_latitude, min_longitude),
              (max_latitude, max_longitude),
          ]
          self.has_bounds = True
      else:
          self.has_bounds = False
  
imports: import ipywidgets
  from traitlets import Unicode, Int, List, observe, HasTraits, Bool
  import gmaps.geotraitlets
  import gmaps.bounds
  from .maps import DEFAULT_CENTER, GMapsWidgetMixin
  from .locations import locations_to_list
  from .options import merge_option_dicts, is_atomic, is_color_atomic
  from ._docutils import doc_subst
label_desc: Use image node_id 1 for calling the Markers obj's underlying member method code with example usage: obj._calc_bounds(change) without return types