From 6c76e1f5cf4b564c78097a81447cf7eac7595ef8 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Wed, 12 Mar 2025 23:04:51 -0700 Subject: [PATCH 1/4] Add R90 and R180 constants for rotation shorthand --- masque/__init__.py | 2 ++ masque/utils/__init__.py | 2 ++ masque/utils/transform.py | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/masque/__init__.py b/masque/__init__.py index 93eabdc..dbd0670 100644 --- a/masque/__init__.py +++ b/masque/__init__.py @@ -83,6 +83,8 @@ from .builder import ( from .utils import ( ports2data as ports2data, oneshot as oneshot, + R90 as R90, + R180 as R180, ) 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/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]: """ From 9b2f8599e6506632692c0eb4968cfc5b82a5682d Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Wed, 12 Mar 2025 23:09:45 -0700 Subject: [PATCH 2/4] [utils.curves] use numpy.trapezoid for 2.0 compatibility fall back to trapz if import fails --- masque/utils/curves.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/masque/utils/curves.py b/masque/utils/curves.py index 027d205..b664835 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, @@ -68,8 +73,8 @@ def euler_bend( 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 From d11c910dfdc101bddb2369507db830ca02e8b9f4 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Wed, 12 Mar 2025 23:10:49 -0700 Subject: [PATCH 3/4] [utils.curves] improve type annotations --- masque/utils/curves.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/masque/utils/curves.py b/masque/utils/curves.py index b664835..1e41c35 100644 --- a/masque/utils/curves.py +++ b/masque/utils/curves.py @@ -68,7 +68,7 @@ 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): From 30cfa0da313540a301bc8e415aef1a981b4b46ef Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Wed, 12 Mar 2025 23:11:35 -0700 Subject: [PATCH 4/4] Bump version to v3.3 --- masque/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/masque/__init__.py b/masque/__init__.py index dbd0670..86fae91 100644 --- a/masque/__init__.py +++ b/masque/__init__.py @@ -90,5 +90,5 @@ from .utils import ( __author__ = 'Jan Petykiewicz' -__version__ = '3.2' +__version__ = '3.3' version = __version__ # legacy