def test_get_timeseries_data_file2():

    expected = {"q_dates": [np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)]), np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)])],
                "p_dates": [np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)]), np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)])],
                "t_dates": [np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)]), np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)])],
                
                "q_values": [np.array([100.0, 110.0]), np.array([100.0, 110.0])],
                "p_values": [np.array([3, 4.5]), np.array([3, 4.5])],
                "t_values": [np.array([11.1, 12.2]), np.array([11.1, 12.2])],           
            
                "q_units": ["mm per day", "mm per day"],
                "p_units": ["mm", "mm"],
                "t_units": ["Celsius", "Celsius"]
                }
    
    simulation = waterxml.create_simulation_dict()

    simulation = waterxml.fill_simulation_dict(waterxml_tree = fixture["xml_tree2"], simulation_dict = simulation)

    actual = {}
    actual["q_dates"], actual["q_values"], actual["q_units"] = waterxml.get_timeseries_data(simulation_dict = simulation, timeseries_key = "StudyUnitDischargeSeries")
    actual["p_dates"], actual["p_values"], actual["p_units"] = waterxml.get_timeseries_data(simulation_dict = simulation, timeseries_key = "ClimaticPrecipitationSeries")
    actual["t_dates"], actual["t_values"], actual["t_units"] = waterxml.get_timeseries_data(simulation_dict = simulation, timeseries_key = "ClimaticTemperatureSeries")

    nose.tools.assert_equals(len(expected["q_dates"]), len(actual["q_dates"]))
    nose.tools.assert_equals(len(expected["p_dates"]), len(actual["p_dates"]))
    nose.tools.assert_equals(len(expected["t_dates"]), len(actual["t_dates"]))

    np.testing.assert_equal(actual["q_dates"][0], expected["q_dates"][0])
    np.testing.assert_equal(actual["p_dates"][0], expected["p_dates"][0])
    np.testing.assert_equal(actual["t_dates"][0], expected["t_dates"][0])

    np.testing.assert_equal(actual["q_values"][0], expected["q_values"][0])
    np.testing.assert_equal(actual["p_values"][0], expected["p_values"][0])
    np.testing.assert_equal(actual["t_values"][0], expected["t_values"][0])

    np.testing.assert_equal(actual["q_units"][0], expected["q_units"][0])
    np.testing.assert_equal(actual["p_units"][0], expected["p_units"][0])
    np.testing.assert_equal(actual["t_units"][0], expected["t_units"][0])

    np.testing.assert_equal(actual["q_dates"][1], expected["q_dates"][1])
    np.testing.assert_equal(actual["p_dates"][1], expected["p_dates"][1])
    np.testing.assert_equal(actual["t_dates"][1], expected["t_dates"][1])

    np.testing.assert_equal(actual["q_values"][1], expected["q_values"][1])
    np.testing.assert_equal(actual["p_values"][1], expected["p_values"][1])
    np.testing.assert_equal(actual["t_values"][1], expected["t_values"][1])

    np.testing.assert_equal(actual["q_units"][1], expected["q_units"][1])
    np.testing.assert_equal(actual["p_units"][1], expected["p_units"][1])
    np.testing.assert_equal(actual["t_units"][1], expected["t_units"][1])
def test_apply_factors():
    
    expected = {"q_dates": [np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)])],
                "p_dates": [np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)])],
                "t_dates": [np.array([datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0)])],
                
                "q_values": [np.array([200.0, 220.0])],
                "p_values": [np.array([6, 9.])],
                "t_values": [np.array([13.1, 14.2])],           
            
                "q_units": ["mm per day"],
                "p_units": ["mm"],
                "t_units": ["Celsius"]
                }
    
    simulation = waterxml.create_simulation_dict()

    simulation = waterxml.fill_simulation_dict(waterxml_tree = fixture["xml_tree1"], simulation_dict = simulation)

    q_dates, q_values, q_units = waterxml.get_timeseries_data(simulation_dict = simulation, timeseries_key = "StudyUnitDischargeSeries")
    p_dates, p_values, p_units = waterxml.get_timeseries_data(simulation_dict = simulation, timeseries_key = "ClimaticPrecipitationSeries")
    t_dates, t_values, t_units = waterxml.get_timeseries_data(simulation_dict = simulation, timeseries_key = "ClimaticTemperatureSeries")
    
    waterxml.apply_factors(waterxml_tree = fixture["xml_tree1"], element = "StudyUnitDischargeSeries", factors = fixture["factors"])
    waterxml.apply_factors(waterxml_tree = fixture["xml_tree1"], element = "ClimaticPrecipitationSeries", factors = fixture["factors"])
    waterxml.apply_factors(waterxml_tree = fixture["xml_tree1"], element = "ClimaticTemperatureSeries", factors = fixture["factors"])

    simulation_updated = waterxml.create_simulation_dict()

    simulation_updated = waterxml.fill_simulation_dict(waterxml_tree = fixture["xml_tree1"], simulation_dict = simulation_updated)
    
    actual = {}
    actual["q_dates"], actual["q_values"], actual["q_units"] = waterxml.get_timeseries_data(simulation_dict = simulation_updated, timeseries_key = "StudyUnitDischargeSeries")
    actual["p_dates"], actual["p_values"], actual["p_units"] = waterxml.get_timeseries_data(simulation_dict = simulation_updated, timeseries_key = "ClimaticPrecipitationSeries")
    actual["t_dates"], actual["t_values"], actual["t_units"] = waterxml.get_timeseries_data(simulation_dict = simulation_updated, timeseries_key = "ClimaticTemperatureSeries")

    nose.tools.assert_equals(len(expected["q_dates"]), len(actual["q_dates"]))
    nose.tools.assert_equals(len(expected["p_dates"]), len(actual["p_dates"]))
    nose.tools.assert_equals(len(expected["t_dates"]), len(actual["t_dates"]))

    np.testing.assert_equal(actual["q_dates"][0], expected["q_dates"][0])
    np.testing.assert_equal(actual["p_dates"][0], expected["p_dates"][0])
    np.testing.assert_equal(actual["t_dates"][0], expected["t_dates"][0])

    np.testing.assert_equal(actual["q_values"][0], expected["q_values"][0])
    np.testing.assert_equal(actual["p_values"][0], expected["p_values"][0])
    np.testing.assert_equal(actual["t_values"][0], expected["t_values"][0])

    np.testing.assert_equal(actual["q_units"][0], expected["q_units"][0])
    np.testing.assert_equal(actual["p_units"][0], expected["p_units"][0])
    np.testing.assert_equal(actual["t_units"][0], expected["t_units"][0])
def test_apply_factors():

    expected = {
        "q_dates": [
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ])
        ],
        "p_dates": [
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ])
        ],
        "t_dates": [
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ])
        ],
        "q_values": [np.array([200.0, 220.0])],
        "p_values": [np.array([6, 9.])],
        "t_values": [np.array([13.1, 14.2])],
        "q_units": ["mm per day"],
        "p_units": ["mm"],
        "t_units": ["Celsius"]
    }

    simulation = waterxml.create_simulation_dict()

    simulation = waterxml.fill_simulation_dict(
        waterxml_tree=fixture["xml_tree1"], simulation_dict=simulation)

    q_dates, q_values, q_units = waterxml.get_timeseries_data(
        simulation_dict=simulation, timeseries_key="StudyUnitDischargeSeries")
    p_dates, p_values, p_units = waterxml.get_timeseries_data(
        simulation_dict=simulation,
        timeseries_key="ClimaticPrecipitationSeries")
    t_dates, t_values, t_units = waterxml.get_timeseries_data(
        simulation_dict=simulation, timeseries_key="ClimaticTemperatureSeries")

    waterxml.apply_factors(waterxml_tree=fixture["xml_tree1"],
                           element="StudyUnitDischargeSeries",
                           factors=fixture["factors"])
    waterxml.apply_factors(waterxml_tree=fixture["xml_tree1"],
                           element="ClimaticPrecipitationSeries",
                           factors=fixture["factors"])
    waterxml.apply_factors(waterxml_tree=fixture["xml_tree1"],
                           element="ClimaticTemperatureSeries",
                           factors=fixture["factors"])

    simulation_updated = waterxml.create_simulation_dict()

    simulation_updated = waterxml.fill_simulation_dict(
        waterxml_tree=fixture["xml_tree1"], simulation_dict=simulation_updated)

    actual = {}
    actual["q_dates"], actual["q_values"], actual[
        "q_units"] = waterxml.get_timeseries_data(
            simulation_dict=simulation_updated,
            timeseries_key="StudyUnitDischargeSeries")
    actual["p_dates"], actual["p_values"], actual[
        "p_units"] = waterxml.get_timeseries_data(
            simulation_dict=simulation_updated,
            timeseries_key="ClimaticPrecipitationSeries")
    actual["t_dates"], actual["t_values"], actual[
        "t_units"] = waterxml.get_timeseries_data(
            simulation_dict=simulation_updated,
            timeseries_key="ClimaticTemperatureSeries")

    nose.tools.assert_equals(len(expected["q_dates"]), len(actual["q_dates"]))
    nose.tools.assert_equals(len(expected["p_dates"]), len(actual["p_dates"]))
    nose.tools.assert_equals(len(expected["t_dates"]), len(actual["t_dates"]))

    np.testing.assert_equal(actual["q_dates"][0], expected["q_dates"][0])
    np.testing.assert_equal(actual["p_dates"][0], expected["p_dates"][0])
    np.testing.assert_equal(actual["t_dates"][0], expected["t_dates"][0])

    np.testing.assert_equal(actual["q_values"][0], expected["q_values"][0])
    np.testing.assert_equal(actual["p_values"][0], expected["p_values"][0])
    np.testing.assert_equal(actual["t_values"][0], expected["t_values"][0])

    np.testing.assert_equal(actual["q_units"][0], expected["q_units"][0])
    np.testing.assert_equal(actual["p_units"][0], expected["p_units"][0])
    np.testing.assert_equal(actual["t_units"][0], expected["t_units"][0])
def test_get_timeseries_data_file2():

    expected = {
        "q_dates": [
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ]),
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ])
        ],
        "p_dates": [
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ]),
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ])
        ],
        "t_dates": [
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ]),
            np.array([
                datetime.datetime(2014, 1, 1, 0, 0),
                datetime.datetime(2014, 1, 2, 0, 0)
            ])
        ],
        "q_values": [np.array([100.0, 110.0]),
                     np.array([100.0, 110.0])],
        "p_values": [np.array([3, 4.5]),
                     np.array([3, 4.5])],
        "t_values": [np.array([11.1, 12.2]),
                     np.array([11.1, 12.2])],
        "q_units": ["mm per day", "mm per day"],
        "p_units": ["mm", "mm"],
        "t_units": ["Celsius", "Celsius"]
    }

    simulation = waterxml.create_simulation_dict()

    simulation = waterxml.fill_simulation_dict(
        waterxml_tree=fixture["xml_tree2"], simulation_dict=simulation)

    actual = {}
    actual["q_dates"], actual["q_values"], actual[
        "q_units"] = waterxml.get_timeseries_data(
            simulation_dict=simulation,
            timeseries_key="StudyUnitDischargeSeries")
    actual["p_dates"], actual["p_values"], actual[
        "p_units"] = waterxml.get_timeseries_data(
            simulation_dict=simulation,
            timeseries_key="ClimaticPrecipitationSeries")
    actual["t_dates"], actual["t_values"], actual[
        "t_units"] = waterxml.get_timeseries_data(
            simulation_dict=simulation,
            timeseries_key="ClimaticTemperatureSeries")

    nose.tools.assert_equals(len(expected["q_dates"]), len(actual["q_dates"]))
    nose.tools.assert_equals(len(expected["p_dates"]), len(actual["p_dates"]))
    nose.tools.assert_equals(len(expected["t_dates"]), len(actual["t_dates"]))

    np.testing.assert_equal(actual["q_dates"][0], expected["q_dates"][0])
    np.testing.assert_equal(actual["p_dates"][0], expected["p_dates"][0])
    np.testing.assert_equal(actual["t_dates"][0], expected["t_dates"][0])

    np.testing.assert_equal(actual["q_values"][0], expected["q_values"][0])
    np.testing.assert_equal(actual["p_values"][0], expected["p_values"][0])
    np.testing.assert_equal(actual["t_values"][0], expected["t_values"][0])

    np.testing.assert_equal(actual["q_units"][0], expected["q_units"][0])
    np.testing.assert_equal(actual["p_units"][0], expected["p_units"][0])
    np.testing.assert_equal(actual["t_units"][0], expected["t_units"][0])

    np.testing.assert_equal(actual["q_dates"][1], expected["q_dates"][1])
    np.testing.assert_equal(actual["p_dates"][1], expected["p_dates"][1])
    np.testing.assert_equal(actual["t_dates"][1], expected["t_dates"][1])

    np.testing.assert_equal(actual["q_values"][1], expected["q_values"][1])
    np.testing.assert_equal(actual["p_values"][1], expected["p_values"][1])
    np.testing.assert_equal(actual["t_values"][1], expected["t_values"][1])

    np.testing.assert_equal(actual["q_units"][1], expected["q_units"][1])
    np.testing.assert_equal(actual["p_units"][1], expected["p_units"][1])
    np.testing.assert_equal(actual["t_units"][1], expected["t_units"][1])