Esempio n. 1
0
def test_window_collection_init_failures(tmpdir):
    """
    Tests initializing the window collection class.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    # Initializing the collection with a non-existing filename and no
    # event_name, channel_id, or synthetics_tag raises an error.
    with pytest.raises(ValueError):
        WindowCollection(filename=filename)
    with pytest.raises(ValueError):
        WindowCollection(filename=filename, event_name="A")
    with pytest.raises(ValueError):
        WindowCollection(filename=filename,
                         event_name="A",
                         channel_id="A.B.C.D")
    with pytest.raises(ValueError):
        WindowCollection(filename=filename, synthetics_tag="ABCD")

    # Initializing with an existing file and windows also raises.
    with open(filename, "wb") as fh:
        fh.write("")
    with pytest.raises(ValueError) as error:
        WindowCollection(filename=filename, windows=[1, 2, 3])
    assert "existing file and new windows" in str(error.value).lower()
Esempio n. 2
0
def test_no_windows_will_remove_existing_file(tmpdir):
    """
    A window collection that has no windows will attempt to remove its own
    file if it has no windows without emitting a warnings.

    This grants a natural way to get rid of empty windows.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    wc = WindowCollection(filename,
                          event_name="SomeEvent",
                          channel_id="AA.BB.CC.DD",
                          synthetics_tag="Iteration_A")
    wc.add_window(starttime=UTCDateTime(2012, 1, 1),
                  endtime=UTCDateTime(2012, 1, 1, 0, 1),
                  weight=0.5,
                  taper="cosine",
                  taper_percentage=0.08)
    wc.write()

    assert os.listdir(tmpdir) == [os.path.basename(filename)]
    wc.windows = []
    wc.write()
    assert os.listdir(tmpdir) == []
Esempio n. 3
0
def test_window_i_o_missing_taper_percentage(tmpdir):
    """
    Legacy test as older windows definitions have no taper percentage.

    It thus should be added automatically.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    xml = (
        "<?xml version='1.0' encoding='utf-8'?>\n"
        "<MisfitWindow>\n"
        "  <Event>SomeEvent</Event>\n"
        "  <ChannelID>AA.BB.CC.DD</ChannelID>\n"
        "  <SyntheticsTag>Iteration_A</SyntheticsTag>\n"
        "  <Window>\n"
        "    <Starttime>2012-01-01T00:00:00.000000Z</Starttime>\n"
        "    <Endtime>2012-01-01T00:01:00.000000Z</Endtime>\n"
        "    <Weight>0.5</Weight>\n"
        "    <Taper>cosine</Taper>\n"
        "    <Misfit>some misfit</Misfit>\n"
        "    <MisfitValue>1e-05</MisfitValue>\n"
        "  </Window>\n"
        "</MisfitWindow>")
    with open(filename, "wb") as fh:
        fh.write(xml)

    wc = WindowCollection(filename)
    assert wc.windows[0].taper_percentage == 0.05

    # Writing it again adds the taper percentage.
    os.remove(filename)
    wc.write()
    with open(filename, "rb") as fh:
        actual = fh.read().strip()
    reference = (
        "<?xml version='1.0' encoding='utf-8'?>\n"
        "<MisfitWindow>\n"
        "  <Event>SomeEvent</Event>\n"
        "  <ChannelID>AA.BB.CC.DD</ChannelID>\n"
        "  <SyntheticsTag>Iteration_A</SyntheticsTag>\n"
        "  <Window>\n"
        "    <Starttime>2012-01-01T00:00:00.000000Z</Starttime>\n"
        "    <Endtime>2012-01-01T00:01:00.000000Z</Endtime>\n"
        "    <Weight>0.5</Weight>\n"
        "    <Taper>cosine</Taper>\n"
        "    <TaperPercentage>0.05</TaperPercentage>\n"
        "    <Misfit>some misfit</Misfit>\n"
        "    <MisfitValue>1e-05</MisfitValue>\n"
        "  </Window>\n"
        "</MisfitWindow>")
    assert reference == actual
Esempio n. 4
0
def test_window_i_o_missing_taper_percentage(tmpdir):
    """
    Legacy test as older windows definitions have no taper percentage.

    It thus should be added automatically.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    xml = ("<?xml version='1.0' encoding='utf-8'?>\n"
           "<MisfitWindow>\n"
           "  <Event>SomeEvent</Event>\n"
           "  <ChannelID>AA.BB.CC.DD</ChannelID>\n"
           "  <SyntheticsTag>Iteration_A</SyntheticsTag>\n"
           "  <Window>\n"
           "    <Starttime>2012-01-01T00:00:00.000000Z</Starttime>\n"
           "    <Endtime>2012-01-01T00:01:00.000000Z</Endtime>\n"
           "    <Weight>0.5</Weight>\n"
           "    <Taper>cosine</Taper>\n"
           "    <Misfit>some misfit</Misfit>\n"
           "  </Window>\n"
           "</MisfitWindow>")
    with open(filename, "wb") as fh:
        fh.write(xml)

    wc = WindowCollection(filename)
    assert wc.windows[0].taper_percentage == 0.05

    # Writing it again adds the taper percentage.
    os.remove(filename)
    wc.write()
    with open(filename, "rb") as fh:
        actual = fh.read().strip()
    reference = ("<?xml version='1.0' encoding='utf-8'?>\n"
                 "<MisfitWindow>\n"
                 "  <Event>SomeEvent</Event>\n"
                 "  <ChannelID>AA.BB.CC.DD</ChannelID>\n"
                 "  <SyntheticsTag>Iteration_A</SyntheticsTag>\n"
                 "  <Window>\n"
                 "    <Starttime>2012-01-01T00:00:00.000000Z</Starttime>\n"
                 "    <Endtime>2012-01-01T00:01:00.000000Z</Endtime>\n"
                 "    <Weight>0.5</Weight>\n"
                 "    <Taper>cosine</Taper>\n"
                 "    <TaperPercentage>0.05</TaperPercentage>\n"
                 "    <Misfit>some misfit</Misfit>\n"
                 "  </Window>\n"
                 "</MisfitWindow>")
    assert reference == actual
Esempio n. 5
0
def test_no_windows_will_remove_existing_file(tmpdir):
    """
    A window collection that has no windows will attempt to remove its own
    file if it has no windows without emitting a warnings.

    This grants a natural way to get rid of empty windows.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    wc = WindowCollection(filename, event_name="SomeEvent",
                          channel_id="AA.BB.CC.DD",
                          synthetics_tag="Iteration_A")
    wc.add_window(starttime=UTCDateTime(2012, 1, 1),
                  endtime=UTCDateTime(2012, 1, 1, 0, 1),
                  weight=0.5, taper="cosine", taper_percentage=0.08)
    wc.write()

    assert os.listdir(tmpdir) == [os.path.basename(filename)]
    wc.windows = []
    wc.write()
    assert os.listdir(tmpdir) == []
Esempio n. 6
0
def test_delete_windows(tmpdir):
    """
    Tests the deletion of windows.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    wc = WindowCollection(filename,
                          event_name="SomeEvent",
                          channel_id="AA.BB.CC.DD",
                          synthetics_tag="Iteration_A")
    wc.add_window(starttime=UTCDateTime(2012, 1, 1),
                  endtime=UTCDateTime(2012, 1, 1, 0, 1),
                  weight=0.5,
                  taper="cosine",
                  taper_percentage=0.08)
    # The last three windows differ by a second each.
    wc.add_window(starttime=UTCDateTime(2013, 1, 1),
                  endtime=UTCDateTime(2013, 1, 1, 0, 1),
                  weight=0.5,
                  taper="cosine",
                  taper_percentage=0.08)
    wc.add_window(starttime=UTCDateTime(2013, 1, 1),
                  endtime=UTCDateTime(2013, 1, 1, 0, 1, 1),
                  weight=0.5,
                  taper="cosine",
                  taper_percentage=0.08)
    wc.add_window(starttime=UTCDateTime(2013, 1, 1),
                  endtime=UTCDateTime(2013, 1, 1, 0, 1, 2),
                  weight=0.5,
                  taper="cosine",
                  taper_percentage=0.08)

    assert len(wc) == 4

    wc.delete_window(starttime=UTCDateTime(2012, 1, 1),
                     endtime=UTCDateTime(2012, 1, 1, 0, 1),
                     tolerance=0.0)
    assert len(wc) == 3

    # 2 percent of one minute is 1.2 seconds.
    wc.delete_window(starttime=UTCDateTime(2013, 1, 1),
                     endtime=UTCDateTime(2013, 1, 1, 0, 1),
                     tolerance=0.02)
    assert len(wc) == 1
Esempio n. 7
0
def test_window_collection_i_o(tmpdir):
    """
    Reading and writing windows.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    wc = WindowCollection(filename,
                          event_name="SomeEvent",
                          channel_id="AA.BB.CC.DD",
                          synthetics_tag="Iteration_A")
    wc.add_window(starttime=UTCDateTime(2012, 1, 1),
                  endtime=UTCDateTime(2012, 1, 1, 0, 1),
                  weight=0.5,
                  taper="cosine",
                  taper_percentage=0.08,
                  misfit_type="some misfit")
    wc.write()

    # Hardcode an example to be sure the format is correct.
    reference = ("<?xml version='1.0' encoding='utf-8'?>\n"
                 "<MisfitWindow>\n"
                 "  <Event>SomeEvent</Event>\n"
                 "  <ChannelID>AA.BB.CC.DD</ChannelID>\n"
                 "  <SyntheticsTag>Iteration_A</SyntheticsTag>\n"
                 "  <Window>\n"
                 "    <Starttime>2012-01-01T00:00:00.000000Z</Starttime>\n"
                 "    <Endtime>2012-01-01T00:01:00.000000Z</Endtime>\n"
                 "    <Weight>0.5</Weight>\n"
                 "    <Taper>cosine</Taper>\n"
                 "    <TaperPercentage>0.08</TaperPercentage>\n"
                 "    <Misfit>some misfit</Misfit>\n"
                 "  </Window>\n"
                 "</MisfitWindow>")
    with open(filename, "rb") as fh:
        actual = fh.read().strip()
    assert reference == actual

    # Read it once again and make sure it is identical.
    wc2 = WindowCollection(filename)
    assert wc == wc2

    # Add a new window and test the same again.
    wc.add_window(starttime=UTCDateTime(2013, 1, 1),
                  endtime=UTCDateTime(2013, 1, 1, 0, 1),
                  weight=0.8,
                  taper="hanning",
                  taper_percentage=0.1,
                  misfit_type="other misfit")
    wc.write()
    reference = ("<?xml version='1.0' encoding='utf-8'?>\n"
                 "<MisfitWindow>\n"
                 "  <Event>SomeEvent</Event>\n"
                 "  <ChannelID>AA.BB.CC.DD</ChannelID>\n"
                 "  <SyntheticsTag>Iteration_A</SyntheticsTag>\n"
                 "  <Window>\n"
                 "    <Starttime>2012-01-01T00:00:00.000000Z</Starttime>\n"
                 "    <Endtime>2012-01-01T00:01:00.000000Z</Endtime>\n"
                 "    <Weight>0.5</Weight>\n"
                 "    <Taper>cosine</Taper>\n"
                 "    <TaperPercentage>0.08</TaperPercentage>\n"
                 "    <Misfit>some misfit</Misfit>\n"
                 "  </Window>\n"
                 "  <Window>\n"
                 "    <Starttime>2013-01-01T00:00:00.000000Z</Starttime>\n"
                 "    <Endtime>2013-01-01T00:01:00.000000Z</Endtime>\n"
                 "    <Weight>0.8</Weight>\n"
                 "    <Taper>hanning</Taper>\n"
                 "    <TaperPercentage>0.1</TaperPercentage>\n"
                 "    <Misfit>other misfit</Misfit>\n"
                 "  </Window>\n"
                 "</MisfitWindow>")
    with open(filename, "rb") as fh:
        actual = fh.read().strip()
    assert reference == actual

    wc3 = WindowCollection(filename)
    assert wc == wc3
Esempio n. 8
0
def test_delete_windows(tmpdir):
    """
    Tests the deletion of windows.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    wc = WindowCollection(filename, event_name="SomeEvent",
                          channel_id="AA.BB.CC.DD",
                          synthetics_tag="Iteration_A")
    wc.add_window(starttime=UTCDateTime(2012, 1, 1),
                  endtime=UTCDateTime(2012, 1, 1, 0, 1),
                  weight=0.5, taper="cosine", taper_percentage=0.08,
                  misfit_type="some misfit", misfit_value=1E-5)
    # The last three windows differ by a second each.
    wc.add_window(starttime=UTCDateTime(2013, 1, 1),
                  endtime=UTCDateTime(2013, 1, 1, 0, 1),
                  weight=0.5, taper="cosine", taper_percentage=0.08,
                  misfit_type="some misfit", misfit_value=1E-5)
    wc.add_window(starttime=UTCDateTime(2013, 1, 1),
                  endtime=UTCDateTime(2013, 1, 1, 0, 1, 1),
                  weight=0.5, taper="cosine", taper_percentage=0.08,
                  misfit_type="some misfit", misfit_value=1E-5)
    wc.add_window(starttime=UTCDateTime(2013, 1, 1),
                  endtime=UTCDateTime(2013, 1, 1, 0, 1, 2),
                  weight=0.5, taper="cosine", taper_percentage=0.08,
                  misfit_type="some misfit", misfit_value=1E-5)

    assert len(wc) == 4

    wc.delete_window(starttime=UTCDateTime(2012, 1, 1),
                     endtime=UTCDateTime(2012, 1, 1, 0, 1),
                     tolerance=0.0)
    assert len(wc) == 3

    # 2 percent of one minute is 1.2 seconds.
    wc.delete_window(starttime=UTCDateTime(2013, 1, 1),
                     endtime=UTCDateTime(2013, 1, 1, 0, 1),
                     tolerance=0.02)
    assert len(wc) == 1
Esempio n. 9
0
def test_window_collection_i_o(tmpdir):
    """
    Reading and writing windows.
    """
    tmpdir = str(tmpdir)
    filename = os.path.join(tmpdir, "random.xml")

    wc = WindowCollection(filename, event_name="SomeEvent",
                          channel_id="AA.BB.CC.DD",
                          synthetics_tag="Iteration_A")
    wc.add_window(starttime=UTCDateTime(2012, 1, 1),
                  endtime=UTCDateTime(2012, 1, 1, 0, 1),
                  weight=0.5, taper="cosine", taper_percentage=0.08,
                  misfit_type="some misfit", misfit_value=1E-5)
    wc.write()

    # Hardcode an example to be sure the format is correct.
    reference = (
        "<?xml version='1.0' encoding='utf-8'?>\n"
        "<MisfitWindow>\n"
        "  <Event>SomeEvent</Event>\n"
        "  <ChannelID>AA.BB.CC.DD</ChannelID>\n"
        "  <SyntheticsTag>Iteration_A</SyntheticsTag>\n"
        "  <Window>\n"
        "    <Starttime>2012-01-01T00:00:00.000000Z</Starttime>\n"
        "    <Endtime>2012-01-01T00:01:00.000000Z</Endtime>\n"
        "    <Weight>0.5</Weight>\n"
        "    <Taper>cosine</Taper>\n"
        "    <TaperPercentage>0.08</TaperPercentage>\n"
        "    <Misfit>some misfit</Misfit>\n"
        "    <MisfitValue>1e-05</MisfitValue>\n"
        "  </Window>\n"
        "</MisfitWindow>")
    with open(filename, "rb") as fh:
        actual = fh.read().strip()
    assert reference == actual

    # Read it once again and make sure it is identical.
    wc2 = WindowCollection(filename)
    assert wc == wc2

    # Add a new window and test the same again.
    wc.add_window(starttime=UTCDateTime(2013, 1, 1),
                  endtime=UTCDateTime(2013, 1, 1, 0, 1),
                  weight=0.8, taper="hanning", taper_percentage=0.1,
                  misfit_type="other misfit", misfit_value=0.0)
    wc.write()
    reference = (
        "<?xml version='1.0' encoding='utf-8'?>\n"
        "<MisfitWindow>\n"
        "  <Event>SomeEvent</Event>\n"
        "  <ChannelID>AA.BB.CC.DD</ChannelID>\n"
        "  <SyntheticsTag>Iteration_A</SyntheticsTag>\n"
        "  <Window>\n"
        "    <Starttime>2012-01-01T00:00:00.000000Z</Starttime>\n"
        "    <Endtime>2012-01-01T00:01:00.000000Z</Endtime>\n"
        "    <Weight>0.5</Weight>\n"
        "    <Taper>cosine</Taper>\n"
        "    <TaperPercentage>0.08</TaperPercentage>\n"
        "    <Misfit>some misfit</Misfit>\n"
        "    <MisfitValue>1e-05</MisfitValue>\n"
        "  </Window>\n"
        "  <Window>\n"
        "    <Starttime>2013-01-01T00:00:00.000000Z</Starttime>\n"
        "    <Endtime>2013-01-01T00:01:00.000000Z</Endtime>\n"
        "    <Weight>0.8</Weight>\n"
        "    <Taper>hanning</Taper>\n"
        "    <TaperPercentage>0.1</TaperPercentage>\n"
        "    <Misfit>other misfit</Misfit>\n"
        "    <MisfitValue>0.0</MisfitValue>\n"
        "  </Window>\n"
        "</MisfitWindow>")
    with open(filename, "rb") as fh:
        actual = fh.read().strip()
    assert reference == actual

    wc3 = WindowCollection(filename)
    assert wc == wc3