

'''simple docstring'''


from __future__ import annotations

import requests

lowerCAmelCase__						:       List[Any]										=						set(
    """approved_at_utc approved_by author_flair_background_color
author_flair_css_class author_flair_richtext author_flair_template_id author_fullname
author_premium can_mod_post category clicked content_categories created_utc downs
edited gilded gildings hidden hide_score is_created_from_ads_ui is_meta
is_original_content is_reddit_media_domain is_video link_flair_css_class
link_flair_richtext link_flair_text link_flair_text_color media_embed mod_reason_title
name permalink pwls quarantine saved score secure_media secure_media_embed selftext
subreddit subreddit_name_prefixed subreddit_type thumbnail title top_awarded_type
total_awards_received ups upvote_ratio url user_reports""".split()
)




def 	_a       (				__lowerCAmelCase		:      str   ,							__lowerCAmelCase		:      int = 1   ,							__lowerCAmelCase		:      str = "new"   ,							__lowerCAmelCase		:      list | None = None     ):

		"""simple docstring"""

		snake_case__						:       int       						=  wanted_data or []
		if invalid_search_terms := ", ".join(sorted(set(__lowerCAmelCase     ) - valid_terms     )     ):
				snake_case__						:       Dict       						=  F"""Invalid search term: {invalid_search_terms}"""
				raise ValueError(__lowerCAmelCase     )
		snake_case__						:       Any       						=  requests.get(
		    F"""https://reddit.com/r/{subreddit}/{age}.json?limit={limit}"""   ,							headers={'''User-agent''': '''A random string'''}   ,							)
		if response.status_code == 4_29:
				raise requests.HTTPError

		snake_case__						:       List[Any]       						=  response.json()
		if not wanted_data:
				return {id_: data["data"]["children"][id_] for id_ in range(__lowerCAmelCase     )}

		snake_case__						:       Dict       						=  {}
		for id_ in range(__lowerCAmelCase     ):
				snake_case__						:       List[str]       						=  {
				    item: data['''data''']['''children'''][id_]['''data'''][item] for item in wanted_data
				}
		return data_dict


if __name__ == "__main__":
					# If you get Error 429, that means you are rate limited.Try after some time
					print(get_subreddit_data("""learnpython""", wanted_data=["""title""", """url""", """selftext"""]))






'''simple docstring'''


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

		# Yearly rate is divided by 12 to get monthly rate
		snake_case__						:       int       						=  rate_per_annum / 12

		# Years to repay is multiplied by 12 to get number of payments as payment is monthly
		snake_case__						:       Tuple       						=  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()



