def test_compute_prior_energy_ratio(self): "Currently almost copy of test_determine_params_*" pi2 = np.pi * 2 t = np.arange(0, 5, 0.001) c1 = self._cos(t, 2, 2, 0) c2 = self._cos(t, 5, 1.1, 1.5) c3 = self._cos(t, 8, 6, np.pi) # Highest amplitude c4 = self._cos(t, 15, 3, 0) S = c1 + c2 + c3 + c4 mid_energy = 0.5 preprocessor = Preprocessor(energy_ratio=mid_energy) params = preprocessor.compute_prior(t, S) self.assertEqual(len(params), 2, "Two oscillators identified") self.assertTrue( abs(params[0, 0] - 15 * pi2) < 0.05, "Expected {} rad/s, Got {} [rad/s]: ".format( 15 * pi2, params[0, 0] * pi2)) self.assertTrue( abs(params[1, 0] - 8 * pi2) < 0.05, "Expected {} rad/s, Got {} [rad/s]: ".format( 8 * pi2, params[1, 0] * pi2)) low_energy = 0.1 preprocessor = Preprocessor(energy_ratio=low_energy) params = preprocessor.compute_prior(t, S) self.assertEqual(len(params), 4, "All oscillators identified") self.assertTrue( abs(params[0, 0] - 15 * pi2) < 0.05, "First osc with 15 Hz") self.assertTrue( abs(params[1, 0] - 8 * pi2) < 0.05, "Second osc with 8 Hz") self.assertTrue( abs(params[2, 0] - 5 * pi2) < 0.05, "Third osc with 5 Hz") self.assertTrue( abs(params[3, 0] - 2 * pi2) < 0.05, "Fourth osc with 2 Hz")
def test_compute_prior_1_oscillator(self): "Currently almost copy of test_determine_params_*" t = np.arange(0, 5, 0.001) c1 = self._cos(t, 2, 2, 0) c2 = self._cos(t, 5, 1.1, 1.5) S = c1 + c2 max_osc = 1 preprocessor = Preprocessor(max_osc=max_osc) with self.assertRaises(Exception) as context: preprocessor.compute_prior(t, S) self.assertTrue("Single oscillator detected" in str(context.exception))
def test_compute_prior_max_oscillators(self): "Currently almost copy of test_determine_params_*" t = np.arange(0, 5, 0.001) c1 = self._cos(t, 2, 2, 0) c2 = self._cos(t, 5, 1.1, 1.5) c3 = self._cos(t, 8, 6, np.pi) # Highest amplitude c4 = self._cos(t, 15, 3, 0) S = c1 + c2 + c3 + c4 max_osc_2 = 2 preprocessor = Preprocessor(max_osc=max_osc_2) params = preprocessor.compute_prior(t, S) self.assertEqual(len(params), max_osc_2, "Two oscillators identified") max_osc_3 = 3 preprocessor = Preprocessor(max_osc=max_osc_3) params = preprocessor.compute_prior(t, S) self.assertEqual(len(params), max_osc_3, "Three oscillators identified")
def test_compute_prior_custom_nH(self): "Currently almost copy of test_determine_params_*" t = np.arange(0, 5, 0.001) c1 = self._cos(t, 2, 2, 0) c2 = self._cos(t, 5, 1.1, 1) S = c1 + c2 preprocessor = Preprocessor(nH=3) params = preprocessor.compute_prior(t, S) # Testing for number self.assertEqual(params.shape, (2, 6), "Two oscillators (W, ph, A, K1, K2, K3)") # Testing for coupling self.assertTrue(np.all(params[:, 3:] == 0), "All couplings should be zero")
def test_compute_prior_default(self): "Currently almost copy of test_determine_params_*" pi2 = np.pi * 2 t = np.arange(0, 5, 0.001) c1 = self._cos(t, 2, 2, 0) c2 = self._cos(t, 5, 1.1, 1) S = c1 + c2 preprocessor = Preprocessor() params = preprocessor.compute_prior(t, S) params[:, 1] = (params[:, 1] + pi2) % pi2 # Testing for number self.assertEqual(params.shape, (2, 4), "Two oscillators (W, ph, A, K)") # Testing for frequency self.assertTrue( abs(params[0, 0] - 5 * pi2) < 0.05, "Expected {} rad/s, Got {} [rad/s]".format(5 * pi2, params[0, 0])) self.assertTrue( abs(params[1, 0] - 2 * pi2) < 0.05, "Expected {} rad/s, Got {} [rad/s]".format(2 * pi2, params[1, 0])) # Testing for phase self.assertTrue( abs(params[0, 1] - 1) < 0.001, "Expected phase {}, Got {}.".format(1, params[0, 1])) self.assertTrue( abs(params[1, 1] - 0) < 0.001, "Expected phase {}, Got {}.".format(0, params[1, 1])) # Testing for amplitude self.assertTrue( abs(params[0, 2] - 1.1) < 0.1, "Expected amp {}, Got {}.".format(1.1, params[0, 2])) self.assertTrue( abs(params[1, 2] - 2) < 0.1, "Expected amp {}, Got {}.".format(2, params[1, 2])) # Testing for coupling self.assertEqual(params[0, 3], 0, "First->Second coupling should be 0") self.assertEqual(params[1, 3], 0, "Second->First coupling should be 0")