code: def normalize(self, dt):
          
          if dt is None:
              return None
  
          dt = self._convert_to_dt(dt)
  
          dt = dt.replace(microsecond=0)  # remove microseconds, to avoid float rounding issues.
          delta = (dt - self.start).total_seconds()
          granularity = (self._timedelta * self.interval).total_seconds()
          return dt - datetime.timedelta(seconds=delta % granularity)
docs: Clamp dt to every Nth :py:attr:`~_DatetimeParameterBase.interval` starting at
          :py:attr:`~_DatetimeParameterBase.start`.