-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtypes.py
More file actions
59 lines (44 loc) · 3.17 KB
/
types.py
File metadata and controls
59 lines (44 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import datetime
import enum
from dataclasses import dataclass
from typing import Mapping, Optional, Sequence, Tuple, TypeVar, Union
__all__ = ["ConsumerTrait", "MicrogridTrait", "GridTrait", "FleafRequestableTrait",
"TimeSeries", "TimeSeriesProperties"]
class DocumentedEnum(str, enum.Enum):
def __new__(cls, value, doc=None):
obj = str.__new__(cls, value)
obj._value_ = value
obj.__doc__ = doc
return obj
def __init__(self, *args, **kwargs):
if self.name != self.value.casefold():
raise ValueError("name and value must be equal except for case: {!r} != {!r}".format(self.name, self.value))
class ConsumerTrait(DocumentedEnum):
power_consumption = "power_consumption", "The average rate of energy consumption by this consumer in kW."
carbon_emissions = "carbon_emissions", "The average rate of carbon emissions caused by this consumer in g / s."
computation_load = "computation_load", "The ratio of available computing resources utilized."
class MicrogridTrait(DocumentedEnum):
battery_level = "battery_level", "The combined charge level of all available batteries in kWh."
battery_percentage_level = "battery_percentage_level", "The combined percentage charge level of all available batteries."
battery_power = "battery_power", "The combined average rate of energy moved (positive for stored, negative for consumed) for all available batteries in kW."
total_power_consumption = "total_power_consumption", "The combined averate rate of energy consumption by all connected consumers in kW."
local_generation = "local_generation", "The average rate of energy generation from local generators in kW."
no_emissions_generation = "no_emissions_generation", "The average rate of energy generation from local generators that was produced without emissions in kW."
local_carbon_intensity = "local_carbon_intensity", "The average carbon intensity from local generators in g / kWh."
grid_power = "grid_power", "The average rate of energy moved (positive for consumed, negative for excess energy fed-in) from wide-area electricity grids in kW."
grid_ratio = "grid_ratio", "The percentage of power originating from wide-area electricity grids."
# excess_energy = "excess_energy", "The average rate of energy that needs to be given back to the grid or shed in kW."
# consumers = "consumers", "A collection of consumers connected to this microgrid."
# connected_grids = "connected_grids", "A collection of wide-area electricity grids connected to this microgrid."
class GridTrait(DocumentedEnum):
grid_carbon_intensity = "grid_carbon_intensity", "The average carbon intensity of this grid in g / kWh."
# microgrids = "microgrids", "A collection of microgrids connected to this wide-area electricity grid."
FleafRequestableTrait = Union[ConsumerTrait, MicrogridTrait, GridTrait]
T = TypeVar("T")
TimeSeriesMapping = Mapping[datetime.datetime, T]
TimeSeriesSequence = Sequence[Tuple[datetime.datetime, T]]
TimeSeries = Union[TimeSeriesMapping[T], TimeSeriesSequence[T]]
@dataclass
class TimeSeriesProperties:
max_resolution: Optional[datetime.timedelta] = None
# aggregation: Optional[enum.Enum] = None