class_docstr: Calculates adjustments for continuous futures, based on the
  close and open of the contracts on the either side of each roll.
class_docstr_tok: ["Calculates","adjustments","for","continuous","futures",",","based","on","the","close","and","open","of","the","contracts","on","the","either","side","of","each","roll","."]
code: def _make_adjustment(
      self, adjustment_type, front_close, back_close, end_loc
  ):
      adj_base = back_close - front_close
      if adjustment_type == "mul":
          adj_value = 1.0 + adj_base / front_close
          adj_class = Float64Multiply
      elif adjustment_type == "add":
          adj_value = adj_base
          adj_class = Float64Add
      return adj_class(0, end_loc, 0, 0, adj_value)
  
imports: from abc import ABCMeta, abstractmethod, abstractproperty
  from numpy import concatenate
  from lru import LRU
  from pandas import isnull
  from toolz import sliding_window
  from six import with_metaclass
  from zipline.assets import Equity, Future
  from zipline.assets.continuous_futures import ContinuousFuture
  from zipline.lib._int64window import AdjustedArrayWindow
  from zipline.lib._float64window import AdjustedArrayWindow
  from zipline.lib.adjustment import Float64Multiply, Float64Add
  from zipline.utils.cache import ExpiringCache
  from zipline.utils.math_utils import number_of_decimal_places
  from zipline.utils.memoize import lazyval
  from zipline.utils.numpy_utils import float64_dtype
  from zipline.utils.pandas_utils import find_in_sorted_index, normalize_date
label_desc: Use image node_id 3 for calling the ContinuousFutureAdjustmentReader obj's underlying member method code with example usage: obj._make_adjustment(adjustment_type, front_close, back_close, end_loc) and returns: adj_class