from dataclasses import dataclass, field
import typing as t
from typing import List, Optional, Union
import pandas as pd
from shapely.geometry import Point
import pytz
from uuid import uuid4
import energydatamodel as edm
#TODO
# Decide how to and production area fits in. As a time series? As a geospatial area? Or as an energy asset?
# It is more of a time series, however, it should hold both capacity and and production data
# I want geospatial to be more of a base module
# Should it be its own separate class e.g. EnergySupply, EnergyDemand?
[docs]
@dataclass
class ElectricityDemand(edm.TimeSeries):
location: t.Optional[edm.GeoLocation] = None
ElectricityConsumption = ElectricityDemand
[docs]
@dataclass
class ElectricityAreaDemand(edm.TimeSeries):
area: t.Optional[t.Union[edm.GeoPolygon, edm.GeoMultiPolygon]] = None
ElectricityAreaConsumption = ElectricityAreaDemand
[docs]
@dataclass
class ElectricitySupply(edm.TimeSeries):
location: Optional[edm.GeoLocation] = None
ElectricityProduction = ElectricitySupply
[docs]
@dataclass
class ElectricityAreaSupply(edm.TimeSeries):
area: t.Optional[t.Union[edm.GeoPolygon, edm.GeoMultiPolygon]] = None
ElectricityAreaProduction = ElectricityAreaSupply
[docs]
@dataclass
class HeatingDemand(edm.TimeSeries):
location: Optional[edm.GeoLocation] = None
HeatingConsumption = HeatingDemand
[docs]
@dataclass
class HeatingAreaDemand(edm.TimeSeries):
area: t.Optional[t.Union[edm.GeoPolygon, edm.GeoMultiPolygon]] = None
HeatingAreaConsumption = HeatingAreaDemand
[docs]
@dataclass
class HeatingSupply(edm.TimeSeries):
location: Optional[edm.GeoLocation] = None
HeatingProduction = HeatingSupply
[docs]
@dataclass
class HeatingAreaSupply(edm.TimeSeries):
area: t.Optional[t.Union[edm.GeoPolygon, edm.GeoMultiPolygon]] = None
HeatingAreaProduction = HeatingAreaSupply
[docs]
@dataclass
class ElectricityPrice(edm.TimeSeries):
area: t.Optional[t.Union[edm.GeoPolygon, edm.GeoMultiPolygon]] = None
[docs]
@dataclass
class CarbonIntensity(edm.TimeSeries):
area: Optional[edm.GeoPolygon] = None