docs: def update_sma(self, step):
          """
          Calculate an updated value for the semimajor axis, given the
          current value and the step value.
  
          The step value must be managed by the caller to support both
          modes: grow outwards and shrink inwards.
  
          Parameters
          ----------
          step : float
              The step value.
  
          Returns
          -------
          sma : float
              The new semimajor axis length.
          """
  
          if self.linear_growth:
              sma = self.sma + step
          else:
              sma = self.sma * (1. + step)
          return sma