in src/backend/domain/data_providers/default.py [0:0]
def _add_expected_dividend_frequency(self, dividends: Dict[str, Any]):
if dividends:
dividend_datetimes = [i["datetime"] for i in dividends.values()]
if len(dividend_datetimes) == 1:
dividends[list(dividends.keys())[0]]["expected_frequency"] = 1
return dividends
payment_after_last_dividend_date = dividend_datetimes[0] + (dividend_datetimes[0] - dividend_datetimes[1])
payment_before_first_dividend_date = dividend_datetimes[-1] - (dividend_datetimes[-2] - dividend_datetimes[-1])
for index, (_, value) in enumerate(dividends.items()):
if index == 0:
day_difference_next_payment = payment_after_last_dividend_date - value["datetime"]
day_difference_previous_payment = value["datetime"] - dividend_datetimes[index + 1]
elif index == len(dividend_datetimes) - 1:
day_difference_next_payment = dividend_datetimes[index - 1] - value["datetime"]
day_difference_previous_payment = value["datetime"] - payment_before_first_dividend_date
else:
day_difference_previous_payment = value["datetime"] - dividend_datetimes[index + 1]
day_difference_next_payment = dividend_datetimes[index - 1] - value["datetime"]
expected_frequency = self._get_expected_frequency(
day_difference_next_payment=day_difference_next_payment.days,
day_difference_previous_payment=day_difference_previous_payment.days,
)
value["expected_frequency"] = expected_frequency
return dividends