code: def ui(close, length=None, scalar=None, offset=None, **kwargs):
      """Indicator: Ulcer Index (UI)"""
      # Validate arguments
      length = int(length) if length and length > 0 else 14
      scalar = float(scalar) if scalar and scalar > 0 else 100
      close = verify_series(close, length)
      offset = get_offset(offset)
  
      if close is None:
          return
  
      # Calculate Result
      highest_close = close.rolling(length).max()
      downside = scalar * (close - highest_close)
      downside /= highest_close
      d2 = downside * downside
  
      everget = kwargs.pop("everget", False)
      if everget:
          # Everget uses SMA instead of SUM for calculation
          ui = (sma(d2, length) / length).apply(npsqrt)
      else:
          ui = (d2.rolling(length).sum() / length).apply(npsqrt)
  
      # Offset
      if offset != 0:
          ui = ui.shift(offset)
  
      # Handle fills
      if "fillna" in kwargs:
          ui.fillna(kwargs["fillna"], inplace=True)
      if "fill_method" in kwargs:
          ui.fillna(method=kwargs["fill_method"], inplace=True)
  
      # Name and Categorize it
      ui.name = f"UI{'' if not everget else 'e'}_{length}"
      ui.category = "volatility"
  
      return ui
  
label_desc: Use image node_id 1 for calling a global function with example usage: ui(close, length, scalar, offset) and returns: ui