def test_CoreSeismogram(): md = Metadata() md["delta"] = 0.01 md["starttime"] = 0.0 md["npts"] = 100 # test metadata constructor md["tmatrix"] = np.random.rand(3, 3) cseis = _CoreSeismogram(md, False) assert (cseis.tmatrix == md["tmatrix"]).all() md["tmatrix"] = dmatrix(np.random.rand(3, 3)) cseis = _CoreSeismogram(md, False) assert (cseis.tmatrix == md["tmatrix"]).all() md["tmatrix"] = np.random.rand(9) cseis = _CoreSeismogram(md, False) assert (cseis.tmatrix == md["tmatrix"].reshape(3, 3)).all() md["tmatrix"] = np.random.rand(1, 9) cseis = _CoreSeismogram(md, False) assert (cseis.tmatrix == md["tmatrix"].reshape(3, 3)).all() md["tmatrix"] = np.random.rand(9, 1) cseis = _CoreSeismogram(md, False) assert (cseis.tmatrix == md["tmatrix"].reshape(3, 3)).all() md["tmatrix"] = np.random.rand(3, 3).tolist() cseis = _CoreSeismogram(md, False) assert np.isclose(cseis.tmatrix, np.array(md["tmatrix"]).reshape(3, 3)).all() md["tmatrix"] = np.random.rand(9).tolist() cseis = _CoreSeismogram(md, False) assert np.isclose(cseis.tmatrix, np.array(md["tmatrix"]).reshape(3, 3)).all() # test whether the setter of tmatrix updates metadata correctly tm = np.random.rand(1, 9) cseis.tmatrix = tm assert (cseis.tmatrix == tm.reshape(3, 3)).all() assert np.isclose(cseis.tmatrix, np.array(cseis["tmatrix"]).reshape(3, 3)).all() tm = np.random.rand(9).tolist() cseis.tmatrix = tm assert np.isclose(cseis.tmatrix, np.array(tm).reshape(3, 3)).all() assert np.isclose(cseis.tmatrix, np.array(cseis["tmatrix"]).reshape(3, 3)).all() # test exceptions md["tmatrix"] = np.random.rand(4, 2) with pytest.raises(MsPASSError, match="should be a 3x3 matrix"): _CoreSeismogram(md, False) md["tmatrix"] = dmatrix(np.random.rand(2, 4)) with pytest.raises(MsPASSError, match="should be a 3x3 matrix"): _CoreSeismogram(md, False) md["tmatrix"] = 42 with pytest.raises(MsPASSError, match="not recognized"): _CoreSeismogram(md, False) md.erase("tmatrix") # tmatrix not defined is taken to default to tmatrix being an identity # matrix. We test that condition here cseis = _CoreSeismogram(md, False) assert np.isclose(cseis.tmatrix, np.eye(3)).all() md["tmatrix"] = {4: 2} with pytest.raises(MsPASSError, match="type is not recognized"): _CoreSeismogram(md, False) md["tmatrix"] = np.random.rand(9).tolist() md["tmatrix"][3] = "str" with pytest.raises(MsPASSError, match="should be float"): _CoreSeismogram(md, False) md["tmatrix"] = np.random.rand(3, 4).tolist() with pytest.raises(MsPASSError, match="should be a 3x3 list of list"): _CoreSeismogram(md, False) md["tmatrix"] = [1, 2, 3] with pytest.raises(MsPASSError, match="should be a 3x3 list of list"): _CoreSeismogram(md, False) md["tmatrix"] = np.random.rand(2, 2).tolist() with pytest.raises( MsPASSError, match="should be a list of 9 floats or a 3x3 list of list"): _CoreSeismogram(md, False) md["tmatrix"] = np.random.rand(3, 3).tolist() md["tmatrix"][1][1] = "str" with pytest.raises(MsPASSError, match="should be float"): _CoreSeismogram(md, False)
def test_CoreSeismogram(): md = Metadata() md['delta'] = 0.01 md['starttime'] = 0.0 md['npts'] = 100 # test metadata constructor md['tmatrix'] = np.random.rand(3, 3) cseis = _CoreSeismogram(md, False) assert (cseis.transformation_matrix == md['tmatrix']).all() md['tmatrix'] = dmatrix(np.random.rand(3, 3)) cseis = _CoreSeismogram(md, False) assert (cseis.transformation_matrix == md['tmatrix']).all() md['tmatrix'] = np.random.rand(9) cseis = _CoreSeismogram(md, False) assert (cseis.transformation_matrix == md['tmatrix'].reshape(3, 3)).all() md['tmatrix'] = np.random.rand(1, 9) cseis = _CoreSeismogram(md, False) assert (cseis.transformation_matrix == md['tmatrix'].reshape(3, 3)).all() md['tmatrix'] = np.random.rand(9, 1) cseis = _CoreSeismogram(md, False) assert (cseis.transformation_matrix == md['tmatrix'].reshape(3, 3)).all() md['tmatrix'] = np.random.rand(3, 3).tolist() cseis = _CoreSeismogram(md, False) assert np.isclose(cseis.transformation_matrix, np.array(md['tmatrix']).reshape(3, 3)).all() md['tmatrix'] = np.random.rand(9).tolist() cseis = _CoreSeismogram(md, False) assert np.isclose(cseis.transformation_matrix, np.array(md['tmatrix']).reshape(3, 3)).all() # test whether the setter of transformation_matrix updates metadata correctly tm = np.random.rand(1, 9) cseis.transformation_matrix = tm assert (cseis.transformation_matrix == tm.reshape(3, 3)).all() assert np.isclose(cseis.transformation_matrix, np.array(cseis['tmatrix']).reshape(3, 3)).all() tm = np.random.rand(9).tolist() cseis.transformation_matrix = tm assert np.isclose(cseis.transformation_matrix, np.array(tm).reshape(3, 3)).all() assert np.isclose(cseis.transformation_matrix, np.array(cseis['tmatrix']).reshape(3, 3)).all() # test exceptions md['tmatrix'] = np.random.rand(4, 2) with pytest.raises(MsPASSError, match="should be a 3x3 matrix"): _CoreSeismogram(md, False) md['tmatrix'] = dmatrix(np.random.rand(2, 4)) with pytest.raises(MsPASSError, match="should be a 3x3 matrix"): _CoreSeismogram(md, False) md['tmatrix'] = 42 with pytest.raises(MsPASSError, match="not recognized"): _CoreSeismogram(md, False) md.erase('tmatrix') with pytest.raises(MsPASSError, match="Error trying to extract"): _CoreSeismogram(md, False) md['tmatrix'] = {4: 2} with pytest.raises(MsPASSError, match="type is not recognized"): _CoreSeismogram(md, False) md['tmatrix'] = np.random.rand(9).tolist() md['tmatrix'][3] = 'str' with pytest.raises(MsPASSError, match="should be float"): _CoreSeismogram(md, False) md['tmatrix'] = np.random.rand(3, 4).tolist() with pytest.raises(MsPASSError, match="should be a 3x3 list of list"): _CoreSeismogram(md, False) md['tmatrix'] = [1, 2, 3] with pytest.raises(MsPASSError, match="should be a 3x3 list of list"): _CoreSeismogram(md, False) md['tmatrix'] = np.random.rand(2, 2).tolist() with pytest.raises( MsPASSError, match="should be a list of 9 floats or a 3x3 list of list"): _CoreSeismogram(md, False) md['tmatrix'] = np.random.rand(3, 3).tolist() md['tmatrix'][1][1] = 'str' with pytest.raises(MsPASSError, match="should be float"): _CoreSeismogram(md, False)