diff --git a/.replit b/.replit
index a7723f6..5c3aeb0 100644
--- a/.replit
+++ b/.replit
@@ -1,3 +1,7 @@
language = "python3"
-run = "python turtle-racing-game/main.py"
+<<<<<<< HEAD
+run = "python cards-game/main.py"
+=======
+run = "python units_calculator/main.py"
+>>>>>>> f056ce5512fde2b7f7c5bb1d73e8732e0af72b1e
onBoot="echo Booting up!"
diff --git a/README.md b/README.md
index ce675d0..41f7705 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,18 @@
-# Basic and Friendly Python Projects 💻
-[![LinkedIn][linkedin-shield]][linkedin-url]
+# A List of Simple and Interesting Python Scripts 💻
+
- - -
- This is a small part of everyday coding for a number of days. This collection is meant to get you started as it is completely a great way to brush up on your coding skills and in addition to friendly comments. + Part of brilliant yet easy to understand programs. This collection is meant to get one started as it is completely a great way to learn or brush up on coding skills and algorithms. +
@@ -25,7 +24,7 @@ ![Product Name Screen Shot][product-screenshot] -This is a simple collection of Python projects. Enjoy and feel free to add more to it or improve it +This is an interesting collection of Python scripts that I keep adding to it every now and then. Enjoy and feel free to add more to it or improve it. My ultimate goal with this collection is to have a large list of fantastic small programmes that could be used as learning reference or an add-on to a fun project. Enjoy 😉 @@ -34,16 +33,36 @@ This is a simple collection of Python projects. Enjoy and feel free to add more * [Python](https://www.python.org/) * [Repl.it](https://repl.it/~) +* [PyCharm IDE](https://www.jetbrains.com/pycharm/) - -## Contact -Ayman A. - www.aymanx.io +| App Name | Description | +| ------------- | ------------- | +| [Cards Game](cards-game) | Blackjack is a card game that pits player versus dealer. It is played with one or more decks of cards. It's great to learn about ```while```loops and functions. Clone it and play with the computer | +| [Leap Year Python](leap-year-python) | A leap year is a calendar year that contains an additional day added to keep the calendar year synchronised with the astronomical year or seasonal year. | +| [Number Guessing Game](number-guessing-game) | In this game the computer will randomly generate a number and wait for the user guess, if not the same, the user gets multiple tries before losing the game, but if the user gets the correct answer then it's a win | +| [Passwords Manager](password-manager) | A simple Python passwords generator - letters, numbers, and symbols | +| [Ping Pong Game](ping-pong-game) | This program uses Turtle to draw the paddles, ball and the background. Use this simple game is very interesting to understand Object Oriented Programming | +| [Prime Number](prime-number-python) | This is one of the most questions I get asked whenever there is a coding quiz. Prime numbers are numbers that have only 2 factors: 1 and themselves. For example, the first 5 prime numbers are 2, 3, 5, 7, and 11. | +| [Quiz Game](quiz-game) | In this application, the user gets ten questions, one at a time from a JSON file. User gets two two options, and the score gets calculated at the end and it also uses OOP | +| [Simple Auction Logic](simple-auction-logic) | This is rather quite a basic program to get inputs and keep the loop going unless stopped, after that provide the person with the highest bid | +| [Snake Game](snake_game) | Bringing back old phone memories, this was one of the most enjoyable games out there. Nowadays, it's almost nonexistent, for that reason I coded up a simple snake game using Turtle in Python, and quite helpful to understand more about OOP | +| [Spelling Game Hangman](spelling-game-hangman)| It's an old-school game which can help one improve words spelling and expand vocabulary. The user gets an option to enter a letter or loses a point which all recorded in the game. | +| [Spirograh Draw](spirograph_draw) | Add your own beautiful Spiro drawing using this application, you can customise it however you want and make it your own. It's also a great fun tool | +| [Turtle Racing Game](turtle-racing-game) | This is a must play super simple game built with `Turtle()`module. Turtles are in different colours race to reach the end of the screen. | +| [Units Calculator](units_calculator) | I enjoyed building this simple BMI calculator and units converto. I still want to add more units and would love to see more people add to it. | +| [Events Email Notification](auto-email-sender) | This program for busy people who tend to forget events dates or even birthdays. It will help you to schedule birthday letter to send it on a pre-scheduled date which could save time and lots of embarrassment. 🙈 | +| [Sunset Reminder](sunset-reminder) | This app uses two APIs, [Open Notify](http://api.open-notify.org) and [Sunset and sunrise times API](https://api.sunrise-sunset.org) both integrate nicely in making an app that detects when it's in the space and night time then it will automatically send you an email | +|[Tkinter Quizzler](quizzler-v2) | This is an improved version of the Quiz app that built earlier and uses the console. This version using beautiful UI and fetch data from an incredibly sourceful API | + +Learn more about 👉 [`turtle`](https://bit.ly/3vcRBfG) or [`tkinter`](https://docs.python.org/3/library/tkinter.html) -Link: [https://github.com/aymanxdev/simple-python-projects](https://github.com/aymanxdev/simple-python-projects) + +## Contact +[aymanx.io](https://www.aymanx.io) diff --git a/US_states_map_finder/50_states.csv b/US_states_map_finder/50_states.csv new file mode 100644 index 0000000..05dbe0c --- /dev/null +++ b/US_states_map_finder/50_states.csv @@ -0,0 +1,51 @@ +state,x,y +Alabama,one,-77 +Alaska,-204,-170 +Arizona,-203,-40 +Arkansas,57,-53 +California,-297,13 +Colorado,-112,20 +Connecticut,297,96 +Delaware,275,42 +Florida,220,-145 +Georgia,182,-75 +Hawaii,-317,-143 +Idaho,-216,122 +Illinois,95,37 +Indiana,133,39 +Iowa,38,65 +Kansas,-17,5 +Kentucky,149,1 +Louisiana,59,-114 +Maine,319,164 +Maryland,288,27 +Massachusetts,312,112 +Michigan,148,101 +Minnesota,23,135 +Mississippi,94,-78 +Missouri,49,6 +Montana,-141,150 +Nebraska,-61,66 +Nevada,-257,56 +New Hampshire,302,127 +New Jersey,282,65 +New Mexico,-128,-43 +New York,236,104 +North Carolina,239,-22 +North Dakota,-44,158 +Ohio,176,52 +Oklahoma,-8,-41 +Oregon,-278,138 +Pennsylvania,238,72 +Rhode Island,318,94 +South Carolina,218,-51 +South Dakota,-44,109 +Tennessee,131,-34 +Texas,-38,-106 +Utah,-189,34 +Vermont,282,154 +Virginia,234,12 +Washington,-257,193 +West Virginia,200,20 +Wisconsin,83,113 +Wyoming,-134,90 \ No newline at end of file diff --git a/US_states_map_finder/blank_states_img.gif b/US_states_map_finder/blank_states_img.gif new file mode 100644 index 0000000..361f2d0 Binary files /dev/null and b/US_states_map_finder/blank_states_img.gif differ diff --git a/US_states_map_finder/main.py b/US_states_map_finder/main.py new file mode 100644 index 0000000..f8cc1b0 --- /dev/null +++ b/US_states_map_finder/main.py @@ -0,0 +1,66 @@ +from turtle import Turtle, Screen +import pandas as pd + +#Screen setup +screen = Screen() +screen.bgpic('blank_states_img.gif') +screen.setup(725, 491) +screen.title("US States Guess Game") + +#turtle setup +turtle = Turtle() +turtle.hideturtle() +turtle.penup() +#csv data cleaning and extracting +data = pd.read_csv('50_states.csv') +states = data["state"].to_list() +x = data.x.to_list() +y = data.y.to_list() + + +guessed_states = [] + +while len(guessed_states) < 50: + answer = screen.textinput(title=f"Guess the state {guessed_states} / 50", prompt="What's another state's name?").title() + + if answer == "Exit": + states_list_left = [state for state in states if state not in guessed_states] + df = pd.DataFrame(states_list_left) + df.to_csv("states_to_learn") + break + if answer in states: + guessed_states.append(answer) + state_data = data[data.state == answer] + turtle.goto(int(state_data.x),int (state_data.y)) + turtle.write(answer) + + + + + + + + +#get cooridinates of each state on the map +# def get_mouse_click_coor(x, y): +# print(x, y) +# screen.onscreenclick(get_mouse_click_coor) + +screen.mainloop() + + + + + + + + + + + + + + + + + diff --git a/auto-email-sender/letter_templates/letter_example.py b/auto-email-sender/letter_templates/letter_example.py new file mode 100644 index 0000000..9ec0a26 --- /dev/null +++ b/auto-email-sender/letter_templates/letter_example.py @@ -0,0 +1 @@ +Add your letter content here diff --git a/auto-email-sender/letter_templates/letter_n.py b/auto-email-sender/letter_templates/letter_n.py new file mode 100644 index 0000000..9ec0a26 --- /dev/null +++ b/auto-email-sender/letter_templates/letter_n.py @@ -0,0 +1 @@ +Add your letter content here diff --git a/auto-email-sender/list_file.csv b/auto-email-sender/list_file.csv new file mode 100644 index 0000000..d682967 --- /dev/null +++ b/auto-email-sender/list_file.csv @@ -0,0 +1,4 @@ +name,email,year,month,day +the person name,the person email,year,month,day + +Add rows of your recipients or even add more columns to the first line. \ No newline at end of file diff --git a/auto-email-sender/main.py b/auto-email-sender/main.py new file mode 100644 index 0000000..801ad01 --- /dev/null +++ b/auto-email-sender/main.py @@ -0,0 +1,26 @@ +import smtplib +import datetime as dt +import random +import pandas + +now = dt.datetime.now() +month = now.month +day = now.day + +today = (month, day) +data = pandas.read_csv("list_file.csv") +new_dict = {(data_row["month"], data_row["day"]): data_row for (index, data_row) in data.iterrows()} + +if today in new_dict: + birthday_person = new_dict[today] + file_path =f"letter_templates/letter_{random.randint(1,3)}.txt" + with open(file_path) as letter_file: + contents = letter_file.read() + contents= contents.replace("[NAME]", birthday_person["name"]) + +# [NAME] is what will be replaced in the letter we want to send. + + with smtplib.SMTP("smtp.gmail.com") as connection: + connection.starttls() + connection.login(user=my_email, password=my_password) + connection.sendmail(from_addr=my_email, to_addrs=birthday_person["email"], msg=f"Subject: Happy Birthday\n\n {contents}") \ No newline at end of file diff --git a/cards-game/__pycache__/art.cpython-38.pyc b/cards-game/__pycache__/art.cpython-38.pyc new file mode 100644 index 0000000..a674614 Binary files /dev/null and b/cards-game/__pycache__/art.cpython-38.pyc differ diff --git a/password-manager/logo.gif b/password-manager/logo.gif new file mode 100644 index 0000000..5049b02 Binary files /dev/null and b/password-manager/logo.gif differ diff --git a/password-manager/main.py b/password-manager/main.py new file mode 100644 index 0000000..fb9cdfd --- /dev/null +++ b/password-manager/main.py @@ -0,0 +1,86 @@ +from tkinter import * +from tkinter import messagebox +import random +import pyperclip +# ---------------------------- PASSWORD GENERATOR ------------------------------- # +def generate_password(): + letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] + numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] + symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+'] + + nr_letters = random.randint(8, 10) + nr_symbols = random.randint(2, 4) + nr_numbers = random.randint(2, 4) + + password_letters = [random.choice(letters) for _ in range(nr_letters)] + password_symbols = [random.choice(symbols) for _ in range(nr_symbols)] + password_numbers = [random.choice(numbers) for _ in range(nr_numbers)] + + password_list = password_letters + password_symbols + password_numbers + random.shuffle(password_list) + password = "".join(password_list) + password_input.insert(0, password) + pyperclip.copy(password) + +# ---------------------------- SAVE PASSWORD ------------------------------- # +def save_to_file(): + website = website_input.get() + email = username_input.get() + password = password_input.get() + + if len(password) == 0 or len(website) == 0: + messagebox.showinfo(title="Oops", message="Please don't leave any fields empty") + else: + is_ok = messagebox.askokcancel(title=website, message=f"These are the details entered: \nEmail: {email} " + f"\nPassword: {password} \nIs it ok to save?") + if is_ok: + with open("data.txt","a") as passwords_data: + passwords_data.write(f"{website} | {email} | {password}\n") + website_input.delete(0, END) + password_input.delete(0, END) + +# ---------------------------- UI SETUP ------------------------------- # + +window = Tk() +window.title("Password Manager") +window.config(padx=50, pady=50) + + +logo_img = PhotoImage(file="logo.gif") +canvas = Canvas(width= 200, height=200) +canvas.create_image(100,103, image= logo_img) +canvas.grid(column=1, row=0) + +# --------------- website Label --------------- # +website_label = Label(text="Website: ") +website_label.grid(column= 0, row=1) +website_input = Entry(width=36) +website_input.focus() +website_input.grid(column= 1, row=1, columnspan=2) +# --------------- Email/Username Label --------------- # +username_label = Label(text="Email/Username: ") +username_label.grid(column= 0, row=2) +username_input = Entry(width=36) +username_input.insert(END, "ayman@email.com") +username_input.grid(column= 1, row=2, columnspan=2) +# --------------- Password Label --------------- # +password_label = Label(text="Password: ") +password_label.grid(column= 0, row=3) +password_input = Entry(width=21) +password_input.grid(column= 1, row=3) +# --------------- Generate Button --------------- # +generate_button = Button(text="Generate Password", command= generate_password) +generate_button.grid(column= 2, row=3) +# --------------- Add Button --------------- # +add_button = Button(text="Add", width=36, command= save_to_file) +add_button.grid(column= 1, row= 4, columnspan=2) + + + + + + + +# img = Image.open("logo.png") +# logo_img = ImageTk.PhotoImage(img) +window.mainloop() \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index c912492..18a5563 100644 --- a/poetry.lock +++ b/poetry.lock @@ -96,7 +96,7 @@ description = "A very fast and expressive template engine." name = "jinja2" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.11.2" +version = "2.11.3" [package.dependencies] MarkupSafe = ">=0.23" @@ -120,6 +120,60 @@ optional = false python-versions = ">=3.6" version = "5.1.0" +[[package]] +category = "main" +description = "NumPy is the fundamental package for array computing with Python." +name = "numpy" +optional = false +python-versions = ">=3.7" +version = "1.20.1" + +[[package]] +category = "main" +description = "Powerful data structures for data analysis, time series, and statistics" +name = "pandas" +optional = false +python-versions = ">=3.7.1" +version = "1.2.2" + +[package.dependencies] +numpy = ">=1.16.5" +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["pytest (>=5.0.1)", "pytest-xdist", "hypothesis (>=3.58)"] + +[[package]] +category = "main" +<<<<<<< HEAD +description = "A cross-platform clipboard module for Python. (Only handles plain text for now.)" +name = "pyperclip" +optional = false +python-versions = "*" +version = "1.8.2" + +[[package]] +category = "main" +======= +>>>>>>> f056ce5512fde2b7f7c5bb1d73e8732e0af72b1e +description = "Extensions to the standard Python datetime module" +name = "python-dateutil" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +version = "2.8.1" + +[package.dependencies] +six = ">=1.5" + +[[package]] +category = "main" +description = "World timezone definitions, modern and historical" +name = "pytz" +optional = false +python-versions = "*" +version = "2021.1" + [[package]] category = "main" description = "A library for interacting with features of repl.it" @@ -134,6 +188,14 @@ flask = ">=1.1.2,<2.0.0" typing_extensions = ">=3.7.4,<4.0.0" werkzeug = ">=1.0.1,<2.0.0" +[[package]] +category = "main" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.15.0" + [[package]] category = "main" description = "Backported and Experimental Type Hints for Python 3.5+" @@ -167,7 +229,11 @@ idna = ">=2.0" multidict = ">=4.0" [metadata] -content-hash = "6d3514cb81839d9fe44914b8552df0d6516c7024f069fdf16ee4a92b21fb0276" +<<<<<<< HEAD +content-hash = "b00594ff3dfba651b023e3f73e3297c194d74d2a0aaa89603403a2942f086576" +======= +content-hash = "28ece3eb17d38ef47d0e726c0bec426264840bba96d9fc15008e6bc40dc58b0e" +>>>>>>> f056ce5512fde2b7f7c5bb1d73e8732e0af72b1e python-versions = "^3.8" [metadata.files] @@ -239,8 +305,8 @@ itsdangerous = [ {file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"}, ] jinja2 = [ - {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, - {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, + {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, + {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, ] markupsafe = [ {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, @@ -261,20 +327,39 @@ markupsafe = [ {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"}, {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"}, {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, ] multidict = [ @@ -316,10 +401,74 @@ multidict = [ {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"}, {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"}, ] +numpy = [ + {file = "numpy-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae61f02b84a0211abb56462a3b6cd1e7ec39d466d3160eb4e1da8bf6717cdbeb"}, + {file = "numpy-1.20.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:65410c7f4398a0047eea5cca9b74009ea61178efd78d1be9847fac1d6716ec1e"}, + {file = "numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2d7e27442599104ee08f4faed56bb87c55f8b10a5494ac2ead5c98a4b289e61f"}, + {file = "numpy-1.20.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:4ed8e96dc146e12c1c5cdd6fb9fd0757f2ba66048bf94c5126b7efebd12d0090"}, + {file = "numpy-1.20.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:ecb5b74c702358cdc21268ff4c37f7466357871f53a30e6f84c686952bef16a9"}, + {file = "numpy-1.20.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b9410c0b6fed4a22554f072a86c361e417f0258838957b78bd063bde2c7f841f"}, + {file = "numpy-1.20.1-cp37-cp37m-win32.whl", hash = "sha256:3d3087e24e354c18fb35c454026af3ed8997cfd4997765266897c68d724e4845"}, + {file = "numpy-1.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:89f937b13b8dd17b0099c7c2e22066883c86ca1575a975f754babc8fbf8d69a9"}, + {file = "numpy-1.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a1d7995d1023335e67fb070b2fae6f5968f5be3802b15ad6d79d81ecaa014fe0"}, + {file = "numpy-1.20.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:60759ab15c94dd0e1ed88241fd4fa3312db4e91d2c8f5a2d4cf3863fad83d65b"}, + {file = "numpy-1.20.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:125a0e10ddd99a874fd357bfa1b636cd58deb78ba4a30b5ddb09f645c3512e04"}, + {file = "numpy-1.20.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c26287dfc888cf1e65181f39ea75e11f42ffc4f4529e5bd19add57ad458996e2"}, + {file = "numpy-1.20.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:7199109fa46277be503393be9250b983f325880766f847885607d9b13848f257"}, + {file = "numpy-1.20.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:72251e43ac426ff98ea802a931922c79b8d7596480300eb9f1b1e45e0543571e"}, + {file = "numpy-1.20.1-cp38-cp38-win32.whl", hash = "sha256:c91ec9569facd4757ade0888371eced2ecf49e7982ce5634cc2cf4e7331a4b14"}, + {file = "numpy-1.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:13adf545732bb23a796914fe5f891a12bd74cf3d2986eed7b7eba2941eea1590"}, + {file = "numpy-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104f5e90b143dbf298361a99ac1af4cf59131218a045ebf4ee5990b83cff5fab"}, + {file = "numpy-1.20.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:89e5336f2bec0c726ac7e7cdae181b325a9c0ee24e604704ed830d241c5e47ff"}, + {file = "numpy-1.20.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:032be656d89bbf786d743fee11d01ef318b0781281241997558fa7950028dd29"}, + {file = "numpy-1.20.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:66b467adfcf628f66ea4ac6430ded0614f5cc06ba530d09571ea404789064adc"}, + {file = "numpy-1.20.1-cp39-cp39-win32.whl", hash = "sha256:12e4ba5c6420917571f1a5becc9338abbde71dd811ce40b37ba62dec7b39af6d"}, + {file = "numpy-1.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:9c94cab5054bad82a70b2e77741271790304651d584e2cdfe2041488e753863b"}, + {file = "numpy-1.20.1-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:9eb551d122fadca7774b97db8a112b77231dcccda8e91a5bc99e79890797175e"}, + {file = "numpy-1.20.1.zip", hash = "sha256:3bc63486a870294683980d76ec1e3efc786295ae00128f9ea38e2c6e74d5a60a"}, +] +pandas = [ + {file = "pandas-1.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c76a108272a4de63189b8f64086bbaf8348841d7e610b52f50959fbbf401524f"}, + {file = "pandas-1.2.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e61a089151f1ed78682aa77a3bcae0495cf8e585546c26924857d7e8a9960568"}, + {file = "pandas-1.2.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fc351cd2df318674669481eb978a7799f24fd14ef26987a1aa75105b0531d1a1"}, + {file = "pandas-1.2.2-cp37-cp37m-win32.whl", hash = "sha256:05ca6bda50123158eb15e716789083ca4c3b874fd47688df1716daa72644ee1c"}, + {file = "pandas-1.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:08b6bbe74ae2b3e4741a744d2bce35ce0868a6b4189d8b84be26bb334f73da4c"}, + {file = "pandas-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:230de25bd9791748b2638c726a5f37d77a96a83854710110fadd068d1e2c2c9f"}, + {file = "pandas-1.2.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:a50cf3110a1914442e7b7b9cef394ef6bed0d801b8a34d56f4c4e927bbbcc7d0"}, + {file = "pandas-1.2.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4d33537a375cfb2db4d388f9a929b6582a364137ea6c6b161b0166440d6ffe36"}, + {file = "pandas-1.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8ac028cd9a6e1efe43f3dc36f708263838283535cc45430a98b9803f44f4c84b"}, + {file = "pandas-1.2.2-cp38-cp38-win32.whl", hash = "sha256:c43d1beb098a1da15934262009a7120aac8dafa20d042b31dab48c28868eb5a4"}, + {file = "pandas-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:69a70d79a791fa1fd5f6e84b8b6dec2ec92369bde4ab2e18d43fc8a1825f51d1"}, + {file = "pandas-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbad4155028b8ca66aa19a8b13f593ebbf51bfb6c3f2685fe64f04d695a81864"}, + {file = "pandas-1.2.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:fbddbb20f30308ba2546193d64e18c23b69f59d48cdef73676cbed803495c8dc"}, + {file = "pandas-1.2.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:214ae60b1f863844e97c87f758c29940ffad96c666257323a4bb2a33c58719c2"}, + {file = "pandas-1.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:26b4919eb3039a686a86cd4f4a74224f8f66e3a419767da26909dcdd3b37c31e"}, + {file = "pandas-1.2.2-cp39-cp39-win32.whl", hash = "sha256:e3c250faaf9979d0ec836d25e420428db37783fa5fed218da49c9fc06f80f51c"}, + {file = "pandas-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:e9bbcc7b5c432600797981706f5b54611990c6a86b2e424329c995eea5f9c42b"}, + {file = "pandas-1.2.2.tar.gz", hash = "sha256:14ed84b463e9b84c8ff9308a79b04bf591ae3122a376ee0f62c68a1bd917a773"}, +] +<<<<<<< HEAD +pyperclip = [ + {file = "pyperclip-1.8.2.tar.gz", hash = "sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57"}, +] +======= +>>>>>>> f056ce5512fde2b7f7c5bb1d73e8732e0af72b1e +python-dateutil = [ + {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, + {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, +] +pytz = [ + {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, + {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, +] replit = [ {file = "replit-2.0.0-py3-none-any.whl", hash = "sha256:862b49887f486a5c83eba4809b86a977378a008f1c5d53ab3c1187418194cf18"}, {file = "replit-2.0.0.tar.gz", hash = "sha256:f6953201a5ff5b3ae29b7630fa13a87f2423f5a9afba06fc5427ee0f958c7aa7"}, ] +six = [ + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, +] typing-extensions = [ {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, diff --git a/pyproject.toml b/pyproject.toml index 364639b..0cc67d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,11 @@ authors = ["repl.it user