





'''simple docstring'''




from collections.abc import Callable

import numpy as np





def 	__lowerCamelCase			(      __lowerCAmelCase       :							Callable      ,    __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float		)		->  np.array:
   snake_case 						=   int(np.ceil((x_end - xa) / step_size		)		)
   snake_case 						=   np.zeros((n + 1,)		)
   snake_case 						=   ya
   snake_case 						=   xa

   for k in range(__lowerCAmelCase		):
      snake_case 						=   y[k] + step_size * ode_func(__lowerCAmelCase      ,    y[k]		)
      snake_case 						=   y[k] + (
          (step_size / 2) * (ode_func(__lowerCAmelCase      ,    y[k]		) + ode_func(x + step_size      ,    __lowerCAmelCase		))
      )
      x += step_size

   return y


if __name__ == "__main__":
 import doctest

 doctest.testmod()








'''simple docstring'''




from __future__ import annotations





def 	__lowerCamelCase			(      __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float		)		->  float:
   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			(      __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float      ,    )		->  float:
   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			(      __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float      ,    __lowerCAmelCase       :							float      ,    )		->  float:
   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(
       __lowerCAmelCase      ,    nominal_annual_percentage_rate / 3_65      ,    number_of_years * 3_65		)


if __name__ == "__main__":
 import doctest

 doctest.testmod()

