code: def __iter__(self):
      asset_cache = {}
      for dt, series in self.df.iterrows():
          if dt < self.start_date:
              continue
  
          if dt > self.end_date:
              return
  
          event = FetcherEvent()
          # when dt column is converted to be the dataframe's index
          # the dt column is dropped. So, we need to manually copy
          # dt into the event.
          event.dt = dt
          for k, v in series.iteritems():
              # convert numpy integer types to
              # int. This assumes we are on a 64bit
              # platform that will not lose information
              # by casting.
              # TODO: this is only necessary on the
              # amazon qexec instances. would be good
              # to figure out how to use the numpy dtypes
              # without this check and casting.
              if isinstance(v, numpy.integer):
                  v = int(v)
  
              setattr(event, k, v)
  
          # If it has start_date, then it's already an Asset
          # object from asset_for_symbol, and we don't have to
          # transform it any further. Checking for start_date is
          # faster than isinstance.
          if event.sid in asset_cache:
              event.sid = asset_cache[event.sid]
          elif hasattr(event.sid, "start_date"):
              # Clone for user algo code, if we haven't already.
              asset_cache[event.sid] = event.sid
          elif self.finder and isinstance(event.sid, int):
              asset = self.finder.retrieve_asset(
                  event.sid, default_none=True
              )
              if asset:
                  # Clone for user algo code.
                  event.sid = asset_cache[asset] = asset
              elif self.mask:
                  # When masking drop all non-mappable values.
                  continue
              elif self.symbol is None:
                  # If the event's sid property is an int we coerce
                  # it into an Equity.
                  event.sid = asset_cache[event.sid] = Equity(event.sid)
  
          event.type = DATASOURCE_TYPE.CUSTOM
          event.source_id = self.namestring
          yield event
  
imports: from abc import ABCMeta, abstractmethod
  from collections import namedtuple
  import hashlib
  from textwrap import dedent
  import warnings
  from logbook import Logger
  import numpy
  import pandas
  from pandas import read_csv
  import pytz
  import requests
  from six import StringIO, iteritems, with_metaclass
  from zipline.errors import MultipleSymbolsFound, SymbolNotFound, ZiplineError
  from zipline.protocol import DATASOURCE_TYPE, Event
  from zipline.assets import Equity
label_desc: Use image node_id 9 for calling the PandasCSV obj's underlying member method code with example usage: obj.__iter__() without return types