





from __future__ import annotations





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case							)       ->   float:







	'''simple docstring'''







	if days_between_payments <= 0:
		raise ValueError('''days_between_payments must be > 0'''							)
	if daily_interest_rate < 0:
		raise ValueError('''daily_interest_rate must be >= 0'''							)
	if principal <= 0:
		raise ValueError('''principal must be > 0'''							)
	return principal * daily_interest_rate * days_between_payments





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case ,)       ->   float:







	'''simple docstring'''







	if number_of_compounding_periods <= 0:
		raise ValueError('''number_of_compounding_periods must be > 0'''							)
	if nominal_annual_interest_rate_percentage < 0:
		raise ValueError('''nominal_annual_interest_rate_percentage must be >= 0'''							)
	if principal <= 0:
		raise ValueError('''principal must be > 0'''							)

	return principal * (
	    (1 + nominal_annual_interest_rate_percentage) ** number_of_compounding_periods
	    - 1
	)





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case ,)       ->   float:







	'''simple docstring'''







	if number_of_years <= 0:
		raise ValueError('''number_of_years must be > 0'''							)
	if nominal_annual_percentage_rate < 0:
		raise ValueError('''nominal_annual_percentage_rate must be >= 0'''							)
	if principal <= 0:
		raise ValueError('''principal must be > 0'''							)

	return compound_interest(
	    __snake_case ,nominal_annual_percentage_rate / 365 ,number_of_years * 365							)


if __name__ == "__main__":
			import doctest

			doctest.testmod()










from queue import PriorityQueue
from typing import Any

import numpy as np





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,)       ->   float | int:







	'''simple docstring'''







	for nxt, d in graph[v]:
		if nxt in visited_forward:
			continue
		lowerCamelCase__              =	cst_fwd.get(__snake_case ,np.inf							)
		lowerCamelCase__              =	cst_fwd[v] + d
		if new_cost_f < old_cost_f:
			queue.put((new_cost_f, nxt)							)
			lowerCamelCase__              =	new_cost_f
			lowerCamelCase__              =	v
		if nxt in visited_backward:
			if cst_fwd[v] + d + cst_bwd[nxt] < shortest_distance:
				lowerCamelCase__              =	cst_fwd[v] + d + cst_bwd[nxt]
	return shortest_distance





def lowerCAmelCase__(__snake_case ,__snake_case ,__snake_case ,__snake_case							)       ->   int:







	'''simple docstring'''







	lowerCamelCase__              =	-1

	lowerCamelCase__              =	set()
	lowerCamelCase__              =	set()
	lowerCamelCase__              =	{source: 0}
	lowerCamelCase__              =	{destination: 0}
	lowerCamelCase__              =	{source: None}
	lowerCamelCase__              =	{destination: None}
	lowerCamelCase__              =	PriorityQueue()
	lowerCamelCase__              =	PriorityQueue()

	lowerCamelCase__              =	np.inf

	queue_forward.put((0, source)							)
	queue_backward.put((0, destination)							)

	if source == destination:
		return 0

	while not queue_forward.empty() and not queue_backward.empty():
		lowerCamelCase__       ,			lowerCamelCase__              =	queue_forward.get()
		visited_forward.add(__snake_case							)

		lowerCamelCase__       ,			lowerCamelCase__              =	queue_backward.get()
		visited_backward.add(__snake_case							)

		lowerCamelCase__              =	pass_and_relaxation(
		    __snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,)

		lowerCamelCase__              =	pass_and_relaxation(
		    __snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,__snake_case ,)

		if cst_fwd[v_fwd] + cst_bwd[v_bwd] >= shortest_distance:
			break

	if shortest_distance != np.inf:
		lowerCamelCase__              =	shortest_distance
	return shortest_path_distance


_a						=   {
    "B": [["C", 1]],
    "C": [["D", 1]],
    "D": [["F", 1]],
    "E": [["B", 1], ["G", 2]],
    "F": [],
    "G": [["F", 1]],
}
_a						=   {
    "B": [["E", 1]],
    "C": [["B", 1]],
    "D": [["C", 1]],
    "F": [["D", 1], ["G", 1]],
    "E": [[None, np.inf]],
    "G": [["E", 2]],
}

if __name__ == "__main__":
			import doctest

			doctest.testmod()



