def test_single_wavelength_fom_integral(self): """ Test FOM integral for single wavelength case: result should be input FOM for backward compatibility. """ exact_fom = 0.4896 fom = ModeMatch.fom_wavelength_integral( T_fwd_vs_wavelength=np.array([exact_fom]), wavelengths=np.array([1300e-9]), target_T_fwd=lambda wl: 0.5 * np.ones(wl.size), norm_p=1) # unused self.assertAlmostEqual(fom, exact_fom, 15)
def test_fom_integral_norm_p1(self): """ Test FOM integral with norm p = 1. """ wl_points = 5 fom = ModeMatch.fom_wavelength_integral( T_fwd_vs_wavelength=np.ones(wl_points), wavelengths=np.linspace(1300e-9, 1800e-9, wl_points), target_T_fwd=lambda wl: np.power( np.sin(np.pi * (wl - wl.min()) / (wl.max() - wl.min())), 2), norm_p=1) exact_fom = 0.0 self.assertAlmostEqual(fom, exact_fom, 15)
def test_fom_integral_norm_p2(self): """ Test FOM integral with norm p = 2. """ wl_points = 5000 fom = ModeMatch.fom_wavelength_integral( T_fwd_vs_wavelength=0.5 * np.ones(wl_points), wavelengths=np.linspace(1.0e-9, 1.0e-8, wl_points), target_T_fwd=lambda wl: np.exp(-1.0 * (wl - wl.min()) / (wl.max() - wl.min())), norm_p=2) exact_fom = 0.5 * np.exp(-1) * ( np.sqrt(2.0 * (np.exp(2.0) - 1.0)) - np.sqrt(4.0 * np.exp(1.0) - np.exp(2.0) - 2.0)) self.assertAlmostEqual(fom, exact_fom, 7)