class_docstr: An exchange where assets are traded.
  
  Parameters
  ----------
  name : str or None
      The full name of the exchange, for example 'NEW YORK STOCK EXCHANGE' or
      'NASDAQ GLOBAL MARKET'.
  canonical_name : str
      The canonical name of the exchange, for example 'NYSE' or 'NASDAQ'. If
      None this will be the same as the name.
  country_code : str
      The country code where the exchange is located.
  
  Attributes
  ----------
  name : str or None
      The full name of the exchange, for example 'NEW YORK STOCK EXCHANGE' or
      'NASDAQ GLOBAL MARKET'.
  canonical_name : str
      The canonical name of the exchange, for example 'NYSE' or 'NASDAQ'. If
      None this will be the same as the name.
  country_code : str
      The country code where the exchange is located.
  calendar : TradingCalendar
      The trading calendar the exchange uses.
code: def __repr__(self):
      return "%s(%r, %r, %r)" % (
          type(self).__name__,
          self.name,
          self.canonical_name,
          self.country_code,
      )
  
imports: from zipline.utils.calendars import get_calendar
label_desc: Use image node_id 2 for calling the ExchangeInfo obj's underlying member method code with example usage: obj.__repr__() and returns: unknown