From ad83450578602be83ecdbed71d283fe9f5486de3 Mon Sep 17 00:00:00 2001 From: Prashidika Tiwari Date: Tue, 3 Oct 2023 19:40:31 +0545 Subject: [PATCH 1/3] Time Conversion Algorithm --- conversions/time_conversions.py | 71 +++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 conversions/time_conversions.py diff --git a/conversions/time_conversions.py b/conversions/time_conversions.py new file mode 100644 index 000000000000..124cf909b318 --- /dev/null +++ b/conversions/time_conversions.py @@ -0,0 +1,71 @@ +""" +Conversion of time units. +Available Units:- Decade, Year, Month, Day, Week, Minutes, Seconds +USAGE : +-> Import this file into your respective project. +-> Use the function time_conversion() for conversion of time units. +-> Parameters : + -> value : The number of units you want to convert + -> from_type : From which type you want to convert + -> to_type : To which type you want to convert +""" + +from typing import NamedTuple + + +class FromTo(NamedTuple): + from_factor: float + to_factor: float + + +TIME_CONVERSION = { + "decade": FromTo(315360000, 1/315360000), + "year": FromTo(31536000, 1/31536000), + "month": FromTo(2592000, 1/2592000), + "day": FromTo(86400, 1/86400), + "week": FromTo(604800,1/604800), + "minutes": FromTo(60, 1/60), + "seconds": FromTo(1, 1), +} + + +def time_conversion(value: float, from_type: str, to_type: str) -> float: + """ + Conversion between time units. + >>> time_conversion(4, "decade", "year") + 40.0 + >>> time_conversion(1, "month", "day") + 30.0 + >>> time_conversion(365, "day", "week") + 52.142857142857146 + >>> time_conversion(60, "minutes", "seconds") + 3600 + >>> time_conversion(2, "year", "month") + 24.333333333333332 + >>> time_conversion(1, "wrongUnit", "year") + Traceback (most recent call last): + ... + ValueError: Invalid 'from_type' value: 'wrongUnit' Supported values are: + decade, year, month, day, week, minutes, seconds + """ + if from_type not in TIME_CONVERSION: + raise ValueError( + f"Invalid 'from_type' value: {from_type!r} Supported values are:\n" + + ", ".join(TIME_CONVERSION) + ) + if to_type not in TIME_CONVERSION: + raise ValueError( + f"Invalid 'to_type' value: {to_type!r}. Supported values are:\n" + + ", ".join(TIME_CONVERSION) + ) + return ( + value + * TIME_CONVERSION[from_type].from_factor + * TIME_CONVERSION[to_type].to_factor + ) + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From ec3e22180251bddba00dccd14c04fe4cfff360e1 Mon Sep 17 00:00:00 2001 From: Prashidika Tiwari Date: Tue, 3 Oct 2023 19:51:00 +0545 Subject: [PATCH 2/3] Reference added --- conversions/time_conversions.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conversions/time_conversions.py b/conversions/time_conversions.py index 124cf909b318..3f4c150c8686 100644 --- a/conversions/time_conversions.py +++ b/conversions/time_conversions.py @@ -8,6 +8,9 @@ -> value : The number of units you want to convert -> from_type : From which type you want to convert -> to_type : To which type you want to convert + + REFERENCES: + Wikipedia Reference: https://en.wikipedia.org/wiki/Unit_of_time """ from typing import NamedTuple From 709aa30faa295db182d2e0029be373158b8f8fe1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:18:50 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- conversions/time_conversions.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/conversions/time_conversions.py b/conversions/time_conversions.py index 3f4c150c8686..17cdf54cfb54 100644 --- a/conversions/time_conversions.py +++ b/conversions/time_conversions.py @@ -22,12 +22,12 @@ class FromTo(NamedTuple): TIME_CONVERSION = { - "decade": FromTo(315360000, 1/315360000), - "year": FromTo(31536000, 1/31536000), - "month": FromTo(2592000, 1/2592000), - "day": FromTo(86400, 1/86400), - "week": FromTo(604800,1/604800), - "minutes": FromTo(60, 1/60), + "decade": FromTo(315360000, 1 / 315360000), + "year": FromTo(31536000, 1 / 31536000), + "month": FromTo(2592000, 1 / 2592000), + "day": FromTo(86400, 1 / 86400), + "week": FromTo(604800, 1 / 604800), + "minutes": FromTo(60, 1 / 60), "seconds": FromTo(1, 1), }