From 7ffadb97c942b024f0ec252ac3ed85760d36d240 Mon Sep 17 00:00:00 2001 From: Blaise Gassend Date: Sat, 19 Apr 2025 11:06:51 -0700 Subject: [PATCH] Eliminated use of interp2d and scipy.sqrt to get things working with scipy 1.14.1. --- modesolverpy/_mode_solver_lib.py | 6 +++--- modesolverpy/structure_base.py | 11 ++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/modesolverpy/_mode_solver_lib.py b/modesolverpy/_mode_solver_lib.py index 9e91078..048a91d 100644 --- a/modesolverpy/_mode_solver_lib.py +++ b/modesolverpy/_mode_solver_lib.py @@ -258,7 +258,7 @@ def solve(self, neigs, tol=0, mode_profiles=True, initial_mode_guess=None): eigvals = eigs eigvecs = None - neff = self.wl * scipy.sqrt(eigvals) / (2 * numpy.pi) + neff = self.wl * numpy.sqrt(eigvals) / (2 * numpy.pi) if mode_profiles: phi = [] for ieig in range(neigs): @@ -970,7 +970,7 @@ def solve(self, neigs=4, tol=0, guess=None, mode_profiles=True, initial_mode_gue return_eigenvectors=mode_profiles, sigma=shift) - neffs = self.wl * scipy.sqrt(eigvals) / (2 * numpy.pi) + neffs = self.wl * numpy.sqrt(eigvals) / (2 * numpy.pi) if mode_profiles: Hxs = [] Hys = [] @@ -1032,7 +1032,7 @@ def __init__(self, wl, x, y, neff, Ex, Ey, Ez, Hx, Hy, Hz): def norm(self): x = centered1d(self.x) y = centered1d(self.y) - return scipy.sqrt(trapz2(self.intensity(), x=x, y=y)) + return numpy.sqrt(trapz2(self.intensity(), x=x, y=y)) def normalize(self): n = self.norm() diff --git a/modesolverpy/structure_base.py b/modesolverpy/structure_base.py index fa8a630..630af9d 100644 --- a/modesolverpy/structure_base.py +++ b/modesolverpy/structure_base.py @@ -165,9 +165,10 @@ def eps_func(self): returns the permittivity profile of the structure, interpolating if necessary. ''' - interp_real = interpolate.interp2d(self.x, self.y, self.eps.real) - interp_imag = interpolate.interp2d(self.x, self.y, self.eps.imag) - interp = lambda x, y: interp_real(x, y) + 1.j*interp_imag(x, y) + interp_real = interpolate.RegularGridInterpolator((self.x, self.y), self.eps.real.T) + interp_imag = interpolate.RegularGridInterpolator((self.x, self.y), self.eps.imag.T) + interp = lambda x, y: (interp_real((x.reshape((1, -1)), y.reshape((-1, 1)))) + + 1.j*interp_imag((x.reshape((1, -1)), y.reshape((-1, 1))))) return interp @property @@ -177,7 +178,7 @@ def n_func(self): returns the refractive index profile of the structure, interpolating if necessary. ''' - return interpolate.interp2d(self.x, self.y, self.n) + return interpolate.RegularGridInterpolator((self.x, self.y), self.n) def _add_triangular_sides(self, xy_mask, angle, y_top_right, y_bot_left, x_top_right, x_bot_left, n_material): @@ -297,7 +298,7 @@ def __init__(self, x_step, y_step, x_max, y_max, x_min=0., y_min=0., self.x_step = x_step self.y_step = y_step self.n_background = n_background - self._n = np.ones((self.y.size,self.x.size), 'complex_') * n_background + self._n = np.ones((self.y.size,self.x.size), 'complex') * n_background @property def n(self):