


"""simple docstring"""







from collections.abc import Iterable
from typing import Generic, TypeVar

lowerCAmelCase__      				=   TypeVar('''_T''')


class       SCREAMING_SNAKE_CASE__				(		Generic[_T]				):
       """simple docstring"""


       def __init__(						self		,     snake_case__ = None						):






         """simple docstring"""





         lowerCAmelCase     :     list[_T]								=							list(iterable or []						)
         lowerCAmelCase     :     list[_T]								=							[]

       def __len__(						self						):






         """simple docstring"""





         return len(self._stacka						) + len(self._stacka						)

       def __repr__(						self						):






         """simple docstring"""





         return f"""Queue({tuple(self._stacka[::-1] + self._stacka						)})"""

       def        lowercase__							(						self		,     snake_case__						):






         """simple docstring"""





         self._stacka.append(snake_case__						)







       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Optional[int]								=							self._stacka.pop
         lowerCAmelCase     :     List[str]								=							self._stacka.append

         if not self._stacka:
           while self._stacka:
             stacka_append(stacka_pop()						)

         if not self._stacka:
           raise IndexError("Queue is empty"						)
         return self._stacka.pop()


if __name__ == "__main__":
     from doctest import testmod

     testmod()









"""simple docstring"""







def 					a__			(				SCREAMING_SNAKE_CASE    :    float				,      SCREAMING_SNAKE_CASE    :    float				,      SCREAMING_SNAKE_CASE    :    int				):


  '''simple docstring'''







  if principal <= 0:
    raise Exception("Principal borrowed must be > 0"				)
  if rate_per_annum < 0:
    raise Exception("Rate of interest must be >= 0"				)
  if years_to_repay <= 0 or not isinstance(SCREAMING_SNAKE_CASE				,      SCREAMING_SNAKE_CASE				):
    raise Exception("Years to repay must be an integer > 0"				)

  # Yearly rate is divided by 12 to get monthly rate
  lowerCAmelCase     :     Tuple								=							rate_per_annum / 1_2

  # Years to repay is multiplied by 12 to get number of payments as payment is monthly
  lowerCAmelCase     :     List[Any]								=							years_to_repay * 1_2

  return (
      principal
      * rate_per_month
      * (1 + rate_per_month) ** number_of_payments
      / ((1 + rate_per_month) ** number_of_payments - 1)
  )


if __name__ == "__main__":
     import doctest

     doctest.testmod()





