class_docstr: Estimates loader that loads data that needs to be split-adjusted.
  
  Parameters
  ----------
  split_adjustments_loader : SQLiteAdjustmentReader
      The loader to use for reading split adjustments.
  split_adjusted_column_names : iterable of str
      The column names that should be split-adjusted.
  split_adjusted_asof : pd.Timestamp
      The date that separates data into 2 halves: the first half is the set
      of dates up to and including the split_adjusted_asof date. All
      adjustments occurring during this first half are applied  to all
      dates in this first half. The second half is the set of dates after
      the split_adjusted_asof date. All adjustments occurring during this
      second half are applied sequentially as they appear in the timeline.
class_docstr_tok: ["Estimates","loader","that","loads","data","that","needs","to","be","split-adjusted",".","Parameters","--","--","--","--","--","split_adjustments_loader",":","SQLiteAdjustmentReader","The","loader","to","use","for","reading","split","adjustments",".","split_adjusted_column_names",":","iterable","of","str","The","column","names","that","should","be","split-adjusted",".","split_adjusted_asof",":","pd.Timestamp","The","date","that","separates","data","into","2","halves",":","the","first","half","is","the","set","of","dates","up","to","and","including","the","split_adjusted_asof","date",".","All","adjustments","occurring","during","this","first","half","are","applied","to","all","dates","in","this","first","half",".","The","second","half","is","the","set","of","dates","after","the","split_adjusted_asof","date",".","All","adjustments","occurring","during","this","second","half","are","applied","sequentially","as","they","appear","in","the","timeline","."]
docstr: Collect split adjustments that occur after the
  split-adjusted-asof-date. Each adjustment needs to be applied to all
  dates on which knowledge for the requested quarter was older than the
  date of the adjustment.
  
  Parameters
  ----------
  post_adjustments : tuple(list(float), list(int), pd.DatetimeIndex)
      The adjustment values, indexes in `dates`, and timestamps for
      adjustments that happened after the split-asof-date.
  requested_qtr_data : pd.DataFrame
      The requested quarter data for each calendar date per sid.
  sid : int
      The sid for which adjustments need to be collected.
  sid_idx : int
      The index of `sid` in the adjusted array.
  sid_estimates : pd.DataFrame
      The raw estimates data for this sid.
  requested_split_adjusted_columns : list of str
      The requested split adjusted columns.
  Returns
  -------
  col_to_split_adjustments : dict[str -> dict[int -> list of Adjustment]]
      The adjustments for this sid that occurred after the
      split-asof-date.
docstr_tok: ["Collect","split","adjustments","that","occur","after","the","split-adjusted-asof-date",".","Each","adjustment","needs","to","be","applied","to","all","dates","on","which","knowledge","for","the","requested","quarter","was","older","than","the","date","of","the","adjustment",".","Parameters","--","--","--","--","--","post_adjustments",":","tuple","(","list","(","float",")",",","list","(","int",")",",","pd.DatetimeIndex",")","The","adjustment","values",",","indexes","in","`","dates","`",",","and","timestamps","for","adjustments","that","happened","after","the","split-asof-date",".","requested_qtr_data",":","pd.DataFrame","The","requested","quarter","data","for","each","calendar","date","per","sid",".","sid",":","int","The","sid","for","which","adjustments","need","to","be","collected",".","sid_idx",":","int","The","index","of","`","sid","`","in","the","adjusted","array",".","sid_estimates",":","pd.DataFrame","The","raw","estimates","data","for","this","sid",".","requested_split_adjusted_columns",":","list","of","str","The","requested","split","adjusted","columns",".","Returns","--","--","--","-","col_to_split_adjustments",":","dict","[","str","-",">","dict","[","int","-",">","list","of","Adjustment","]","]","The","adjustments","for","this","sid","that","occurred","after","the","split-asof-date","."]
code: def collect_post_asof_split_adjustments(
      self,
      post_adjustments,
      requested_qtr_data,
      sid,
      sid_idx,
      sid_estimates,
      requested_split_adjusted_columns,
  ):
      """
      Collect split adjustments that occur after the
      split-adjusted-asof-date. Each adjustment needs to be applied to all
      dates on which knowledge for the requested quarter was older than the
      date of the adjustment.
  
      Parameters
      ----------
      post_adjustments : tuple(list(float), list(int), pd.DatetimeIndex)
          The adjustment values, indexes in `dates`, and timestamps for
          adjustments that happened after the split-asof-date.
      requested_qtr_data : pd.DataFrame
          The requested quarter data for each calendar date per sid.
      sid : int
          The sid for which adjustments need to be collected.
      sid_idx : int
          The index of `sid` in the adjusted array.
      sid_estimates : pd.DataFrame
          The raw estimates data for this sid.
      requested_split_adjusted_columns : list of str
          The requested split adjusted columns.
      Returns
      -------
      col_to_split_adjustments : dict[str -> dict[int -> list of Adjustment]]
          The adjustments for this sid that occurred after the
          split-asof-date.
      """
      col_to_split_adjustments = {}
      if post_adjustments:
          # Get an integer index
          requested_qtr_timeline = requested_qtr_data[
              SHIFTED_NORMALIZED_QTRS
          ][sid].reset_index()
          requested_qtr_timeline = requested_qtr_timeline[
              requested_qtr_timeline[sid].notnull()
          ]
  
          # Split the data into range by quarter and determine which quarter
          # was being requested in each range.
          # Split integer indexes up by quarter range
          qtr_ranges_idxs = np.split(
              requested_qtr_timeline.index,
              np.where(np.diff(requested_qtr_timeline[sid]) != 0)[0]
              + 1,
          )
          requested_quarters_per_range = [
              requested_qtr_timeline[sid][r[0]] for r in qtr_ranges_idxs
          ]
          # Try to apply each adjustment to each quarter range.
          for i, qtr_range in enumerate(qtr_ranges_idxs):
              for adjustment, date_index, timestamp in zip(
                  *post_adjustments
              ):
                  # In the default case, apply through the end of the quarter
                  upper_bound = qtr_range[-1]
                  # Find the smallest KD in estimates that is on or after the
                  # date of the given adjustment. Apply the given adjustment
                  # until that KD.
                  end_idx = self.determine_end_idx_for_adjustment(
                      timestamp,
                      requested_qtr_data.index,
                      upper_bound,
                      requested_quarters_per_range[i],
                      sid_estimates,
                  )
                  # In the default case, apply adjustment on the first day of
                  #  the quarter.
                  start_idx = qtr_range[0]
                  # If the adjustment happens during this quarter, apply the
                  # adjustment on the day it happens.
                  if date_index > start_idx:
                      start_idx = date_index
                  # We only want to apply the adjustment if we have any stale
                  # data to apply it to.
                  if qtr_range[0] <= end_idx:
                      for (
                          column_name
                      ) in requested_split_adjusted_columns:
                          if (
                              column_name
                              not in col_to_split_adjustments
                          ):
                              col_to_split_adjustments[column_name] = {}
                          adj = Float64Multiply(
                              # Always apply from first day of qtr
                              qtr_range[0],
                              end_idx,
                              sid_idx,
                              sid_idx,
                              adjustment,
                          )
                          add_new_adjustments(
                              col_to_split_adjustments,
                              [adj],
                              column_name,
                              start_idx,
                          )
  
      return col_to_split_adjustments
  
imports: from abc import abstractmethod, abstractproperty
  import numpy
  import pandas
  from six import viewvalues
  from toolz import groupby
  from catalyst.lib.adjusted_array import AdjustedArray
  from catalyst.lib.adjustment import Datetime641DArrayOverwrite, Datetime64Overwrite, Float641DArrayOverwrite, Float64Multiply, Float64Overwrite
  from catalyst.pipeline.common import EVENT_DATE_FIELD_NAME, FISCAL_QUARTER_FIELD_NAME, FISCAL_YEAR_FIELD_NAME, SID_FIELD_NAME, TS_FIELD_NAME
  from catalyst.pipeline.loaders.base import PipelineLoader
  from catalyst.utils.numpy_utils import datetime64ns_dtype, float64_dtype
  from catalyst.pipeline.loaders.utils import ffill_across_cols, last_in_date_group
label_desc: Use image node_id 7 for calling the SplitAdjustedEstimatesLoader obj's underlying member method code with example usage: obj.collect_post_asof_split_adjustments(post_adjustments, requested_qtr_data, sid, sid_idx, sid_estimates, requested_split_adjusted_columns) and returns: col_to_split_adjustments