from copy import copy from types import SimpleNamespace def scale_grad(grad: SimpleNamespace, scale: float) -> SimpleNamespace: """ Scales the gradient with the scalar. Parameters ---------- grad : SimpleNamespace Gradient event to be scaled. scale : float Scaling factor. Returns ------- grad : SimpleNamespace Scaled gradient. """ # copy() to emulate pass-by-value; otherwise passed grad event is modified scaled_grad = copy(grad) if scaled_grad.type == "trap": scaled_grad.amplitude = scaled_grad.amplitude * scale scaled_grad.area = scaled_grad.area * scale scaled_grad.flat_area = scaled_grad.flat_area * scale else: scaled_grad.waveform = scaled_grad.waveform * scale scaled_grad.first = scaled_grad.first * scale scaled_grad.last = scaled_grad.last * scale if hasattr(scaled_grad, "id"): delattr(scaled_grad, "id") return scaled_grad