def test_init(self): # Instantiate DispersionCurve objects. frequency = [1, 2, 3] velocity = [4, 5, 6] ray = swprepost.DispersionCurve(frequency=frequency, velocity=velocity) lov = swprepost.DispersionCurve(frequency=frequency, velocity=velocity) # Rayleigh Alone ex_a = swprepost.DispersionSet(identifier=1, misfit=1.2, rayleigh={0: ray}, love=None) self.assertListEqual(velocity, ex_a.rayleigh[0].velocity.tolist()) self.assertEqual(1, ex_a.identifier) self.assertEqual(1.2, ex_a.misfit) # Love Alone ex_b = swprepost.DispersionSet(identifier=2, misfit=3.4, rayleigh=None, love={0: lov}) self.assertListEqual(velocity, ex_b.love[0].velocity.tolist()) # Rayleigh and Love ex_c = swprepost.DispersionSet(identifier=3, misfit=5.7, rayleigh={0: ray}, love={0: lov}) self.assertListEqual(velocity, ex_c.rayleigh[0].velocity.tolist()) self.assertListEqual(velocity, ex_c.love[0].velocity.tolist()) # Rayleigh and Love are None self.assertRaises(ValueError, swprepost.DispersionSet, identifier="Test")
def test_write_to_txt(self): dc_0 = swprepost.DispersionCurve([1, 5, 10, 15], [100, 200, 300, 400]) dc_1 = swprepost.DispersionCurve([1, 5, 12, 15], [100, 180, 300, 400]) dc_set_0 = swprepost.DispersionSet(0, misfit=0.0, rayleigh={ 0: dc_0, 1: dc_1 }, love={ 0: dc_1, 1: dc_0 }) dc_set_1 = swprepost.DispersionSet(1, misfit=0.0, rayleigh={ 0: dc_1, 1: dc_0 }, love={ 0: dc_0, 1: dc_1 }) set_list = [dc_set_0, dc_set_1] expected = swprepost.DispersionSuite.from_list(set_list) fname = "dc_suite_expected.dc" expected.write_to_txt(fname) returned = swprepost.DispersionSuite.from_geopsy(fname) os.remove(fname) self.assertEqual(expected, returned)
def setUpClass(cls): cls.ray = {0: swprepost.DispersionCurve([0.1, 0.2], [200, 100]), 1: swprepost.DispersionCurve([0.1, 0.2], [400, 200])} cls.lov = {0: swprepost.DispersionCurve([0.15, 0.2], [200, 150]), 1: swprepost.DispersionCurve([0.1, 0.22], [410, 200])} cls.identifier = 0 cls.misfit = 0. cls.dc_set = swprepost.DispersionSet(cls.identifier, cls.misfit, rayleigh=cls.ray, love=cls.lov)
def test_from_geopsy(self): # Quick test -> Full test in DispersionSuite fname = self.full_path + "data/test_dc_mod2_ray2_lov2_shrt.txt" rayleigh = { 0: swprepost.DispersionCurve( [0.15, 64], [1 / 0.000334532972901842, 1 / 0.00917746839997367]), 1: swprepost.DispersionCurve( [0.479030947360446, 68], [1 / 0.000323646256288129, 1 / 0.00832719612771301]) } love = { 0: swprepost.DispersionCurve( [0.11, 61], [1 / 0.0003055565316784, 1 / 0.00838314255586564]), 1: swprepost.DispersionCurve( [0.920128309893243, 69], [1 / 0.000305221889470528, 1 / 0.00828240730448549]) } expected_id = 149641 expected_misfit = 1.08851 # Both Rayleigh and Love returned = swprepost.DispersionSet.from_geopsy(fname=fname) self.assertEqual(expected_id, returned.identifier) self.assertEqual(expected_misfit, returned.misfit) for mode, expected in rayleigh.items(): self.assertEqual(expected, returned.rayleigh[mode]) for mode, expected in love.items(): self.assertEqual(expected, returned.love[mode]) # Only Rayleigh returned = swprepost.DispersionSet.from_geopsy(fname=fname) self.assertEqual(expected_id, returned.identifier) self.assertEqual(expected_misfit, returned.misfit) for mode, expected in rayleigh.items(): self.assertEqual(expected, returned.rayleigh[mode]) # Only Love returned = swprepost.DispersionSet.from_geopsy(fname=fname) self.assertEqual(expected_id, returned.identifier) self.assertEqual(expected_misfit, returned.misfit) for mode, expected in love.items(): self.assertEqual(expected, returned.love[mode]) # Neither self.assertRaises(ValueError, swprepost.DispersionSet.from_geopsy, fname=fname, nrayleigh=0, nlove=0)
def test_equal(self): dc_a = swprepost.DispersionCurve([1, 2, 3], [4, 5, 6]) dc_b = swprepost.DispersionCurve([1, 2, 3], [4, 5, 6]) dc_c = swprepost.DispersionCurve([4, 5, 6], [4, 5, 6]) dc_d = swprepost.DispersionCurve([1, 2, 3], [1, 2, 3]) dc_e = swprepost.DispersionCurve([1, 2], [1, 2]) self.assertTrue(dc_a == dc_b) self.assertTrue(dc_a != dc_c) self.assertTrue(dc_a != dc_d) self.assertTrue(dc_c != dc_d) self.assertTrue(dc_e != dc_a)
def test_str_and_repr(self): a_set = {0: swprepost.DispersionCurve([0.1, 0.2], [200, 100]), 1: swprepost.DispersionCurve([0.1, 0.2], [400, 200])} dc_set = swprepost.DispersionSet(0, rayleigh=a_set, love=a_set) # __str__ expected = "DispersionSet with 2 Rayleigh and 2 Love modes" returned = dc_set.__str__() self.assertEqual(expected, returned) # __repr__ expected = f"DispersionSet(identifier={0}, rayleigh={a_set}, love={a_set}, misfit=0.0)" returned = dc_set.__repr__() self.assertEqual(expected, returned)
def test_init(self): # list frequency = [1, 2, 3, 4.5, 6.7] velocity = [4, 5, 6., 8.5, 2.2] dc = swprepost.DispersionCurve(frequency=frequency, velocity=velocity) self.assertArrayEqual(np.array(frequency), dc.frequency) self.assertArrayEqual(np.array(velocity), dc.velocity) # ndarray frequency = np.array([1, 2, 3, 4.5, 6.7]) velocity = np.array([4, 5, 6., 8.5, 2.2]) dc = swprepost.DispersionCurve(frequency=frequency, velocity=velocity) self.assertArrayEqual(frequency, dc.frequency) self.assertArrayEqual(velocity, dc.velocity)
def test_write_to_txt(self): frequency = [1,3,5,7,9] velocity = [100,200,300,400,500] expected = swprepost.DispersionCurve(frequency, velocity) fname = "test.dc" expected.write_to_txt(fname) returned = swprepost.DispersionCurve.from_geopsy(fname) self.assertEqual(expected, returned) os.remove(fname)
def test_properties(self): frequency = np.array([1, 1.5, 2, 2.5, 3.5, 5]) velocity = np.array([100, 200, 400, 100, 500, 1000]) dc = swprepost.DispersionCurve(frequency=frequency, velocity=velocity) expecteds = [frequency, velocity, velocity / frequency, 1 / velocity] returneds = [dc.frequency, dc.velocity, dc.wavelength, dc.slowness] for expected, returned in zip(expecteds, returneds): self.assertArrayEqual(expected, returned)
def test_eq(self): dc = swprepost.DispersionCurve([1, 2, 3], [10, 20, 30]) dc_set = swprepost.DispersionSet(0, rayleigh={0: dc}) expected = swprepost.DispersionSuite.from_list([dc_set, dc_set]) # Bad length returned = swprepost.DispersionSuite.from_list([dc_set]) self.assertNotEqual(expected, returned) # Bad Value dc_set = swprepost.DispersionSet(1, rayleigh={0: dc}) returned = swprepost.DispersionSuite.from_list([dc_set, dc_set]) self.assertNotEqual(expected, returned)
def test_repr_and_str(self): frequency = [5, 3, 1] velocity = [100, 300, 500] dc = swprepost.DispersionCurve(frequency, velocity) # __repr__ returned = dc.__repr__() expected = f"DispersionCurve(frequency={np.array(frequency, dtype=float)}, velocity={np.array(velocity, dtype=float)})" self.assertEqual(expected, returned) # __str__ returned = dc.__str__() expected = f"DispersionCurve with 3 points" self.assertEqual(expected, returned)
def test_init(self): # Manual instantiation frequency = np.array([1, 2, 3]) velocity = np.array([4, 5, 6]) dc = swprepost.DispersionCurve(frequency=frequency, velocity=velocity) expected = swprepost.DispersionSet(identifier=5, misfit=15., rayleigh={0: dc}, love=None) dc_suite = swprepost.DispersionSuite(dispersionset=expected) returned = dc_suite[0] self.assertEqual(expected, returned) # Invalid type self.assertRaises(TypeError, swprepost.DispersionSuite, ["bad dc_set"])
def test_append(self): # Manual instantiation frequency = np.array([1, 2, 3]) velocity = np.array([4, 5, 6]) dc = swprepost.DispersionCurve(frequency=frequency, velocity=velocity) dc_set_0 = swprepost.DispersionSet(identifier=0, misfit=2.1, rayleigh={0: dc}, love=None) dc_suite = swprepost.DispersionSuite(dispersionset=dc_set_0) # Manual Append dc_set_1 = swprepost.DispersionSet(identifier=2, misfit=1.1, rayleigh={0: dc}, love=None) dc_suite.append(dispersionset=dc_set_1, sort=False) # Compare the Result for dc_set in dc_suite: self.assertArrayEqual(frequency, dc_set.rayleigh[0].frequency) self.assertArrayEqual(velocity, dc_set.rayleigh[0].velocity) self.assertListEqual([0, 2], dc_suite.identifiers) self.assertListEqual([2.1, 1.1], dc_suite.misfits)
def test_eq(self): dc = swprepost.DispersionCurve([1, 2], [3, 4]) dc_set = swprepost.DispersionSet(0, rayleigh={0: dc}) # Not Equal self.assertFalse(self.dc_set == dc_set)