From bded23163b52e9cacf5ebfca92a67bdc1374b9bc Mon Sep 17 00:00:00 2001 From: James Turk Date: Mon, 30 Sep 2024 00:42:17 -0500 Subject: [PATCH] ruff --- 01.basics-1.ipynb | 109 +++++++++++++++++++-------------- 02.basics-2.ipynb | 153 ++++++++++++++++++++++++---------------------- pyproject.toml | 1 + uv.lock | 31 +++++++++- 4 files changed, 175 insertions(+), 119 deletions(-) diff --git a/01.basics-1.ipynb b/01.basics-1.ipynb index 21ffbb2..ec612bc 100644 --- a/01.basics-1.ipynb +++ b/01.basics-1.ipynb @@ -305,7 +305,9 @@ } ], "source": [ - "print(\"Hi\", 2 * 3 * 47 * 181, \"!\") # the advantage is that I can mix code in with my notes" + "print(\n", + " \"Hi\", 2 * 3 * 47 * 181, \"!\"\n", + ") # the advantage is that I can mix code in with my notes" ] }, { @@ -508,7 +510,7 @@ "\n", "print(100 // 2)\n", "\n", - "m = 10*9*8*7*6*5*4*3*2\n", + "m = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2\n", "n = 3628800 # 10!\n", "print(n % 11)" ] @@ -547,7 +549,7 @@ } ], "source": [ - "(.1 + .2) == .3" + "(0.1 + 0.2) == 0.3" ] }, { @@ -570,7 +572,7 @@ } ], "source": [ - ".1 + .2" + "0.1 + 0.2" ] }, { @@ -602,12 +604,12 @@ } ], "source": [ - "print(.1 + .2 == .3)\n", + "print(0.1 + 0.2 == 0.3)\n", "\n", "episilon = 0.000000001\n", - "abs((.1 + .2) - .3) < episilon\n", + "abs((0.1 + 0.2) - 0.3) < episilon\n", "\n", - "#bank_account_hundredths_of_cent = 1000000000" + "# bank_account_hundredths_of_cent = 1000000000" ] }, { @@ -660,7 +662,7 @@ "\n", "s = \"Hello\"\n", "s += \" Class\"\n", - "#s /= \"l\"\n", + "# s /= \"l\"\n", "print(s)" ] }, @@ -818,10 +820,12 @@ "# we'll discuss how to write functions/etc. soon\n", "import time\n", "\n", + "\n", "def short_func():\n", " print(\"short_func\")\n", " return False\n", "\n", + "\n", "def long_func():\n", " print(\"long_func\")\n", " time.sleep(1)\n", @@ -999,11 +1003,11 @@ "\n", "# Like many languages, Python supports special 'escape characters'.\n", "\n", - "#print(\"Another way to \\\"quote\\\" something.\")\n", + "# print(\"Another way to \\\"quote\\\" something.\")\n", "\n", - "#print('An alternate apostrophe: \\' ')\n", + "# print('An alternate apostrophe: \\' ')\n", "\n", - "#print(\"Newline character: \\n starts a new line.\")\n", + "# print(\"Newline character: \\n starts a new line.\")\n", "\n", "print(\"Sometimes you need a \\\\ backslash.\")" ] @@ -1049,7 +1053,7 @@ "source": [ "# Raw Strings\n", "\n", - "# Sometimes it is undesirable to escape every backslash. \n", + "# Sometimes it is undesirable to escape every backslash.\n", "\n", "# Two common examples are when dealing with file paths on Windows or Regular Expressions.\n", "\n", @@ -1258,7 +1262,7 @@ "user = \"James\"\n", "num = 1234\n", "\n", - "print(f\"{user=} {num=}\") \n", + "print(f\"{user=} {num=}\")\n", "# same as f\"user={user} num={num}\" but less repetition\n", "\n", "# = is a format specifier, there are many others for aligning output, truncating decimals, etc.\n", @@ -1304,7 +1308,7 @@ "\n", "# lists can contain items of different types\n", "\n", - "things = [123, \"abc\", 1.23j+4.5]\n", + "things = [123, \"abc\", 1.23j + 4.5]\n", "\n", "# lists can contain other lists\n", "\n", @@ -1349,9 +1353,9 @@ "\n", "empty_tuple = ()\n", "\n", - "one_item_tuple = (1+2,) # why is the comma necessary?\n", + "one_item_tuple = (1 + 2,) # why is the comma necessary?\n", "\n", - "bad_tuple = (1+492)\n", + "bad_tuple = 1 + 492\n", "\n", "print(bad_tuple) # why is this not a tuple?" ] @@ -1584,10 +1588,10 @@ "[\"\"] * 100\n", "\n", "\n", - "#x = (\"a\", \"b\", \"c\")\n", - "#y = (\"z\", \"z\", \"z\")\n", - "#z = x + y\n", - "#z" + "# x = (\"a\", \"b\", \"c\")\n", + "# y = (\"z\", \"z\", \"z\")\n", + "# z = x + y\n", + "# z" ] }, { @@ -1602,7 +1606,7 @@ "# concatenation & repetition demo\n", "s2 = \"*\" * 5\n", "t2 = (True, False) * 3\n", - "l2 = [\"a\", \"b\", \"c\"] * 4\n" + "l2 = [\"a\", \"b\", \"c\"] * 4" ] }, { @@ -1640,7 +1644,18 @@ } ], "source": [ - "cities = [\"Tokyo\", \"Delhi\", \"Shanghai\", \"São Paulo\", \"Mexico City\", \"Cairo\", \"Mumbai\", \"Beijing\", \"Dhaka\", \"Osaka\"]\n", + "cities = [\n", + " \"Tokyo\",\n", + " \"Delhi\",\n", + " \"Shanghai\",\n", + " \"São Paulo\",\n", + " \"Mexico City\",\n", + " \"Cairo\",\n", + " \"Mumbai\",\n", + " \"Beijing\",\n", + " \"Dhaka\",\n", + " \"Osaka\",\n", + "]\n", "text = \"Four score and seven years ago our fathers brought forth, upon this continent, a new nation, conceived in liberty, and dedicated to the proposition that all men are created equal\"\n", "ids = (123, 555, 81, 110, 44, 12, 16)\n", "ids[0]" @@ -1713,15 +1728,15 @@ "outputs": [], "source": [ "# slicing\n", - "#print(cities)\n", + "# print(cities)\n", "print(cities[8:])\n", - "#print(cities[:4])\n", - "#print(cities[8:])\n", - "#print(cities[4:-3])\n", + "# print(cities[:4])\n", + "# print(cities[8:])\n", + "# print(cities[4:-3])\n", "\n", - "#print(text)\n", - "#print(text[0:4])\n", - "#print(text[:])\n", + "# print(text)\n", + "# print(text[0:4])\n", + "# print(text[:])\n", "\n", "# print(ids[1:4])" ] @@ -1865,7 +1880,7 @@ "\n", "# find\n", "pos = s.find(\"world\")\n", - "#print(pos)\n", + "# print(pos)\n", "print(s[pos:])\n", "\n", "upper = s.upper()\n", @@ -1996,14 +2011,14 @@ "x = 49490\n", "\n", "if x < 0:\n", - " print('negative')\n", + " print(\"negative\")\n", " print(\"second line\")\n", "elif x == 0:\n", - " print('zero')\n", + " print(\"zero\")\n", "elif x == 4:\n", " print(\"four\")\n", "else:\n", - " print('positive')" + " print(\"positive\")" ] }, { @@ -2116,14 +2131,14 @@ } ], "source": [ - "#print(cities)\n", + "# print(cities)\n", "for city in cities:\n", " if city == \"Cairo\":\n", " # we don't need to print cairo out\n", " continue\n", " print(city)\n", - " \n", - "seconds_left = 7\n" + "\n", + "seconds_left = 7" ] }, { @@ -2160,7 +2175,7 @@ }, "outputs": [], "source": [ - "# break demo \n", + "# break demo\n", "\n", "time_left = 10\n", "abort_at = 3\n", @@ -2172,7 +2187,7 @@ " print(\"Launch Aborted\")\n", " break\n", "else:\n", - " # this only runs if we don't break \n", + " # this only runs if we don't break\n", " print(\"blast off!\")\n", "\n", "# can we use else to fix this?\n", @@ -2197,8 +2212,7 @@ " print(\"found a comma!\")\n", " break\n", "else:\n", - " print('no comma found!')\n", - " " + " print(\"no comma found!\")" ] }, { @@ -2236,7 +2250,7 @@ " if city in visited:\n", " continue\n", " print(f\"I would like to visit {city}\")\n", - " \n", + "\n", "# when would we use continue in practice?" ] }, @@ -2466,13 +2480,16 @@ "metadata": {}, "outputs": [], "source": [ - "# I've broken this function into multiple lines, which is allowed \n", - "# due to the parentheses. \n", + "# I've broken this function into multiple lines, which is allowed\n", + "# due to the parentheses.\n", + "\n", "\n", "def find_value(\n", - " a_list: list[int], # this parameter is a list of integers\n", - " num: int # this parameter is a single integer\n", - ") -> int | None: # this annotation \"-> int | None\" indicates return type can be int or None\n", + " a_list: list[int], # this parameter is a list of integers\n", + " num: int, # this parameter is a single integer\n", + ") -> (\n", + " int | None\n", + "): # this annotation \"-> int | None\" indicates return type can be int or None\n", " pass" ] }, diff --git a/02.basics-2.ipynb b/02.basics-2.ipynb index 5130135..7f31b39 100644 --- a/02.basics-2.ipynb +++ b/02.basics-2.ipynb @@ -140,7 +140,7 @@ } ], "source": [ - "z = range(12) # hmm\n", + "z = range(12) # hmm\n", "print(type(z))" ] }, @@ -381,7 +381,7 @@ "tup = (1, 2, 3)\n", "lst = [\"a\", \"b\", \"c\"]\n", "\n", - "(x, y, z) = tup \n", + "(x, y, z) = tup\n", "print(x, y, z)" ] }, @@ -395,7 +395,7 @@ "outputs": [], "source": [ "x = 7\n", - "y = 8 " + "y = 8" ] }, { @@ -495,7 +495,7 @@ "\n", "# alternate form\n", "record2 = dict(age=42, name=\"Anna\")\n", - "#list(\"a\", \"b\")\n", + "# list(\"a\", \"b\")\n", "\n", "# can also construct from sequence of tuples\n", "\n", @@ -549,7 +549,7 @@ }, "outputs": [], "source": [ - "record1[\"name\"] = \"Anne\"\n" + "record1[\"name\"] = \"Anne\"" ] }, { @@ -592,8 +592,8 @@ "source": [ "# keys, values, items\n", "print(record1.keys())\n", - "#print(record1.values())\n", - "#print((record1.items()))" + "# print(record1.values())\n", + "# print((record1.items()))" ] }, { @@ -627,7 +627,7 @@ }, "outputs": [], "source": [ - "hash([1,2,3,4])" + "hash([1, 2, 3, 4])" ] }, { @@ -721,7 +721,7 @@ "outputs": [], "source": [ "d2 = {}\n", - "d2[[1,2,3]] = \"OK\" " + "d2[[1, 2, 3]] = \"OK\"" ] }, { @@ -877,8 +877,8 @@ "# can use .items() or .values() to loop over non-keys\n", "for key, value in order.items():\n", " print(f\"{key=} {value=}\")\n", - " \n", - " \n", + "\n", + "\n", "print(order.items())" ] }, @@ -941,7 +941,7 @@ "print(order)\n", "key = \"fish\"\n", "\n", - "#print(d.get(key), key)\n" + "# print(d.get(key), key)" ] }, { @@ -1071,12 +1071,12 @@ } ], "source": [ - "dishes = {'eggs':2,'sausage':1,'bacon':1,'spam':500}\n", + "dishes = {\"eggs\": 2, \"sausage\": 1, \"bacon\": 1, \"spam\": 500}\n", "\n", "# Keys is a view object of the keys from the dishes dictionary\n", "keys = dishes.keys()\n", "values = dishes.values()\n", - "items = dishes.items() \n", + "items = dishes.items()\n", "\n", "print(keys)\n", "print(values)\n", @@ -1104,12 +1104,12 @@ } ], "source": [ - "# View objects are dynamic and reflect dictionary changes \n", + "# View objects are dynamic and reflect dictionary changes\n", "\n", - "# Lets delete the 'eggs' entry \n", - "del dishes['eggs']\n", + "# Lets delete the 'eggs' entry\n", + "del dishes[\"eggs\"]\n", "\n", - "# Notice the both the views have removed key and its value \n", + "# Notice the both the views have removed key and its value\n", "print(keys)\n", "print(values)\n", "print(items)" @@ -1136,7 +1136,7 @@ "menu = {\n", " \"Breakfast\": {\"Eggs\": 2.19, \"Toast\": 0.99, \"Orange Juice\": 1.99},\n", " \"Lunch\": {\"BLT\": 3.99, \"Chicken\": 5.99, \"Salad\": 4.50},\n", - " \"Dinner\": {\"Cheeseburger\": 9.99, \"Salad\": 7.50, \"Special\": 8.49}\n", + " \"Dinner\": {\"Cheeseburger\": 9.99, \"Salad\": 7.50, \"Special\": 8.49},\n", "}\n", "\n", "print(menu[\"Lunch\"])\n", @@ -1174,17 +1174,18 @@ "source": [ "def something(d):\n", " to_remove = []\n", - " \n", - " #d_copy = d.copy()\n", + "\n", + " # d_copy = d.copy()\n", " for k, v in d.items():\n", " if v < 50:\n", - " #d.pop(k)\n", + " # d.pop(k)\n", " to_remove.append(k)\n", - " \n", + "\n", " for item in to_remove:\n", " d.pop(item)\n", - " #...\n", - " \n", + " # ...\n", + "\n", + "\n", "scores = {\"A\": 100, \"B\": 20, \"C\": 48}\n", "something(scores)\n", "print(scores)" @@ -1205,7 +1206,7 @@ " to_remove.append(key)\n", "for key in to_remove:\n", " d.pop(key)\n", - " \n", + "\n", "print(d)" ] }, @@ -1232,7 +1233,7 @@ "below_60\n", "for name in below_60:\n", " students.pop(name)\n", - " \n", + "\n", "print(students)" ] }, @@ -1385,9 +1386,9 @@ "metadata": {}, "outputs": [], "source": [ - "#The following creates a set of single strings 'a','b','c','d','e'\n", + "# The following creates a set of single strings 'a','b','c','d','e'\n", "# and another set of single strings 'b','d','x','y','z'\n", - "A = set('abcde')\n", + "A = set(\"abcde\")\n", "B = set([\"b\", \"d\", \"x\", \"y\", \"z\"])\n", "\n", "print(\"A = \", A)\n", @@ -1406,11 +1407,11 @@ }, "outputs": [], "source": [ - "# Union Operation \n", - "new_set = A | B \n", + "# Union Operation\n", + "new_set = A | B\n", "print(new_set)\n", - "print('---')\n", - "new_set = A.union(B) # Same operation as above but using method \n", + "print(\"---\")\n", + "new_set = A.union(B) # Same operation as above but using method\n", "print(new_set)" ] }, @@ -1425,8 +1426,8 @@ }, "outputs": [], "source": [ - "# Difference Operation \n", - "new_set = A - B \n", + "# Difference Operation\n", + "new_set = A - B\n", "print(new_set)\n", "print(\"---\")\n", "new_set = B.difference(A) # note that order matters for difference\n", @@ -1444,11 +1445,11 @@ }, "outputs": [], "source": [ - "# Intersection Operation \n", - "new_set = A & B \n", + "# Intersection Operation\n", + "new_set = A & B\n", "print(new_set)\n", - "print('---')\n", - "new_set = A.intersection(B) # same operation as above but using method \n", + "print(\"---\")\n", + "new_set = A.intersection(B) # same operation as above but using method\n", "print(new_set)" ] }, @@ -1463,11 +1464,11 @@ }, "outputs": [], "source": [ - "# Symmetric Difference Operation \n", - "new_set = A ^ B \n", + "# Symmetric Difference Operation\n", + "new_set = A ^ B\n", "print(new_set)\n", - "print('---')\n", - "new_set = A.symmetric_difference(B) # same operation as above but using method \n", + "print(\"---\")\n", + "new_set = A.symmetric_difference(B) # same operation as above but using method\n", "print(new_set)" ] }, @@ -1557,7 +1558,7 @@ "outputs": [], "source": [ "s.discard(\"9\")\n", - "#print(\"Discarded Ace\")\n", + "# print(\"Discarded Ace\")\n", "print(s)" ] }, @@ -1585,8 +1586,16 @@ "print(s)\n", "\n", "\n", - "\n", - "\"Honda Civic\" in [\"Honda Civic\", \"Ford Focus\", \"Honda Civic\", \"Honda Civic\", \"Honda Civic\", \"Honda Civic\", \"Honda Civic\", \"Escalade\"]" + "\"Honda Civic\" in [\n", + " \"Honda Civic\",\n", + " \"Ford Focus\",\n", + " \"Honda Civic\",\n", + " \"Honda Civic\",\n", + " \"Honda Civic\",\n", + " \"Honda Civic\",\n", + " \"Honda Civic\",\n", + " \"Escalade\",\n", + "]" ] }, { @@ -1642,7 +1651,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "students = [\n", " {\"name\": \"adam\", \"num\": 123},\n", " {\"name\": \"quynh\", \"num\": 456},\n", @@ -1720,7 +1728,7 @@ "\n", "print(nested)\n", "\n", - "#frozen_nums.add(4)" + "# frozen_nums.add(4)" ] }, { @@ -1837,7 +1845,7 @@ "# str\n", "s = \"Hello\"\n", "s = s + \" World\"\n", - "s \n", + "s\n", "\n", "# how did s change?" ] @@ -2272,7 +2280,7 @@ "outputs": [], "source": [ "x = \"MPCS\"\n", - "print(id(x)) # Unique integer-value for the object pointed by x" + "print(id(x)) # Unique integer-value for the object pointed by x" ] }, { @@ -2292,10 +2300,10 @@ } ], "source": [ - "fruit1 = ('Apples', 4)\n", - "fruit2 = ('Apples', 4)\n", + "fruit1 = (\"Apples\", 4)\n", + "fruit2 = (\"Apples\", 4)\n", "fruit3 = fruit2\n", - "print(f'Fruit1 id = {id(fruit1)} \\n Fruit2 id = {id(fruit2)}')\n", + "print(f\"Fruit1 id = {id(fruit1)} \\n Fruit2 id = {id(fruit2)}\")\n", "print(f\"Fruit3 id= {id(fruit3)}\")" ] }, @@ -2335,7 +2343,7 @@ "\n", "print(id(a))\n", "print(id(b))\n", - "print(\"a is b\", a is b) # The id values are different " + "print(\"a is b\", a is b) # The id values are different" ] }, { @@ -2442,14 +2450,14 @@ "b = 1000\n", "\n", "# Two different objects, two different ids.\n", - "print(a is b) \n", + "print(a is b)\n", "\n", - "#a = 100\n", - "#b = 100\n", + "# a = 100\n", + "# b = 100\n", "\n", - "# However, for small integer objects, CPython caches them \n", - "# this means that a and b point to the same object \n", - "#print(a is b)\n", + "# However, for small integer objects, CPython caches them\n", + "# this means that a and b point to the same object\n", + "# print(a is b)\n", "\n", "for i in range(200, 300):\n", " print(i, i is i)" @@ -2484,11 +2492,11 @@ } ], "source": [ - "# CPython does the same for short strings \n", - "str1 = 'MPCS' * 100\n", - "str2 = 'MPCS' * 100\n", + "# CPython does the same for short strings\n", + "str1 = \"MPCS\" * 100\n", + "str2 = \"MPCS\" * 100\n", "print(id(str1), id(str2))\n", - "str1 is str2 " + "str1 is str2" ] }, { @@ -2548,17 +2556,17 @@ } ], "source": [ - "# shallow copy example \n", + "# shallow copy example\n", "\n", "x = [[1, 2], [3, 4]]\n", "y = x.copy() # or copy.copy(x)\n", "\n", "print(\"x is y\", x is y)\n", - "print(\"x[0] is y[0]\", x[0] is y[0]) \n", + "print(\"x[0] is y[0]\", x[0] is y[0])\n", "\n", - "#print(x, y)\n", + "# print(x, y)\n", "x[0].append(5)\n", - "print(x, \"\\n\", y)\n" + "print(x, \"\\n\", y)" ] }, { @@ -2582,6 +2590,7 @@ "source": [ "# deep copy\n", "import copy\n", + "\n", "# copy.copy(obj) --> same as obj.copy()\n", "z = copy.deepcopy(x)\n", "print(\"x[0] is z[0]\", x[0] is z[0])" @@ -2980,7 +2989,7 @@ "emails = []\n", "with open(\"data/emails.txt\") as f:\n", " for email in f:\n", - " emails.append(email) \n", + " emails.append(email)\n", "print(emails)" ] }, @@ -3010,10 +3019,10 @@ "with open(\"data/cnetids.txt\", \"w\") as f:\n", " for cnet_id in cnet_ids:\n", " # print() adds newlines by default\n", - " print(cnet_id, file=f) \n", + " print(cnet_id, file=f)\n", " # or\n", - " #f.write(cnet_id + \"\\n\")\n", - " \n", + " # f.write(cnet_id + \"\\n\")\n", + "\n", "!cat data/cnetids.txt" ] }, diff --git a/pyproject.toml b/pyproject.toml index 3cb1836..b3dac93 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,4 +6,5 @@ readme = "README.md" requires-python = ">=3.10" dependencies = [ "jupyter>=1.1.1", + "ruff>=0.6.8", ] diff --git a/uv.lock b/uv.lock index 2d6aede..e0ee290 100644 --- a/uv.lock +++ b/uv.lock @@ -7,10 +7,14 @@ version = "0.1.0" source = { virtual = "." } dependencies = [ { name = "jupyter" }, + { name = "ruff" }, ] [package.metadata] -requires-dist = [{ name = "jupyter", specifier = ">=1.1.1" }] +requires-dist = [ + { name = "jupyter", specifier = ">=1.1.1" }, + { name = "ruff", specifier = ">=0.6.8" }, +] [[package]] name = "anyio" @@ -1335,6 +1339,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d2/ea/6f121d1802f3adae1981aea4209ea66f9d3c7f2f6d6b85ef4f13a61d17ef/rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989", size = 213529 }, ] +[[package]] +name = "ruff" +version = "0.6.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/74/f9/4ce3e765a72ab8fe0f80f48508ea38b4196daab3da14d803c21349b2d367/ruff-0.6.8.tar.gz", hash = "sha256:a5bf44b1aa0adaf6d9d20f86162b34f7c593bfedabc51239953e446aefc8ce18", size = 3084543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/07/42ee57e8b76ca585297a663a552b4f6d6a99372ca47fdc2276ef72cc0f2f/ruff-0.6.8-py3-none-linux_armv6l.whl", hash = "sha256:77944bca110ff0a43b768f05a529fecd0706aac7bcce36d7f1eeb4cbfca5f0f2", size = 10404327 }, + { url = "https://files.pythonhosted.org/packages/eb/51/d42571ff8156d65086acb72d39aa64cb24181db53b497d0ed6293f43f07a/ruff-0.6.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27b87e1801e786cd6ede4ada3faa5e254ce774de835e6723fd94551464c56b8c", size = 10018797 }, + { url = "https://files.pythonhosted.org/packages/c1/d7/fa5514a60b03976af972b67fe345deb0335dc96b9f9a9fa4df9890472427/ruff-0.6.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cd48f945da2a6334f1793d7f701725a76ba93bf3d73c36f6b21fb04d5338dcf5", size = 9691303 }, + { url = "https://files.pythonhosted.org/packages/d6/c4/d812a74976927e51d0782a47539069657ac78535779bfa4d061c4fc8d89d/ruff-0.6.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:677e03c00f37c66cea033274295a983c7c546edea5043d0c798833adf4cf4c6f", size = 10719452 }, + { url = "https://files.pythonhosted.org/packages/ec/b6/aa700c4ae6db9b3ee660e23f3c7db596e2b16a3034b797704fba33ddbc96/ruff-0.6.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f1476236b3eacfacfc0f66aa9e6cd39f2a624cb73ea99189556015f27c0bdeb", size = 10161353 }, + { url = "https://files.pythonhosted.org/packages/ea/39/0b10075ffcd52ff3a581b9b69eac53579deb230aad300ce8f9d0b58e77bc/ruff-0.6.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f5a2f17c7d32991169195d52a04c95b256378bbf0de8cb98478351eb70d526f", size = 10980630 }, + { url = "https://files.pythonhosted.org/packages/c1/af/9eb9efc98334f62652e2f9318f137b2667187851911fac3b395365a83708/ruff-0.6.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5fd0d4b7b1457c49e435ee1e437900ced9b35cb8dc5178921dfb7d98d65a08d0", size = 11768996 }, + { url = "https://files.pythonhosted.org/packages/e0/59/8b1369cf7878358952b1c0a1559b4d6b5c824c003d09b0db26d26c9d094f/ruff-0.6.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8034b19b993e9601f2ddf2c517451e17a6ab5cdb1c13fdff50c1442a7171d87", size = 11317469 }, + { url = "https://files.pythonhosted.org/packages/b9/6d/e252e9b11bbca4114c386ee41ad559d0dac13246201d77ea1223c6fea17f/ruff-0.6.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6cfb227b932ba8ef6e56c9f875d987973cd5e35bc5d05f5abf045af78ad8e098", size = 12467185 }, + { url = "https://files.pythonhosted.org/packages/48/44/7caa223af7d4ea0f0b2bd34acca65a7694a58317714675a2478815ab3f45/ruff-0.6.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef0411eccfc3909269fed47c61ffebdcb84a04504bafa6b6df9b85c27e813b0", size = 10887766 }, + { url = "https://files.pythonhosted.org/packages/81/ed/394aff3a785f171869158b9d5be61eec9ffb823c3ad5d2bdf2e5f13cb029/ruff-0.6.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:007dee844738c3d2e6c24ab5bc7d43c99ba3e1943bd2d95d598582e9c1b27750", size = 10711609 }, + { url = "https://files.pythonhosted.org/packages/47/31/f31d04c842e54699eab7e3b864538fea26e6c94b71806cd10aa49f13e1c1/ruff-0.6.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ce60058d3cdd8490e5e5471ef086b3f1e90ab872b548814e35930e21d848c9ce", size = 10237621 }, + { url = "https://files.pythonhosted.org/packages/20/95/a764e84acf11d425f2f23b8b78b4fd715e9c20be4aac157c6414ca859a67/ruff-0.6.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1085c455d1b3fdb8021ad534379c60353b81ba079712bce7a900e834859182fa", size = 10558329 }, + { url = "https://files.pythonhosted.org/packages/2a/76/d4e38846ac9f6dd62dce858a54583911361b5339dcf8f84419241efac93a/ruff-0.6.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:70edf6a93b19481affd287d696d9e311388d808671bc209fb8907b46a8c3af44", size = 10954102 }, + { url = "https://files.pythonhosted.org/packages/e7/36/f18c678da6c69f8d022480f3e8ddce6e4a52e07602c1d212056fbd234f8f/ruff-0.6.8-py3-none-win32.whl", hash = "sha256:792213f7be25316f9b46b854df80a77e0da87ec66691e8f012f887b4a671ab5a", size = 8511090 }, + { url = "https://files.pythonhosted.org/packages/4c/c4/0ca7d8ffa358b109db7d7d045a1a076fd8e5d9cbeae022242d3c060931da/ruff-0.6.8-py3-none-win_amd64.whl", hash = "sha256:ec0517dc0f37cad14a5319ba7bba6e7e339d03fbf967a6d69b0907d61be7a263", size = 9350079 }, + { url = "https://files.pythonhosted.org/packages/d9/bd/a8b0c64945a92eaeeb8d0283f27a726a776a1c9d12734d990c5fc7a1278c/ruff-0.6.8-py3-none-win_arm64.whl", hash = "sha256:8d3bb2e3fbb9875172119021a13eed38849e762499e3cfde9588e4b4d70968dc", size = 8669595 }, +] + [[package]] name = "send2trash" version = "1.8.3"