From 7668d6412af57d1710f77d1704ca4d3637ee1a60 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 Dec 2025 19:05:41 +0000 Subject: [PATCH 1/3] Update dependency pandas to v3 --- pyproject.toml | 2 +- uv.lock | 45 +++++++++++++++++++-------------------------- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2529f2b..b7d4ba3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "DraftKings lineup optimizer using linear programming" readme = "README.md" requires-python = ">=3.14" dependencies = [ - "pandas==2.3.3", + "pandas==3.0.0rc0", "pulp==3.3.0", "pydantic==2.12.5", "pytest==9.0.1", diff --git a/uv.lock b/uv.lock index fc6cd24..e43f444 100644 --- a/uv.lock +++ b/uv.lock @@ -34,7 +34,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "pandas", specifier = "==2.3.3" }, + { name = "pandas", specifier = "==3.0.0rc0" }, { name = "pulp", specifier = "==3.3.0" }, { name = "pydantic", specifier = "==2.12.5" }, { name = "pytest", specifier = "==9.0.1" }, @@ -91,29 +91,31 @@ wheels = [ [[package]] name = "pandas" -version = "2.3.3" +version = "3.0.0rc0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, - { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3c/ff/75db8b415d580e9125afdbb4aa4a480935ddc071dfc30d0a2a668e3cebcf/pandas-3.0.0rc0.tar.gz", hash = "sha256:ac699b803f83f54c877fe11f0e563c5862808ff08471d64281ecd13056207ca4", size = 4578499, upload-time = "2025-12-03T17:39:45.922Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, - { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, - { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, - { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, - { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, - { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, - { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, - { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, - { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, - { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, - { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, - { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2d/d1358d1b3bd536a627978bc47680842f978e830973c04aecd9dff69a1f18/pandas-3.0.0rc0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f774899a765dcdf70d30acdfa50fc44d67823780b4cc8c2c786972d277752d92", size = 10240052, upload-time = "2025-12-03T17:39:02.286Z" }, + { url = "https://files.pythonhosted.org/packages/d8/b0/a57545a65a0887de8022076be3b693e674823670348dce2f7b1ff2fdd708/pandas-3.0.0rc0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:038bac85bd72d5c85f07debc2a0a7b6d4b360d3ccc85ace88489cfdde2540222", size = 9831743, upload-time = "2025-12-03T17:39:05.599Z" }, + { url = "https://files.pythonhosted.org/packages/76/4d/86b2c9e1abc5051cf4156337e2d3b731f5a6d0246c16fe334356414eaa63/pandas-3.0.0rc0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25372deea9aa09505b499935eb22deb983ec15d8c47db3f4d2ccafd3bd0ac59f", size = 10366146, upload-time = "2025-12-03T17:39:08.192Z" }, + { url = "https://files.pythonhosted.org/packages/3f/63/2cc48e498efb7760177615d95186bbf4f8d1e4cd71d34161d34142148809/pandas-3.0.0rc0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9a603cde08e4d696aabe37bc0bd3217b353b6af034b05391f80a4a1cf8edc8b7", size = 10817133, upload-time = "2025-12-03T17:39:10.574Z" }, + { url = "https://files.pythonhosted.org/packages/93/f5/a4f91e0069b1c8736ec8a483d1c53b91255c56e71a075b6e9ebefe7f11dc/pandas-3.0.0rc0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fdeaded87fa1b1110f2853d5df10f1ec4aede5f4deb5f9f72d5e19773e28851e", size = 11386197, upload-time = "2025-12-03T17:39:13.04Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ea/59bdc72092a8111db1f63689f36c48dcfc6252f5c4a009db72b12375e171/pandas-3.0.0rc0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b6c88cc5818a2067917b3992e49d94339ccd017650105511fc64bd04197a24e1", size = 11876375, upload-time = "2025-12-03T17:39:15.996Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ef/81e726c3479262c9c158639a99585027c6e43555241ec71587e43a3b5761/pandas-3.0.0rc0-cp314-cp314-win_amd64.whl", hash = "sha256:7b4ba5f9905ed21ad0986766bbbbd3284f2d6502a982d2e26bc5a631bf8bd490", size = 9784104, upload-time = "2025-12-03T17:39:19.556Z" }, + { url = "https://files.pythonhosted.org/packages/f2/82/e741a45fbdc22babe13d35108aeda21633525a5d5aa6c9f61b84be352003/pandas-3.0.0rc0-cp314-cp314-win_arm64.whl", hash = "sha256:0225e7097af5c22b81dbb4a9b763a338b5996a36f968ed2a53723c50f0983f05", size = 9111186, upload-time = "2025-12-03T17:39:22.731Z" }, + { url = "https://files.pythonhosted.org/packages/dc/0c/68b1f5a8ac1f48cd318920847b784ec0c7f1908770c3847817abe68fcfa9/pandas-3.0.0rc0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bb900f2d6ead5ec4a5a0a0a2cd50eb359d649728369f25bf53a293164cfacac0", size = 10696022, upload-time = "2025-12-03T17:39:25.432Z" }, + { url = "https://files.pythonhosted.org/packages/f6/c0/915da92032a40b8a8a934461e3934df6c2c94978614ef35d82c930dc81e8/pandas-3.0.0rc0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1bcadb130766deea257657d1e25dee8d932eb05309609332305383077432eeea", size = 10341891, upload-time = "2025-12-03T17:39:27.728Z" }, + { url = "https://files.pythonhosted.org/packages/32/39/e9897c5d3dfe598ad57d2444a0db0a7c8b307fc05af63cb1a1eef1818595/pandas-3.0.0rc0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:706ba5fad118ffcb29ae73f4a5da02099a7395e8205f0c3dd2a4a6f475903b00", size = 10248828, upload-time = "2025-12-03T17:39:30.543Z" }, + { url = "https://files.pythonhosted.org/packages/5f/0e/90baf33742c1b9473d6b658c816e85a1b3ce256f8455c17a27831dd61b46/pandas-3.0.0rc0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c86a5477c41ebaca5dcdeff9eaaf5553122c3fd69a739d33da383807502adf4", size = 10659420, upload-time = "2025-12-03T17:39:32.941Z" }, + { url = "https://files.pythonhosted.org/packages/59/01/2993fcfcbe6a145d178036d3f3670334ef468a5cb4337c8edc3a533fe16c/pandas-3.0.0rc0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9285d332011b8bbb1a340d5037ba7f6764d9e5e9a43c8c6c328f40c8600fc017", size = 11268786, upload-time = "2025-12-03T17:39:35.21Z" }, + { url = "https://files.pythonhosted.org/packages/44/08/7043f2577874573ce3549e19477b6f83543087b1ca0d87740ba0f1a0450c/pandas-3.0.0rc0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1116e344fbc806f58c5a20ae605b05a1f7f3785856db8b0568df405eace348b5", size = 11731291, upload-time = "2025-12-03T17:39:37.549Z" }, + { url = "https://files.pythonhosted.org/packages/49/c2/a31d18862f8e7843587b76e327dc8ec732e09e026dd2afe1665004222750/pandas-3.0.0rc0-cp314-cp314t-win_amd64.whl", hash = "sha256:eed419f07d5cf00d4364ba27cf9e8235ec7d9ae8e4e9abb638eefac31bcdb9c2", size = 10805153, upload-time = "2025-12-03T17:39:40.588Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/7318be6ab4387788526aab39bedb2495a5653f0e6386a897709776820eab/pandas-3.0.0rc0-cp314-cp314t-win_arm64.whl", hash = "sha256:d9e45f1263c822c4cc2621cbd548904a6a126b305a90ea64770218787b94736c", size = 9375935, upload-time = "2025-12-03T17:39:42.969Z" }, ] [[package]] @@ -225,15 +227,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] -[[package]] -name = "pytz" -version = "2025.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, -] - [[package]] name = "ruff" version = "0.14.7" From f09678ff891eeaa849e4f9760e5d8dbee8744890 Mon Sep 17 00:00:00 2001 From: Matt Busche Date: Wed, 3 Dec 2025 21:08:38 -0600 Subject: [PATCH 2/3] Fix updates in pandas --- main.py | 4 ++-- tests/test_things.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/main.py b/main.py index 1424b7f..07f4f3b 100644 --- a/main.py +++ b/main.py @@ -344,8 +344,8 @@ def generate_lineup_files( # Truncate all string columns to 12 characters for printing for col in combined_df_print.columns: - if combined_df_print[col].dtype == 'object': - combined_df_print.loc[:, col] = combined_df_print[col].str[:12] + if pd.api.types.is_string_dtype(combined_df_print[col]) or combined_df_print[col].dtype == 'object': + combined_df_print.loc[:, col] = combined_df_print[col].astype(str).str[:12] print(combined_df_print.to_string(index=False, header=False)) diff --git a/tests/test_things.py b/tests/test_things.py index fb35bbe..605e829 100644 --- a/tests/test_things.py +++ b/tests/test_things.py @@ -111,7 +111,7 @@ def test_must_include_players(): # Check that Lamar Jackson appears in every lineup for _, row in df.iterrows(): - row_str = ','.join(row.astype(str)) + row_str = ','.join(row.map(str)) assert 'Lamar Jackson' in row_str, "Must-include player 'Lamar Jackson' not found in lineup" finally: if os.path.exists(output_file + '.csv'): @@ -155,7 +155,7 @@ def test_only_use_players(): # Parse the lineup to check that only specified players are used for _, row in df.iterrows(): - row_str = ','.join(row.astype(str)) + row_str = ','.join(row.map(str)) # Check for some players that should NOT be in the output assert 'Jayden Daniels' not in row_str, 'Player not in only_use list found in lineup' assert 'Joe Burrow' not in row_str, 'Player not in only_use list found in lineup' @@ -271,7 +271,7 @@ def test_exclude_players(): # Check that excluded players do not appear in any lineup for _, row in df.iterrows(): - row_str = ','.join(row.astype(str)) + row_str = ','.join(row.map(str)) for excluded_player in exclude: assert excluded_player not in row_str, f"Excluded player '{excluded_player}' found in lineup" finally: @@ -375,7 +375,7 @@ def test_unique_lineups_generated(): # Convert each row to a string and check for uniqueness lineup_strings = set() for _, row in df.iterrows(): - lineup_str = ','.join(row.astype(str)) + lineup_str = ','.join(row.map(str)) assert lineup_str not in lineup_strings, 'Duplicate lineup found' lineup_strings.add(lineup_str) finally: From eb16d5fd47989f0e71fbf79dcda8c2ecd21acef3 Mon Sep 17 00:00:00 2001 From: Matt Busche Date: Wed, 3 Dec 2025 21:12:04 -0600 Subject: [PATCH 3/3] speed up tests --- tests/test_things.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/tests/test_things.py b/tests/test_things.py index 605e829..d6171e4 100644 --- a/tests/test_things.py +++ b/tests/test_things.py @@ -7,7 +7,7 @@ from main import LineupConfig, OptimizationParams, calculate_lineups, generate_lineup_files, validate_players_data -@pytest.fixture(autouse=True) +@pytest.fixture(scope='module', autouse=True) def generate_files(): generate_lineup_files('./tests/draftkings.csv') @@ -19,15 +19,19 @@ def test_generate_lineup_files(): def test_generate_lineup_files_no_two_te(): - # The fixture runs before this test and creates two_te.csv, so remove it first - if os.path.exists('two_te.csv'): - os.remove('two_te.csv') + try: + # The fixture runs before this test and creates two_te.csv, so remove it first + if os.path.exists('two_te.csv'): + os.remove('two_te.csv') - generate_lineup_files('./tests/draftkings.csv', allow_two_te=False) + generate_lineup_files('./tests/draftkings.csv', allow_two_te=False) - assert os.path.exists('four_wr.csv') - assert os.path.exists('three_rb.csv') - assert not os.path.exists('two_te.csv') + assert os.path.exists('four_wr.csv') + assert os.path.exists('three_rb.csv') + assert not os.path.exists('two_te.csv') + finally: + # Restore files for other tests since fixture is now module scoped + generate_lineup_files('./tests/draftkings.csv') def test_four_wr():