

def        snake_case__		(    lowerCamelCase_     ,				lowerCamelCase_     ,				lowerCamelCase_		):
							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(lowerCamelCase_     ,				lowerCamelCase_		):
														raise Exception('''Years to repay must be an integer > 0'''		)

							# Yearly rate is divided by 12 to get monthly rate
							A      :					str      		=					rate_per_annum / 12

							# Years to repay is multiplied by 12 to get number of payments as payment is monthly
							A      :					Union[str, Any]      		=					years_to_repay * 12

							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()









import unittest

from transformers import load_tool
from transformers.utils import is_torch_available


if is_torch_available():
		import torch

from transformers.testing_utils import require_torch

from .test_tools_common import ToolTesterMixin







@require_torch
class 					__lowercase  (						unittest.TestCase		,       _SCREAMING_SNAKE_CASE				):





							"""simple docstring"""

							def       snake_case			(					self						)		->       Optional[Any]:
														A      :					Optional[Any]      		=					load_tool('''text-to-speech'''						)
														self.tool.setup()




							def       snake_case			(					self						)		->       Union[str, Any]:
														# SpeechT5 isn't deterministic
														torch.manual_seed(0						)
														A      :					Optional[Any]      		=					self.tool('''hey'''						)
														A      :					List[str]      		=					result.to_raw()
														self.assertTrue(
														    torch.allclose(
														        resulting_tensor[:3]    ,						torch.tensor([-0.0_0_0_5_9_6_6_6_6_8_8_3_2_1_1_5_8_2_9, -0.0_0_0_3_6_5_7_6_4_0_1_9_0_7_9_5_0_6_4, -0.0_0_0_1_3_4_3_9_5_0_2_7_9_9_8_8_3_4_8_5]						)    ,						)						)






							def       snake_case			(					self						)		->       Optional[Any]:
														# SpeechT5 isn't deterministic
														torch.manual_seed(0						)
														A      :					int      		=					self.tool('''hey'''						)
														A      :					Any      		=					result.to_raw()
														self.assertTrue(
														    torch.allclose(
														        resulting_tensor[:3]    ,						torch.tensor([-0.0_0_0_5_9_6_6_6_6_8_8_3_2_1_1_5_8_2_9, -0.0_0_0_3_6_5_7_6_4_0_1_9_0_7_9_5_0_6_4, -0.0_0_0_1_3_4_3_9_5_0_2_7_9_9_8_8_3_4_8_5]						)    ,						)						)






