class_docstr: Exponentially Weighted Moving Average
  
  **Default Inputs:** None
  
  **Default Window Length:** None
  
  Parameters
  ----------
  inputs : length-1 list/tuple of BoundColumn
      The expression over which to compute the average.
  window_length : int > 0
      Length of the lookback window over which to compute the average.
  decay_rate : float, 0 < decay_rate <= 1
      Weighting factor by which to discount past observations.
  
      When calculating historical averages, rows are multiplied by the
      sequence::
  
          decay_rate, decay_rate ** 2, decay_rate ** 3, ...
  
  Notes
  -----
  - This class can also be imported under the name ``EWMA``.
  
  See Also
  --------
  :meth:`pandas.DataFrame.ewm`
class_docstr_tok: ["Exponentially","Weighted","Moving","Average","*","*","Default","Inputs",":","*","*","None","*","*","Default","Window","Length",":","*","*","None","Parameters","--","--","--","--","--","inputs",":","length-1","list\/tuple","of","BoundColumn","The","expression","over","which","to","compute","the","average",".","window_length",":","int",">","0","Length","of","the","lookback","window","over","which","to","compute","the","average",".","decay_rate",":","float",",","0","<","decay_rate","<","=","1","Weighting","factor","by","which","to","discount","past","observations",".","When","calculating","historical","averages",",","rows","are","multiplied","by","the","sequence",":",":","decay_rate",",","decay_rate","*","*","2",",","decay_rate","*","*","3",",","...","Notes","--","--","-","-","This","class","can","also","be","imported","under","the","name","``","EWMA","``",".","See","Also","--","--","--","--",":","meth",":","`","pandas.DataFrame.ewm","`"]
code: def compute(self, today, assets, out, data, decay_rate):
      out[:] = average(
          data,
          axis=0,
          weights=exponential_weights(len(data), decay_rate),
      )
  
imports: from numbers import Number
  from numpy import arange, average, clip, copyto, exp, fmax, full, isnan, log, NINF, sqrt, sum, unique
  from zipline.pipeline.data import EquityPricing
  from zipline.utils.input_validation import expect_types
  from zipline.utils.math_utils import nanargmax, nanmax, nanmean, nanstd, nansum
  from zipline.utils.numpy_utils import float64_dtype, ignore_nanwarnings
  from .factor import CustomFactor
  from ..mixins import SingleInputMixin
label_desc: Use image node_id 1 for calling the ExponentialWeightedMovingAverage obj's underlying member method code with example usage: obj.compute(today, assets, out, data, decay_rate) without return types