class_docstr: Injects random spikes or dips into a time series.
  
  Letting ``y_t`` be a time series, if an anomaly is injected into 
  the time series at time ``t``, the anomalous value that gets injected is as follows:
  
  .. math::
      \tilde{y}_t &= y_t + \text{shock} \\
      \begin{split}
      \text{where } \space & \text{shock} = Sign \times Z\times \text{RWSD}_{\alpha}(y_t), \\
      & Z \sim \mathrm{Unif}(a,b), \\
      & Sign \text{ is a random sign} \\
      \end{split}
  
  
  Additionally, the ``shock`` that is added to ``y_t`` is also applied to 
  ``y_t+1``, ... ``y_w-1``, where ``w``, known as the "anomaly width" is
  randomly determined by a random draw from a uniform distribution.
code: def anom_width_range(self):
      return self.width_lower, self.width_upper
  
imports: from abc import abstractmethod
  from typing import Tuple
  import numpy
  import pandas
  from merlion.transform.base import Identity, TransformBase
  from merlion.transform.bound import LowerUpperClip
  from merlion.utils.time_series import UnivariateTimeSeries, TimeSeries
label_desc: Use image node_id 2 for calling the Shock obj's underlying member method code with example usage: obj.anom_width_range() and returns: self,  self