'Convenience constructor for passing `decay_rate` in terms of `span`.
Forwards `decay_rate` as `1 - (2.0 / (1 + span))`.  This provides the
behavior equivalent to passing `span` to pandas.ewma.
Examples
.. code-block:: python
# Equivalent to:
# my_ewma = EWMA(
#    inputs=[USEquityPricing.close],
#    window_length=30,
#    decay_rate=(1 - (2.0 / (1 + 15.0))),
my_ewma = EWMA.from_span(
inputs=[USEquityPricing.close],
window_length=30,
span=15,
Notes
This classmethod is provided by both
:class:`ExponentialWeightedMovingAverage` and
:class:`ExponentialWeightedMovingStdDev`.'

@classmethod
@expect_types(span=Number)
def from_span(cls, inputs, window_length, span, **kwargs):

    if (span <= 1):
        raise ValueError(('`span`    must    be    a    positive    number.    %s    was    passed.' % span))
    decay_rate = (1.0 - (2.0 / (1.0 + span)))
    assert (0.0 < decay_rate <= 1.0)
    return cls(inputs=inputs, window_length=window_length, decay_rate=decay_rate, **kwargs)
