예제 #1
0
    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")
예제 #2
0
    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)
예제 #3
0
 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)
예제 #4
0
    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)
예제 #5
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)
예제 #6
0
    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)
예제 #7
0
    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)
예제 #8
0
 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)
예제 #9
0
    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)
예제 #10
0
    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)
예제 #11
0
    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)
예제 #12
0
    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"])
예제 #13
0
    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)
예제 #14
0
    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)