class_docstr: Reader for raw pricing data written by BcolzDailyOHLCVWriter.
  
  Parameters
  ----------
  table : bcolz.ctable
      The ctable contaning the pricing data, with attrs corresponding to the
      Attributes list below.
  read_all_threshold : int
      The number of equities at which; below, the data is read by reading a
      slice from the carray per asset.  above, the data is read by pulling
      all of the data for all assets into memory and then indexing into that
      array for each day and asset pair.  Used to tune performance of reads
      when using a small or large number of equities.
  
  Attributes
  ----------
  The table with which this loader interacts contains the following
  attributes:
  
  first_row : dict
      Map from asset_id -> index of first row in the dataset with that id.
  last_row : dict
      Map from asset_id -> index of last row in the dataset with that id.
  calendar_offset : dict
      Map from asset_id -> calendar index of first row.
  start_session_ns: int
      Epoch ns of the first session used in this dataset.
  end_session_ns: int
      Epoch ns of the last session used in this dataset.
  calendar_name: str
      String identifier of trading calendar used (ie, "NYSE").
  
  We use first_row and last_row together to quickly find ranges of rows to
  load when reading an asset's data into memory.
  
  We use calendar_offset and calendar to orient loaded blocks within a
  range of queried dates.
  
  Notes
  ------
  A Bcolz CTable is comprised of Columns and Attributes.
  The table with which this loader interacts contains the following columns:
  
  ['open', 'high', 'low', 'close', 'volume', 'day', 'id'].
  
  The data in these columns is interpreted as follows:
  
  - Price columns ('open', 'high', 'low', 'close') are interpreted as 1000 *
    as-traded dollar value.
  - Volume is interpreted as as-traded volume.
  - Day is interpreted as seconds since midnight UTC, Jan 1, 1970.
  - Id is the asset id of the row.
  
  The data in each column is grouped by asset and then sorted by day within
  each asset block.
  
  The table is built to represent a long time range of data, e.g. ten years
  of equity data, so the lengths of each asset block is not equal to each
  other. The blocks are clipped to the known start and end date of each asset
  to cut down on the number of empty values that would need to be included to
  make a regular/cubic dataset.
  
  When read across the open, high, low, close, and volume with the same
  index should represent the same asset and day.
  
  See Also
  --------
  zipline.data.bcolz_daily_bars.BcolzDailyBarWriter
class_docstr_tok: ["Reader","for","raw","pricing","data","written","by","BcolzDailyOHLCVWriter",".","Parameters","--","--","--","--","--","table",":","bcolz.ctable","The","ctable","contaning","the","pricing","data",",","with","attrs","corresponding","to","the","Attributes","list","below",".","read_all_threshold",":","int","The","number","of","equities","at","which",";","below",",","the","data","is","read","by","reading","a","slice","from","the","carray","per","asset",".","above",",","the","data","is","read","by","pulling","all","of","the","data","for","all","assets","into","memory","and","then","indexing","into","that","array","for","each","day","and","asset","pair",".","Used","to","tune","performance","of","reads","when","using","a","small","or","large","number","of","equities",".","Attributes","--","--","--","--","--","The","table","with","which","this","loader","interacts","contains","the","following","attributes",":","first_row",":","dict","Map","from","asset_id","-",">","index","of","first","row","in","the","dataset","with","that","id",".","last_row",":","dict","Map","from","asset_id","-",">","index","of","last","row","in","the","dataset","with","that","id",".","calendar_offset",":","dict","Map","from","asset_id","-",">","calendar","index","of","first","row",".","start_session_ns",":","int","Epoch","ns","of","the","first","session","used","in","this","dataset",".","end_session_ns",":","int","Epoch","ns","of","the","last","session","used","in","this","dataset",".","calendar_name",":","str","String","identifier","of","trading","calendar","used","(","ie",",","``","NYSE","''",")",".","We","use","first_row","and","last_row","together","to","quickly","find","ranges","of","rows","to","load","when","reading","an","asset","'s","data","into","memory",".","We","use","calendar_offset","and","calendar","to","orient","loaded","blocks","within","a","range","of","queried","dates",".","Notes","--","--","--","A","Bcolz","CTable","is","comprised","of","Columns","and","Attributes",".","The","table","with","which","this","loader","interacts","contains","the","following","columns",":","[","'open","'",",","'high","'",",","'low","'",",","'close","'",",","'volume","'",",","'day","'",",","'id","'","]",".","The","data","in","these","columns","is","interpreted","as","follows",":","-","Price","columns","(","'open","'",",","'high","'",",","'low","'",",","'close","'",")","are","interpreted","as","1000","*","as-traded","dollar","value",".","-","Volume","is","interpreted","as","as-traded","volume",".","-","Day","is","interpreted","as","seconds","since","midnight","UTC",",","Jan","1",",","1970",".","-","Id","is","the","asset","id","of","the","row",".","The","data","in","each","column","is","grouped","by","asset","and","then","sorted","by","day","within","each","asset","block",".","The","table","is","built","to","represent","a","long","time","range","of","data",",","e.g",".","ten","years","of","equity","data",",","so","the","lengths","of","each","asset","block","is","not","equal","to","each","other",".","The","blocks","are","clipped","to","the","known","start","and","end","date","of","each","asset","to","cut","down","on","the","number","of","empty","values","that","would","need","to","be","included","to","make","a","regular\/cubic","dataset",".","When","read","across","the","open",",","high",",","low",",","close",",","and","volume","with","the","same","index","should","represent","the","same","asset","and","day",".","See","Also","--","--","--","--","zipline.data.bcolz_daily_bars.BcolzDailyBarWriter"]
code: def currency_codes(self, sids):
      # XXX: This is pretty inefficient. This reader doesn't really support
      # country codes, so we always either return USD or None if we don't
      # know about the sid at all.
      first_rows = self._first_rows
      out = []
      for sid in sids:
          if sid in first_rows:
              out.append("USD")
          else:
              out.append(None)
      return np.array(out, dtype=object)
  
imports: from functools import partial
  import warnings
  from bcolz import carray, ctable
  import logbook
  import numpy
  from numpy import array, full, iinfo, nan
  from pandas import DatetimeIndex, NaT, read_csv, to_datetime, Timestamp
  from six import iteritems, viewkeys
  from toolz import compose
  from trading_calendars import get_calendar
  from zipline.data.session_bars import CurrencyAwareSessionBarReader
  from zipline.data.bar_reader import NoDataAfterDate, NoDataBeforeDate, NoDataOnDate
  from zipline.utils.functional import apply
  from zipline.utils.input_validation import expect_element
  from zipline.utils.numpy_utils import iNaT, float64_dtype, uint32_dtype
  from zipline.utils.memoize import lazyval
  from zipline.utils.cli import maybe_show_progress
  from ._equities import _compute_row_slices, _read_bcolz_data
label_desc: Use image node_id 17 for calling the BcolzDailyBarReader obj's underlying member method code with example usage: obj.currency_codes(sids) and returns: np