code: def RMSProp(
      params: Tensor | Iterable,  # Model parameters
      lr: float | slice,  # Default learning rate
      mom: float = 0.0,  # Gradient moving average (β1) coefficient
      sqr_mom: float = 0.99,  # Gradient squared moving average (β2) coefficient
      eps: float = 1e-8,  # Added for numerical stability
      wd: Real = 0.0,  # Optional weight decay (true or L2)
      decouple_wd: bool = True,  # Apply true weight decay or L2 regularization (RMSProp)
  ) -> Optimizer:
      "A RMSProp `Optimizer`"
      cbs = [weight_decay] if decouple_wd else [l2_reg]
      cbs += (
          [average_sqr_grad]
          if mom == 0.0
          else [average_grad, average_sqr_grad]
      )
      cbs.append(rms_prop_step)
      return Optimizer(
          params, cbs, lr=lr, mom=mom, sqr_mom=sqr_mom, wd=wd
      )
  
imports: from __future__ import annotations
  from .torch_basics import *
label_desc: Use image node_id 10 for calling a global function with example usage: RMSProp(params, lr, mom, sqr_mom, eps, wd, decouple_wd) and returns: Optimizer