Ejemplo n.º 1
0
    def test_process(self):
        """Verify the zip file is processed properly
        """
        h5filename = "tests/RTS_DA.hdf5"

        h5file = process_solution("tests/Model DAY_AHEAD_h1 Solution.zip", h5filename)

        times = h5file['/metadata/times/interval']
        self.assertEqual(b"2020-01-01T00:00:00", times[0])
        self.assertEqual(b"2020-01-02T23:00:00", times[47])

        phase_times = h5file['/metadata/times/ST']
        self.assertEqual(b"2020-01-01T00:00:00", phase_times[0])
        self.assertEqual(b"2020-01-02T23:00:00", phase_times[47])
        h5file.close()

        h5file = process_solution("tests/Model DAY_AHEAD_h2 Solution.zip", h5filename)

        times = h5file['/metadata/times/interval']
        self.assertEqual(b"2020-07-01T00:00:00", times[0])
        self.assertEqual(b"2020-07-02T23:00:00", times[47])

        phase_times = h5file['/metadata/times/ST']
        self.assertEqual(b"2020-07-01T00:00:00", phase_times[0])
        self.assertEqual(b"2020-07-02T23:00:00", phase_times[47])
        h5file.close()

        os.remove(h5filename)
Ejemplo n.º 2
0
    def test_properties(self):
        """Verify property values are available
        """
        h5filename = "tests/RTS_DA_properties.hdf5"

        h5file = process_solution("tests/Model DAY_AHEAD_h1 Solution.zip", h5filename)
        expected = np.array(
            [28.8742192841606, 29.2507825525972, 27.5952142765667,
             21.9715405175445, 7.98968935072566, -3.84725642745148,
             1.85503631499546, 5.07103646862386, 14.9091253711748,
             16.7898373291084, 12.3500587495798, 14.0178266329467,
             15.3848278766994, 22.8098348077484, 20.2177700376444,
             8.27787285160804, -13.7586901465986, 6.0633617651001,
             6.35689451038861, 8.8109582959243, 24.1764745175945,
             22.6143140432123, 36.1641235074314, 36.3852069384884])
        idx = np.where(h5file["/metadata/objects/line"]["name"] ==
                       bytes("AB1", "UTF8"))[0][0]
        np.testing.assert_allclose(h5file["/data/ST/interval/line/Flow"][idx,:24].ravel(), expected)
        h5file.close()

        h5file = process_solution("tests/Model DAY_AHEAD_h2 Solution.zip", h5filename)
        expected = np.array(
            [170, 170, 170, 170,
            170, 170, 170, 170,
            170, 170, 170, 170,
            231.7, 293.3, 293.3, 293.3,
            335.423428999999, 355, 355, 355,
            294.542642999999, 293.3, 231.7, 231.7])
        idx = np.where(h5file["/metadata/objects/generator"]["name"] ==
                       bytes("107_CC_1", "UTF8"))[0][0]
        np.testing.assert_allclose(h5file["/data/ST/interval/generator/Generation"][idx,24:48].ravel(), expected)
        h5file.close()

        os.remove(h5filename)
Ejemplo n.º 3
0
    def test_object_times(self):
        """Verify object times are available
        """
        h5filename = "tests/RTS_DA_times.hdf5"

        h5file = process_solution("tests/Model DAY_AHEAD_h1 Solution.zip", h5filename)
        expected = [b"2020-01-01T%02d:00:00" % x for x in range(24)]
        self.assertEqual(expected, list(h5file['/metadata/times/ST'][0:24]))
        h5file.close()

        h5file = process_solution("tests/Model DAY_AHEAD_h2 Solution.zip", h5filename)
        expected = [b"2020-07-02T%02d:00:00" % x for x in range(24)]
        self.assertEqual(expected, list(h5file['/metadata/times/ST'][24:48]))
        h5file.close()

        os.remove(h5filename)
Ejemplo n.º 4
0
 def test_object_units(self):
     """Verify object property units are available
     """
     h5filename = "tests/RTS_DA_units.hdf5"
     h5file = process_solution("tests/Model DAY_AHEAD_h1 Solution.zip", h5filename)
     self.assertEqual("$/MWh", h5file["data/ST/interval/node/Price"].attrs["unit"])
     self.assertEqual("MW", h5file["data/ST/interval/generator/Generation"].attrs["unit"])
     self.assertEqual("GWh", h5file["data/ST/month/generator/Generation"].attrs["unit"])
     h5file.close()
     os.remove(h5filename)
Ejemplo n.º 5
0
    def test_query_object_values_month(self):

        h5filename = "tests/RTS_DA_h2.h5"
        process_solution("tests/Model DAY_AHEAD_h2 Solution.zip", h5filename)

        expected_generation = [
            0, 0, 0, 0, 0, 0,
            88.98564573773,
            73.72927432927,
            116.81835971605,
            127.5698581023,
            326.90425895285,
            249.19300099602]

        with PLEXOSSolution(h5filename) as db:

            result = db.generator(
                "Generation", names=["122_WIND_1"], timescale="month")
            self.assertTrue(np.isclose(expected_generation, list(result)).all())

        os.remove(h5filename)
Ejemplo n.º 6
0
    def test_query_object_values_interval(self):
        """Verify object values are available
        """

        h5filename = "tests/RTS_DA.h5"
        process_solution("tests/Model DAY_AHEAD Solution.zip", h5filename)

        expected_timestamps = list(pd.DatetimeIndex(start="1/1/2020 00:00:00",
                                               end="1/1/2020 23:00:00",
                                               freq="H"))

        expected_flow = [-330.197431834115, -332.389888001791, -334.860066230212,
                         -334.794115561143, -339.795973724878, -368.928288297157,
                         -308.155615860858, -282.568408516569, -265.123568756352,
                         -224.586887604017, -162.915840602681, -131.667018544265,
                         -127.29943543624, -108.499125476666, -37.5693788753338,
                         -42.3496225987148, 54.084407447253, -62.1597519929606,
                         -72.7661568218603, -79.917583594192, -146.889373743392,
                         -197.581977296408, -289.342389741395, -229.896443712577]

        expected_offtake = [398.1, 398.1, 398.1, 398.1, 398.1, 398.1,
                            755.2398, 398.1, 398.1, 398.1, 398.1, 398.1,
                            398.1, 637.658136350009, 755.2398, 755.2398, 755.2398, 755.2398,
                            755.2398, 755.2398, 755.2398, 755.2398, 755.2398, 755.2398]

        with PLEXOSSolution(h5filename) as db:

            # Test line flows

            result = db.query_object_property("line", "Flow", names=["A27"]).iloc[:24]
            self.assertTrue(np.isclose(expected_flow, list(result)).all())
            self.assertEqual(expected_timestamps, [x[3] for x in result.index])

            result = db.line("Flow", names=["A27"]).iloc[:24]
            self.assertTrue(np.isclose(expected_flow, list(result)).all())
            self.assertEqual(expected_timestamps, [x[3] for x in result.index])

            # Test generator fuel offtake

            result = db.query_relation_property(
                "generator_fuels", "Offtake", parents=["101_STEAM_3"], children=["Coal"]).iloc[:24]
            self.assertTrue(np.isclose(expected_offtake, list(result)).all())
            self.assertEqual(expected_timestamps, [x[3] for x in result.index])

            result = db.generator_fuels(
                "Offtake", parents=["101_STEAM_3"], children=["Coal"]).iloc[:24]
            self.assertTrue(np.isclose(expected_offtake, list(result)).all())
            self.assertEqual(expected_timestamps, [x[3] for x in result.index])

        os.remove(h5filename)

        h5filename = "tests/RTS_DA_h2.h5"
        process_solution("tests/Model DAY_AHEAD_h2 Solution.zip", h5filename)

        expected_generation = [
            0, 0, 0, 0, 0, 8.8,
            13.6, 15.6, 17.1, 17.1, 18.2, 18.5,
            18.1, 16.8, 16.3, 14.2, 9.8, 4.4,
            0, 0, 0, 0, 0, 0
        ]

        with PLEXOSSolution(h5filename) as db:

            result = db.generator("Generation", names=["102_PV_1"]).xs(
                slice("7/3/2020", "7/3/2020"), level="timestamp")
            self.assertTrue(np.isclose(expected_generation, list(result)).all())

            result = db.generator("Generation", categories=["Solar PV"]).xs(
                ("102_PV_1", slice("7/3/2020", "7/3/2020")),
                level=("name", "timestamp"))
            self.assertTrue(np.isclose(expected_generation, list(result)).all())

            result = db.generator("Generation").xs(
                ("102_PV_1", slice("7/3/2020", "7/3/2020")),
                level=("name", "timestamp"))
            self.assertTrue(np.isclose(expected_generation, list(result)).all())

        os.remove(h5filename)