コード例 #1
0
ファイル: test_area.py プロジェクト: SpyrosTzavikas/d3a
 def test_market_with_most_expensive_offer(self):
     m1 = MagicMock(spec=Market)
     o1 = MagicMock(spec=Offer)
     o1.price = 12
     o1.energy = 1
     m2 = MagicMock(spec=Market)
     o2 = MagicMock(spec=Offer)
     o2.price = 12
     o2.energy = 1
     m3 = MagicMock(spec=Market)
     o3 = MagicMock(spec=Offer)
     o3.price = 12
     o3.energy = 1
     markets = OrderedDict()
     markets[DateTime(2018, 1, 1, 12, 0, 0)] = m1
     markets[DateTime(2018, 1, 1, 12, 15, 0)] = m2
     markets[DateTime(2018, 1, 1, 12, 30, 0)] = m3
     self.area._markets = MagicMock(spec=AreaMarkets)
     self.area._markets.markets = markets
     m1.sorted_offers = [o1, o1]
     m2.sorted_offers = [o2, o2]
     m3.sorted_offers = [o3, o3]
     assert self.area.market_with_most_expensive_offer is m1
     o1.price = 19
     o2.price = 20
     o3.price = 18
     assert self.area.market_with_most_expensive_offer is m2
     o1.price = 18
     o2.price = 19
     o3.price = 20
     assert self.area.market_with_most_expensive_offer is m3
コード例 #2
0
def test_flex_time_zone_changes(
        year, month, day, hour, minute, second, microsecond, tzinfo,
        fold, granularity):
    """Test time zone changes for FlexTime class"""
    full_dt_info = DateTimeInfo(
        year, month, day, hour, minute, second, microsecond, tzinfo, fold)
    gval = granularity.value

    dt_info = FlexTime.form_info(
        full_dt_info, granularity=gval, truncate=True, default=False)
    flex_dt = FlexTime(*dt_info)

    dt_info_native = FlexTime.form_info(
        full_dt_info, granularity=gval, truncate=True, default=True,
        tz_instance=True)

    base_dt = DateTime(**dt_info_native._asdict())
    assert flex_dt == base_dt

    flex_dt_utc = flex_dt.astimezone(UTC)
    base_dt_utc = base_dt.astimezone(timezone(UTC))
    assert flex_dt_utc == base_dt_utc
    assert type(flex_dt_utc) is type(flex_dt)

    flex_dt_there_and_back_again = flex_dt_utc.astimezone(tzinfo)
    base_dt_there_and_back_again = base_dt_utc.astimezone(timezone(tzinfo))
    assert flex_dt_there_and_back_again == base_dt_there_and_back_again

    assert flex_dt_there_and_back_again == flex_dt
コード例 #3
0
    def test_export_unmatched_loads_support_the_all_devices_parameter(self):
        house1 = Area("House1", [self.area1, self.area2])
        self.grid = Area("Grid", [house1, self.area3])
        self.grid._markets.past_markets = {}
        for i in range(1, 11):
            timeslot = DateTime(2018, 1, 1, 12 + i, 0, 0)
            self.strategy1.state.desired_energy_Wh[timeslot] = 100
            self.strategy2.state.desired_energy_Wh[timeslot] = 100
            self.strategy3.state.desired_energy_Wh[timeslot] = 100
            mock_market = MagicMock(spec=Market)
            mock_market.time_slot = timeslot
            mock_market.traded_energy = {
                "load1": -0.101,
                "load2": -0.101,
                "load3": -0.07
            }
            house1._markets.past_markets[timeslot] = mock_market
            self.grid._markets.past_markets[timeslot] = mock_market

        unmatched_loads = export_unmatched_loads(self.grid, all_devices=True)
        print(unmatched_loads)
        assert self.area3.name in unmatched_loads["areas"]
        assert unmatched_loads["areas"][
            self.area3.name]["unmatched_load_count"] == 10
        assert unmatched_loads["unmatched_load_count"] == 10
        assert not unmatched_loads["all_loads_met"]
コード例 #4
0
    def test_export_unmatched_loads_reports_cell_tower_areas(self):
        house1 = Area("House1", [self.area1, self.area2])
        ct_strategy = MagicMock(spec=CellTowerLoadHoursStrategy)
        ct_strategy.state = MagicMock(spec=LoadState)
        ct_strategy.state.desired_energy_Wh = {}
        cell_tower = Area("Cell Tower", strategy=ct_strategy)
        self.grid = Area("Grid", [house1, cell_tower])
        for i in range(1, 11):
            timeslot = DateTime(2018, 1, 1, 12 + i, 0, 0)
            self.strategy1.state.desired_energy_Wh[timeslot] = 100
            self.strategy2.state.desired_energy_Wh[timeslot] = 100

            mock_market = MagicMock(spec=Market)
            mock_market.time_slot = timeslot
            mock_market.traded_energy = {"load1": -0.09, "load2": -0.099}
            house1._markets.past_markets[timeslot] = mock_market

            mock_market_ct = MagicMock(spec=Market)
            mock_market_ct.time_slot = timeslot
            mock_market_ct.traded_energy = {"Cell Tower": -0.4}
            ct_strategy.state.desired_energy_Wh[timeslot] = 1000
            cell_tower._markets.past_markets[timeslot] = mock_market_ct

            self.grid._markets.past_markets[timeslot] = mock_market

        unmatched_loads = export_unmatched_loads(self.grid)
        assert unmatched_loads["unmatched_load_count"] == 30
        assert not unmatched_loads["all_loads_met"]
コード例 #5
0
    def test_should_works_with_datetime_formatter(self):
        decorator = format_parameters({"param_a": format_datetime})
        endpoint = mock.MagicMock()
        decorated_endpoint = decorator(endpoint)

        decorated_endpoint(param_a='2020-01-01T0:0:00+00:00')

        endpoint.assert_called_once_with(
            param_a=DateTime(2020, 1, 1, 0, tzinfo=Timezone('UTC')))
コード例 #6
0
 def deflex(self, native=False):
     """Deflex instance by creating copy with parent DateTime"""
     dt_info = self.form_info(self,
                              granularity=self.MAX_GRANULARITY,
                              default=True,
                              tz_instance=True)
     dt_kwds = dt_info._asdict()
     return (datetime.datetime(**dt_kwds) if native else DateTime(
         **dt_kwds))
コード例 #7
0
ファイル: create_profile.py プロジェクト: mukundwadhwa/d3a-1
def create_profile_from_daily_profile(n_days=365, year=2019, daily_profile_fn=None, out_fn=None,
                                      separator=","):

    if daily_profile_fn is None:
        raise ValueError("No daily_profile_fn was provided")
    header, daily_profile_dict = read_daily_profile_todict(daily_profile_fn, separator)
    profile_dict = {}
    for day in range(1, n_days):
        for time, value in daily_profile_dict.items():
            profile_dict[DateTime(year, 1, 1).add(
                days=day - 1, hours=time.hour, minutes=time.minute)] = value

    if out_fn is None:
        out_fn = daily_profile_fn.replace(".csv", "_year.csv")
    write_profile_todict(profile_dict, header, out_fn, separator)
コード例 #8
0
 def test_export_unmatched_loads_is_reported_correctly_for_predefined_load_strategy(
         self):
     house1 = Area("House1", [self.area1, self.area3])
     self.grid = Area("Grid", [house1])
     self.grid._markets.past_markets = {}
     for i in range(1, 11):
         timeslot = DateTime(2018, 1, 1, 12 + i, 0, 0)
         mock_market = MagicMock(spec=Market)
         mock_market.time_slot = timeslot
         self.strategy1.state.desired_energy_Wh[timeslot] = 100
         self.strategy3.state.desired_energy_Wh[timeslot] = 80
         mock_market.traded_energy = {"load1": -0.099, "load3": -0.079}
         house1._markets.past_markets[timeslot] = mock_market
         self.grid._markets.past_markets[timeslot] = mock_market
     unmatched_loads = export_unmatched_loads(self.grid)
     assert unmatched_loads["unmatched_load_count"] == 20
     assert not unmatched_loads["all_loads_met"]
コード例 #9
0
def test_core_flex_time_interactions(
        year, month, day, hour, minute, second, microsecond, tzinfo,
        fold, granularity):
    """Test core interactions for FlexTime class"""
    full_dt_info = DateTimeInfo(
        year, month, day, hour, minute, second, microsecond, tzinfo, fold)
    gval = granularity.value

    dt_info = FlexTime.form_info(
        full_dt_info, granularity=gval, truncate=True, default=False)
    dt_info_native = FlexTime.form_info(
        full_dt_info, granularity=gval, truncate=True, default=True,
        tz_instance=True)

    dt_native_kwargs = dt_info_native._asdict()

    native_dt = datetime(**dt_native_kwargs)
    base_dt = DateTime(**dt_info_native._asdict())
    flex_dt = FlexTime(*dt_info)

    assert flex_dt.info == dt_info
    assert flex_dt.deflex() == base_dt
    assert flex_dt.deflex(native=True) == native_dt

    flex_dt_via_copy = flex_dt.copy()
    assert flex_dt_via_copy is not flex_dt
    assert flex_dt_via_copy == flex_dt

    flex_dt_via_cast_native = FlexTime.cast(native_dt, granularity=granularity)
    assert flex_dt_via_cast_native == flex_dt
    assert flex_dt_via_cast_native is not flex_dt

    flex_dt_via_cast_base = FlexTime.cast(base_dt, granularity=granularity)
    assert flex_dt_via_cast_base == flex_dt
    assert flex_dt_via_cast_base is not flex_dt

    flex_dt_via_cast_flex = FlexTime.cast(flex_dt, granularity=granularity)
    assert flex_dt_via_cast_flex is flex_dt
コード例 #10
0
ファイル: test_getters.py プロジェクト: vlt/pendulum
def test_is_past():
    with pendulum.test(DateTime(2000, 1, 1)):
        d = pendulum.now()
        assert not d.is_past()
        d = d.subtract(days=1)
        assert d.is_past()
コード例 #11
0
ファイル: test_getters.py プロジェクト: vlt/pendulum
def test_is_future():
    with pendulum.test(DateTime(2000, 1, 1)):
        d = pendulum.now()
        assert not d.is_future()
        d = d.add(days=1)
        assert d.is_future()
コード例 #12
0
from run import PVOutput
from pendulum import DateTime
import csv
from pathlib import Path

siteId = '57775'

directory = Path('directory'+siteId)
if not directory.exists():
    directory.mkdir()

# if not logged in then this will only work for th last 14 days
testDate = DateTime(2019, 2, 1)

pvo = PVOutput()
pvo.login('username', 'password')

for idx in range(1,140):
    dateString = testDate.to_date_string()
    print('creating file ', dateString)
    try:
        data = pvo.getIntradayData(testDate, siteId)
    except NameError as e:
        print(e)
        print("missing data for " + dateString)
        testDate = testDate.add(days=1)
        continue

    with open(directory.as_posix() + f'/{dateString}.csv','w', newline='') as csvFile:
        dataFile = csv.writer(csvFile)
        dataFile.writerow(data.headers)
コード例 #13
0
def test_flex_time_instantiation(
        year, month, day, hour, minute, second, microsecond, tzinfo,
        fold, granularity):
    """Test core instantiation methods for FlexTime class"""
    full_dt_info = DateTimeInfo(
        year, month, day, hour, minute, second, microsecond, tzinfo, fold)
    gval = granularity.value

    dt_info = FlexTime.form_info(
        full_dt_info, granularity=gval, truncate=True, default=False)
    dt_tuple = tuple(dt_info)
    dt_info_with_defaults = FlexTime.form_info(
        full_dt_info, granularity=gval, truncate=True, default=True)
    dt_info_native = FlexTime.form_info(
        full_dt_info, granularity=gval, truncate=True, default=True,
        tz_instance=True)

    dt_native_kwargs = dt_info_native._asdict()
    native_dt = datetime(**dt_native_kwargs)

    dt_native_args = dt_info_native[:FlexTime.FOLD_IDX]
    native_dt_via_args = datetime(fold=fold, *dt_native_args)
    assert native_dt == native_dt_via_args

    dt_naive_kwargs = dt_info_native._asdict()
    del dt_naive_kwargs[FlexTime.TZINFO_TAG]
    naive_dt = datetime(**dt_naive_kwargs)

    dt_naive_args = dt_info_native[:FlexTime.TZINFO_IDX]
    naive_dt_via_args = datetime(fold=fold, *dt_naive_args)
    assert naive_dt == naive_dt_via_args

    # base_dt = DateTime(**dt_info_with_defaults._asdict())
    base_dt = DateTime(**dt_info_native._asdict())
    # base_dt_via_args = DateTime(*dt_info_with_defaults)
    base_dt_via_args = DateTime(fold=fold, *dt_native_args)
    assert base_dt == base_dt_via_args
    assert native_dt == base_dt

    flex_dt = FlexTime(**dt_info._asdict())
    flex_dt_via_args = FlexTime(tzinfo=dt_info.tzinfo, *dt_info[:gval])
    assert flex_dt == flex_dt_via_args
    assert flex_dt == base_dt
    assert flex_dt == native_dt  # True only if not in DST

    for dt in (dt_info, dt_tuple, native_dt, naive_dt, base_dt, flex_dt,
               flex_dt.info):

        tz = dt_info.tzinfo if dt is naive_dt else None

        dt_info_null_backfill = FlexTime.form_info(
            dt, tz=tz, granularity=granularity, truncate=True, default=False)
        assert dt_info_null_backfill == dt_info

        dt_info_default_backfill = FlexTime.form_info(
            dt, tz=tz, granularity=granularity, truncate=True, default=True)
        assert dt_info_default_backfill == dt_info_with_defaults

        flex_dt_via_instance = FlexTime.instance(dt, tz=tz,
                                                 granularity=granularity)
        assert flex_dt_via_instance == flex_dt
        assert flex_dt_via_instance is not flex_dt
        assert flex_dt_via_instance.info == dt_info  # True only if not in DST