예제 #1
0
    def test_cache_on_filter(self):
        for _ in iter_eplus_versions(self):
            # load idf
            idf = self.get_idf()

            # check that cache is empty
            nb = len(idf._.cache)
            self.assertEqual(0, nb)

            # perform request
            idf["Schedule:Compact"].one(
                lambda x: x["name"] == "system availability schedule")
            nb = len(idf._.cache)

            # check cache went up, and hits are 0
            self.assertTrue(nb > 0)
            self.assertEqual([0] * nb,
                             [v["hits"] for v in idf._.cache.values()])

            # retry
            idf["Schedule:Compact"].one(
                lambda x: x["name"] == "system availability schedule")

            # check cache didn't go up, and hits are 1
            self.assertEqual(nb, len(idf._.cache))
            self.assertEqual([1] * nb,
                             [v["hits"] for v in idf._.cache.values()])

            # clear
            idf.clear_cache()

            # check cache was cleared
            self.assertEqual(0, len(idf._.cache))
예제 #2
0
 def test_idf_add_record(self):
     for _ in iter_eplus_versions(self):
         idf_manager = self.get_idf_manager()
         sch_name = "NEW TEST SCHEDULE"
         new_record = idf_manager.add_records(schedule_test_record_str %
                                              sch_name)
         self.assertEqual(new_record._.idf_manager, idf_manager)
예제 #3
0
    def test_pop_middle(self):
        for _ in iter_eplus_versions(self):
            idf = self.get_idf()
            sch = idf["Schedule:Compact"].one(
                lambda x: x["name"] == "system availability schedule")

            # before pop
            self.assertEqual(
                """Schedule:Compact,
    system availability schedule,  ! - Name
    any number,                    ! - Schedule Type Limits Name
    through: 12/31,                ! - Field 1
    for: alldays,                  ! - Field 2
    until: 24:00,                  ! - Field 3
    1;                             ! - Field 3
""", sch.to_str())

            # pop
            self.assertEqual("through: 12/31", sch.pop(2))

            # after pop
            self.assertEqual(
                """Schedule:Compact,
    system availability schedule,  ! - Name
    any number,                    ! - Schedule Type Limits Name
    for: alldays,                  ! - Field 2
    until: 24:00,                  ! - Field 3
    1;                             ! - Field 3
""", sch.to_str())
예제 #4
0
    def test_pointing_links_l(self):
        for eplus_version in iter_eplus_versions(self):
            zone = self.idf_managers_d[eplus_version].get_table("Zone").one()
            d = {  # ref: [pointing_index, nb of records], ...
                "BuildingSurface:Detailed": [3, 6],  # index 3
                "ZoneInfiltration:DesignFlowRate": [1, 1],  # index 1
                "ZoneHVAC:EquipmentConnections": [0, 1],  # index 0
                "ZoneControl:Thermostat": [1, 1]  # index 1
            }

            # check all pointing
            _d = {}
            for pointing_record, pointing_index in zone._.get_pointing_links():
                # check points
                self.assertEqual(pointing_record._.get_value(pointing_index),
                                 zone)
                # verify all are identified
                if pointing_record._.table.ref not in _d:
                    _d[pointing_record._.table.ref] = [pointing_index, 1]
                else:
                    self.assertEqual(pointing_index,
                                     _d[pointing_record._.table.ref][0])
                    _d[pointing_record._.table.ref][1] += 1
            self.assertEqual(d, _d)

            # check pointing on pointed_index
            self.assertEqual(len(zone._.get_pointing_links(0)),
                             9)  # 9 pointing
            self.assertEqual(len(zone._.get_pointing_links(3)),
                             0)  # no pointing
예제 #5
0
파일: test_err.py 프로젝트: michbeg/oplus
 def test_err(self):
     for eplus_version in iter_eplus_versions(self):
         version_str = "-".join([str(v) for v in eplus_version])
         s = Simulation(
             os.path.join(RESOURCES_DIR_PATH, "simulations-outputs",
                          "one_zone_uncontrolled", version_str))
         self.assertIsNotNone(s.err)
예제 #6
0
 def test_idf_unlink_and_remove(self):
     for _ in iter_eplus_versions(self):
         idf = self.get_idf()
         zone = idf["Zone"].one()
         zone.unlink_pointing_records()
         idf.remove(zone)
         self.assertEqual(len(idf["Zone"].select()), 0)
예제 #7
0
    def test_values(self):
        for eplus_version in iter_eplus_versions(self):
            version_str = "-".join([str(v) for v in eplus_version])
            s = Simulation(os.path.join(
                RESOURCES_DIR_PATH,
                "simulations-outputs",
                "one_zone_uncontrolled",
                version_str
            ))
            eio = s.eio

            self.assertEqual(
                float(eio.df("Site:GroundReflectance:SnowModifier").loc[0, "Normal"]),
                1
            )
            df = eio.df("Material CTF Summary")

            self.assertEqual(
                float(df[df[df.columns[0]] == "R13LAYER"].iloc[0, 5]),
                2.291
            )
            self.assertEqual(
                float(eio.get_value("Material CTF Summary", 5, 0, "R13LAYER")),
                2.291
            )
            self.assertEqual(
                float(eio.get_value(
                    "Material CTF Summary",
                    "ThermalResistance {m2-K/w}",
                    "Material Name",
                    "R13LAYER")
                ),
                2.291
            )
예제 #8
0
 def test_pop_end(self):
     for _ in iter_eplus_versions(self):
         idf = self.get_idf()
         sch = idf["Schedule:Compact"].one(
             lambda x: x["name"] == "system availability schedule")
         ini_len = len(sch)
         self.assertEqual("1", sch.pop())
         self.assertEqual(ini_len - 1, len(sch))
예제 #9
0
 def test_extensible(self):
     for _ in iter_eplus_versions(self):
         idf = self.get_idf()
         sch = idf["Schedule:Compact"].one(
             lambda x: x["name"] == "system availability schedule")
         for i in range(1500):
             sch.add_field("12:00")
         self.assertEqual(sch[1300], "12:00")
예제 #10
0
    def test_qs_one(self):
        for eplus_version in iter_eplus_versions(self):
            idf = self.idf_managers_d[eplus_version]
            obj = idf.get_table("BuildingSurface:Detailed").one(
                lambda x: x["naMe"] == "zn001:roof001")
            name = obj._.get_value("name")

            self.assertEqual("zn001:roof001", name)
예제 #11
0
    def test_set_record_wrong_type(self):
        for _ in iter_eplus_versions(self):
            idf = self.get_idf()

            def set_field():
                idf["Building"].one()["North Axis"] = "I'm a text, not a real"

            self.assertRaises(ValueError, set_field)
예제 #12
0
 def test_idf_add_record(self):
     for _ in iter_eplus_versions(self):
         idf = self.get_idf()
         sch_name = "new test schedule"
         idf.add(schedule_test_record_str % sch_name)
         self.assertEqual(
             idf["Schedule:Compact"].one(lambda x: x["name"] == sch_name)
             ["name"], sch_name)
예제 #13
0
 def test_copy_record(self):
     for _ in iter_eplus_versions(self):
         idf = self.get_idf()
         old_name = "system availability schedule"
         old = idf["Schedule:Compact"].one(lambda x: x["name"] == old_name)
         new = old.copy()
         new_name = old_name + "- new"
         new["name"] = new_name
         self.assertNotEqual(old, new)
예제 #14
0
 def test_multiple_branch_links(self):
     for _ in iter_eplus_versions(self):
         idf = Idf(
             os.path.join(CONF.eplus_base_dir_path, "ExampleFiles",
                          "5ZoneAirCooled.idf"))
         bl = idf["BranchList"].one(
             lambda x: x["Name"] == "heating supply side branches")
         b3 = idf["Branch"].one(
             lambda x: x["Name"] == "heating supply bypass branch")
         self.assertEqual(bl[3], b3)
예제 #15
0
 def test_idf_remove_record(self):
     for _ in iter_eplus_versions(self):
         idf_manager = self.get_idf_manager()
         sch_name = "NEW TEST SCHEDULE"
         sch = idf_manager.add_records(schedule_test_record_str % sch_name)
         idf_manager.remove_records(sch)
         self.assertEqual(
             len(
                 idf_manager.get_table("Schedule:Compact").select(
                     lambda x: x["name"] == sch_name)), 0)
예제 #16
0
 def test_copy_record(self):
     for _ in iter_eplus_versions(self):
         idf_manager = self.get_idf_manager()
         zone = idf_manager.get_table("Zone").one()
         new = zone._.copy()
         for i in range(zone._.fields_nb):
             if i == 0:
                 self.assertNotEqual(zone._.get_value(i),
                                     new._.get_value(i))
             else:
                 self.assertEqual(zone._.get_value(i), new._.get_value(i))
예제 #17
0
    def test_set_record_broken_constructing_mode(self):
        for _ in iter_eplus_versions(self):
            idf = self.get_idf()
            supply_fan = idf["Fan:ConstantVolume"].one(
                lambda x: x["name"] == "supply fan")
            name = supply_fan["availability schedule name"]["name"]

            with self.assertRaises(BrokenIdfError):
                with idf.under_construction:
                    supply_fan[
                        "availability schedule name"] = schedule_test_record_str % name
예제 #18
0
    def test_set_record_broken(self):
        for _ in iter_eplus_versions(self):
            idf = self.get_idf()
            supply_fan = idf["Fan:ConstantVolume"].one(
                lambda x: x["name"] == "supply fan")
            name = supply_fan["availability schedule name"]["name"]

            def raise_if_you_care():
                supply_fan[
                    "availability schedule name"] = schedule_test_record_str % name

            self.assertRaises(BrokenIdfError, raise_if_you_care)
예제 #19
0
 def test_start_dt(self):
     for eplus_version in iter_eplus_versions(self):
         eplus_version_str = "-".join([str(v) for v in eplus_version])
         simulation_path = os.path.join(RESOURCES_DIR_PATH,
                                        "simulations-outputs",
                                        "one_zone_uncontrolled",
                                        eplus_version_str)
         s = Simulation(simulation_path)
         start_dt = dt.datetime(2000, 1, 1)
         self.assertEqual(
             dt.datetime(2000, 1, 1, 1),
             s.eso.df(time_step="Hourly", start=start_dt).index[0])
예제 #20
0
 def test_multi_level_filter(self):
     for eplus_version in iter_eplus_versions(self):
         # get all building surfaces that have a zone with Z-Origin 0
         simple_filter_l = []
         for bsd in self.idfs_d[eplus_version][
                 "BuildingSurface:Detailed"].select():
             if bsd["Zone name"][4] == 0:
                 simple_filter_l.append(bsd)
         multi_filter_l = list(
             self.idfs_d[eplus_version]["BuildingSurface:Detailed"].select(
                 lambda x: x["Zone Name"][4] == 0))
         self.assertEqual(simple_filter_l, multi_filter_l)
예제 #21
0
 def test_set_record_simple(self):
     for _ in iter_eplus_versions(self):
         idf = self.get_idf()
         new_name = "fan availability schedule - 2"
         supply_fan = idf["Fan:ConstantVolume"].one(
             lambda x: x["name"] == "supply fan")
         supply_fan[
             "availability schedule name"] = schedule_test_record_str % new_name
         # check set
         self.assertEqual(
             idf["Fan:ConstantVolume"].one(
                 lambda x: x["name"] == "supply fan")
             ["AvaiLABIlity schedule name"]["name"], new_name)
예제 #22
0
 def test_pointing_records(self):
     for _ in iter_eplus_versions(self):
         idf = self.get_idf()
         zone = idf["Zone"].one()
         self.assertEqual(
             {
                 "zn001:wall001", "zn001:wall002", "zn001:wall003",
                 "zn001:wall004", "zn001:flr001", "zn001:roof001"
             },
             set([
                 bsd["name"] for bsd in zone.pointing_records.select(
                     lambda x: x.table.ref == "BuildingSurface:Detailed")
             ]))
예제 #23
0
    def test_idf_remove_record(self):
        for _ in iter_eplus_versions(self):
            idf = self.get_idf()
            sch_name = "NEW TEST SCHEDULE"
            sch = idf.add(schedule_test_record_str % sch_name)
            idf.remove(sch)

            # check removed
            self.assertEqual(
                len(idf["Schedule:Compact"].select(
                    lambda x: x["name"] == sch_name)), 0)

            # check obsolete
            self.assertRaises(ObsoleteRecordError, lambda: print(sch))
예제 #24
0
 def test_idf_add_record_broken(self):
     for _ in iter_eplus_versions(self):
         idf_manager = self.get_idf_manager()
         self.assertRaises(
             BrokenIdfError, lambda: idf_manager.add_records("""Material,
 C5 - 4 IN HW CONCRETE,   !- Name
 MediumRough,             !- Roughness
 0.1014984,               !- Thickness {m}
 1.729577,                !- Conductivity {W/m-K}
 2242.585,                !- Density {kg/m3}
 836.8000,                !- Specific Heat {J/kg-K}
 0.9000000,               !- Thermal Absorptance
 0.6500000,               !- Solar Absorptance
 0.6500000;               !- Visible Absorptance"""))
예제 #25
0
    def test_pointed_records(self):
        for _ in iter_eplus_versions(self):
            idf = self.get_idf()
            bsd = idf["BuildingSurface:Detailed"].one(
                lambda x: x["name"] == "zn001:wall001")
            zone = idf["Zone"].one(lambda x: x["name"] == "main zone")
            construction = idf["Construction"].one(
                lambda x: x["name"] == "r13wall")

            # single pointing field
            self.assertEqual(bsd["zone name"], zone)
            self.assertEqual(bsd[3], zone)

            # get all pointed
            self.assertEqual({zone, construction}, set(bsd.pointed_records))
예제 #26
0
    def test_idf_unlink_and_remove_record(self):
        for _ in iter_eplus_versions(self):
            idf_manager = self.get_idf_manager()
            zone = idf_manager.get_table("Zone").one()

            # unlink
            zone.unlink_pointing_records()

            # check that pointing's pointed fields have been removed
            for pointing_record, pointing_index in zone._.get_pointing_links():
                self.assertEqual(pointing_record._.get_value(pointing_index),
                                 None)

            # remove record should be possible
            idf_manager.remove_records(zone)
예제 #27
0
    def test_simulate(self):
        for eplus_version in iter_eplus_versions(self):
            # prepare paths
            idf_path = os.path.join(CONF.eplus_base_dir_path, "ExampleFiles",
                                    "1ZoneEvapCooler.idf")
            epw_path = os.path.join(
                CONF.eplus_base_dir_path, "WeatherData",
                "USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw")

            # prepare a quick simulation
            idf = Idf(idf_path)
            sc = idf["SimulationControl"].one()
            sc["Run Simulation for Sizing Periods"] = "No"
            rp = idf["RunPeriod"].one()
            rp["End Month"] = 1
            rp["End Day of Month"] = 1

            # prepare outputs
            out_f = io.StringIO()
            err_f = io.StringIO()

            # simulate
            with tempfile.TemporaryDirectory() as dir_path:
                s = simulate(idf,
                             epw_path,
                             dir_path,
                             stdout=out_f,
                             stderr=err_f,
                             beat_freq=0.1)

                # check one day output
                eso_df = s.eso.df()
                self.assertEqual(24, len(eso_df))

            # check err (manage differences between eplus versions)
            err_out = err_f.getvalue()
            self.assertTrue(
                (err_out == "")
                or ("EnergyPlus Completed Successfully.\n" in err_out))
            # check beat
            out_str = out_f.getvalue()
            self.assertIn("subprocess is still running", out_str)

            # check stdout
            out_str = out_str.replace("subprocess is still running\n", "")
            self.assertGreater(len(out_str.split("\n")),
                               15)  # check that more than 15 lines
예제 #28
0
    def test_df_get_and_set_integrity(self):
        for _ in iter_eplus_versions(self):
            weather_dir = os.path.join(CONF.eplus_base_dir_path, "WeatherData")

            # check sf
            epw = Epw(
                os.path.join(weather_dir,
                             "USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw"))

            # read
            df = epw.df()

            # write
            epw.set_df(df)

            # check
            assert_frame_equal(df, epw.df())
예제 #29
0
    def test_set_value_reference(self):
        for _ in iter_eplus_versions(self):
            idf_manager = self.get_idf_manager()

            # set
            new_zone_name = "new zone name"
            zone = idf_manager.get_table("Zone").one()
            pointing_links_l = zone._.get_pointing_links()
            zone._.set_value("name", new_zone_name)

            # check
            self.assertEqual(zone._.get_value("name"), new_zone_name)

            # check pointing
            for pointing_record, pointing_index in pointing_links_l:
                self.assertEqual(
                    pointing_record._.get_raw_value(pointing_index),
                    new_zone_name)
예제 #30
0
    def test_set_value_record(self):
        for _ in iter_eplus_versions(self):
            idf_manager = self.get_idf_manager()

            # set
            new_name = "fan availability schedule - 2"
            supply_fan = idf_manager.get_table("Fan:ConstantVolume").one(
                lambda x: x["name"] == "supply fan")
            supply_fan._.set_value("availability schedule name",
                                   schedule_test_record_str % new_name)
            print(idf_manager.to_str())

            # get
            obj = idf_manager.get_table("Fan:ConstantVolume").one(
                lambda x: x["name"] == "supply fan")
            name = obj._.get_value("AvaiLABIlity schedule name")._.get_value(
                "NAME")

            # check
            self.assertEqual(new_name, name)