__init__.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import numpy as np
  2. import os
  3. import sys
  4. sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 'pypulseq')))
  5. # =========
  6. # BANKER'S ROUNDING FIX
  7. # =========
  8. def round_half_up(n, decimals=0):
  9. """
  10. Avoid banker's rounding inconsistencies; from https://realpython.com/python-rounding/#rounding-half-up
  11. """
  12. multiplier = 10**decimals
  13. return np.floor(np.abs(n) * multiplier + 0.5) / multiplier
  14. # =========
  15. # NP.FLOAT EPSILON
  16. # =========
  17. eps = np.finfo(np.float64).eps
  18. # =========
  19. # PACKAGE-LEVEL IMPORTS
  20. # =========
  21. try:
  22. from LF_scanner.pypulseq.SAR.SAR_calc import calc_SAR
  23. except Exception as _sar_import_error:
  24. # Optional dependency (matplotlib) may be missing; keep core sequence API usable.
  25. def calc_SAR(*args, **kwargs):
  26. raise ImportError(
  27. "calc_SAR is unavailable because optional SAR dependencies are missing"
  28. ) from _sar_import_error
  29. from LF_scanner.pypulseq.Sequence.sequence import Sequence
  30. from LF_scanner.pypulseq.calc_duration import calc_duration
  31. from LF_scanner.pypulseq.check_timing import check_timing
  32. from LF_scanner.pypulseq.make_adc import make_adc
  33. from LF_scanner.pypulseq.make_delay import make_delay
  34. from LF_scanner.pypulseq.make_sinc_pulse import make_sinc_pulse
  35. from LF_scanner.pypulseq.make_trapezoid import make_trapezoid
  36. from LF_scanner.pypulseq.opts import Opts