diff --git a/masque/__init__.py b/masque/__init__.py index 93eabdc..86fae91 100644 --- a/masque/__init__.py +++ b/masque/__init__.py @@ -83,10 +83,12 @@ from .builder import ( from .utils import ( ports2data as ports2data, oneshot as oneshot, + R90 as R90, + R180 as R180, ) __author__ = 'Jan Petykiewicz' -__version__ = '3.2' +__version__ = '3.3' version = __version__ # legacy diff --git a/masque/utils/__init__.py b/masque/utils/__init__.py index 11391a5..f33142f 100644 --- a/masque/utils/__init__.py +++ b/masque/utils/__init__.py @@ -25,6 +25,8 @@ from .transform import ( normalize_mirror as normalize_mirror, rotate_offsets_around as rotate_offsets_around, apply_transforms as apply_transforms, + R90 as R90, + R180 as R180, ) from .comparisons import ( annotation2key as annotation2key, diff --git a/masque/utils/curves.py b/masque/utils/curves.py index 027d205..1e41c35 100644 --- a/masque/utils/curves.py +++ b/masque/utils/curves.py @@ -2,6 +2,11 @@ import numpy from numpy.typing import ArrayLike, NDArray from numpy import pi +try: + from numpy import trapezoid +except ImportError: + from numpy import trapz as trapezoid + def bezier( nodes: ArrayLike, @@ -63,13 +68,13 @@ def euler_bend( num_points_spiral = numpy.floor(ll_max / ll_tot * num_points).astype(int) num_points_arc = num_points - 2 * num_points_spiral - def gen_spiral(ll_max: float): + def gen_spiral(ll_max: float) -> NDArray[numpy.float64]: xx = [] yy = [] for ll in numpy.linspace(0, ll_max, num_points_spiral): qq = numpy.linspace(0, ll, 1000) # integrate to current arclength - xx.append(numpy.trapz( numpy.cos(qq * qq / 2), qq)) - yy.append(numpy.trapz(-numpy.sin(qq * qq / 2), qq)) + xx.append(trapezoid( numpy.cos(qq * qq / 2), qq)) + yy.append(trapezoid(-numpy.sin(qq * qq / 2), qq)) xy_part = numpy.stack((xx, yy), axis=1) return xy_part diff --git a/masque/utils/transform.py b/masque/utils/transform.py index e2ea9aa..dfb6492 100644 --- a/masque/utils/transform.py +++ b/masque/utils/transform.py @@ -9,6 +9,11 @@ from numpy.typing import NDArray, ArrayLike from numpy import pi +# Constants for shorthand rotations +R90 = pi / 2 +R180 = pi + + @lru_cache def rotation_matrix_2d(theta: float) -> NDArray[numpy.float64]: """