Source code for torchsim.epg._shift

"""EPG states shift operator."""

__all__ = ["shift"]

from types import SimpleNamespace

import torch


[docs] def shift(states: SimpleNamespace, delta: int = 1) -> SimpleNamespace: """ Shift transverse EPG states due to gradient dephasing. Parameters ---------- states : SimpleNamespace Input EPG matrix. delta : int, optional Integer states shift. The default is 1. Returns ------- SimpleNamespace Output EPG matrix. """ Fplus = states.Fplus Fminus = states.Fminus # Apply shift Fminus = torch.roll(Fminus, -delta, -3) # Shift F- states Fplus = torch.roll(Fplus, delta, -3) # Shift F+ states Fminus[-1] = 0.0 # Zero highest F- state Fplus[0] = Fminus[0].conj() # Fill in lowest F+ state # Prepare for output states.Fplus = Fplus states.Fminus = Fminus return states