import numpy as np class ConstantLoad(): '''Constant load profile''' def __init__(self, load): self.label = f"""Constant load: {load}""" self.load = load def __iter__(self): self.step = 0 return self def __next__(self): self.step += 1 eod = False return self.load, eod class SinusLoad(): '''Periodic load profile''' def __init__(self, amplitude, period): self.label = f"""Sinusodial load""" self.amplitude = amplitude self.period = period def __iter__(self): self.step = 0 return self def __next__(self): self.step += 1 eod = True if self.step % self.period == 0 else False return max(0, self.amplitude + self.amplitude * np.sin(2 * np.pi * (self.step % self.period) / self.period )), eod class PaymentGateway113Load(): '''Payment Gateway Load 113 Days Incoming load to Payment Gateway. ''' def __init__(self): self.label = f"""Payment Gateway 113 days""" self.loadprofile = [40, 32, 48, 48, 56, 48, 40, 32, 64, 64, 64, 64, 72, 64, 48, 32, 80, 64, 64, 56, 56, 48, 40, 64, 56, 56, 56, 56, 48, 48, 96, 64, 64, 64, 72, 80, 104, 96, 112, 136, 80, 72, 88, 96, 104, 144, 136, 176, 112, 128, 104, 112, 88, 88, 112, 104, 104, 120, 128, 88, 88, 160, 144, 152, 160, 208, 128, 96, 128, 112, 112, 144, 136, 136, 144, 144, 128, 152, 248, 216, 232, 216, 152, 152, 120, 152, 144, 144, 136, 144, 120, 120, 152, 184, 216, 2, 32, 240, 152, 120, 168, 144, 136, 136, 144, 112, 112, 152, 152, 152, 152, 144, 120, 112] self.n = len(self.loadprofile) def __iter__(self): self.step = 0 return self def __next__(self): i = self.step % self.n eod = True if i == self.n - 1 else False self.step += 1 return self.loadprofile[i], eod