From 154490d3953eeba9f0921961dbb24ffde15339c8 Mon Sep 17 00:00:00 2001 From: Dawn1Ocean <1785590531@qq.com> Date: Mon, 13 Oct 2025 23:11:25 +0800 Subject: [PATCH] uv support; refactor of utils.py; fix: want_num --- .python-version | 1 + main.py | 6 +- pyproject.toml | 12 ++ solve.py | 14 +- utils.py | 117 ++++++------- uv.lock | 326 +++++++++++++++++++++++++++++++++++++ 问卷星结果_较极端样例.xlsx | Bin 0 -> 26348 bytes 7 files changed, 410 insertions(+), 66 deletions(-) create mode 100644 .python-version create mode 100644 pyproject.toml create mode 100644 uv.lock create mode 100644 问卷星结果_较极端样例.xlsx diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/main.py b/main.py index 8db6e47..ca54480 100644 --- a/main.py +++ b/main.py @@ -299,6 +299,8 @@ class MyWidget(QtWidgets.QWidget): min_prefer = min(min_prefer, prefer_num) self.text_solve.append(f"\t所有班次中最少拥有意愿数:{min_prefer}") + vars = [] + if self._auto_mode: self.text_solve.append(f"自动调参开始...") @@ -475,7 +477,7 @@ class MyWidget(QtWidgets.QWidget): self.text_solve.append("参数:") self.text_solve.append(f"\t每班人数:[{num_min}, {num_max}]") self.text_solve.append(f"\t每班电脑或电器的老人数:[{tech_old_min_num}, {tech_old_max_num}]") - self.text_solve.append(f"\t每班老人数:[{_num_old_min}, {num_old_max}]") + self.text_solve.append(f"\t每班老人数:[{num_old_min}, {num_old_max}]") self.text_solve.append(f"\t每班人资部小朋友数:[{num_hr_min}, {num_hr_max}]") self.text_solve.append(f"\t每班小朋友数:[{num_new_min}, inf]") @@ -509,7 +511,7 @@ class MyWidget(QtWidgets.QWidget): time_str = datetime.now().strftime('%Y%m%d_%H%M%S') save_dir = f"result_{time_str}.xlsx" if vars is not None: - save_to_excel(vars, all_data, index_to_name_dict, preference_mat, save_dir) + save_to_excel(vars, all_data, index_to_name_dict, save_dir) self.text_solve.append(f"保存结果成功!保存路径:{save_dir}") except Exception as e: self.text_solve.append("程序出现严重错误,请联系开发者解决问题!!!") diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8936f77 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,12 @@ +[project] +name = "eva-duty-arrange-tool" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "openpyxl>=3.1.5", + "ortools>=9.14.6206", + "pandas>=2.3.3", + "pyside6>=6.10.0", +] diff --git a/solve.py b/solve.py index 61e3fc7..0396587 100644 --- a/solve.py +++ b/solve.py @@ -1,6 +1,4 @@ -from ortools.sat.python import cp_model from ortools.linear_solver import pywraplp -from utils import read_excel, save_to_excel def solve_program(preference_mat:list, want_num_array:list, @@ -33,7 +31,7 @@ def solve_program(preference_mat:list, avg_num = sum(want_num_array) / M # 每班次的平均人数 print(f"平均人数:{avg_num}") - variables = [] + variables = [] aux_vars = [] # 辅助变量 infinity = solver.infinity() for i in range(N): @@ -55,12 +53,16 @@ def solve_program(preference_mat:list, # 辅助变量添加约束: for j in range(M): actual_num = sum(variables[i][j] for i in range(N)) # 每班次的实际人数 - solver.Add(aux_vars[j] >= actual_num-avg_num) - solver.Add(aux_vars[j] >= avg_num-actual_num) + solver.Add(aux_vars[j] >= actual_num - avg_num) + solver.Add(aux_vars[j] >= avg_num - actual_num) # 添加约束:满足每位同学的意愿班次 for i in range(N): - solver.Add(sum(variables[i]) == want_num_array[i]) + if want_num_array[i] == 3: + solver.Add(sum(variables[i]) <= 3) + solver.Add(sum(variables[i]) >= 2) + else: + solver.Add(sum(variables[i]) == want_num_array[i]) # 添加约束:每个班次至少有?位同学 if num_min is not None: diff --git a/utils.py b/utils.py index 3ac0743..b330b93 100644 --- a/utils.py +++ b/utils.py @@ -2,6 +2,21 @@ import pandas as pd from datetime import datetime import random +# 对于表格每一列: +# i = 1 -> 时间戳 +# i = 6 -> 姓名 +# i = 7 -> 部门编号 +# i = 8 -> 老人 / 小朋友 +# i = 9~28 -> 共 20 个班次,每个班次的意愿度 +# i = 29 -> 想要值班的次数 +col_timestamp = 1 +col_name = 6 +col_department = 7 +col_member = 8 +col_dutystart = 9 +col_dutyend = 28 +col_dutyfreq = 29 + index_to_departments = { # 部门编号和部门名称的对应关系 1: "电脑部", 2: "电器部", @@ -10,7 +25,7 @@ index_to_departments = { # 部门编号和部门名称的对应关系 5: "文宣部" } -index_to_type = { # 老人/小朋友和对应的编号 +index_to_type = { # 老人 / 小朋友和对应的编号 1: "老人", 2: "小朋友" } @@ -19,62 +34,47 @@ def read_excel(file_path): # 读取 Excel 文件 df = pd.read_excel(file_path) - # 待返回的所有信息。下令 N 为学生人数,M 为班次数 + # 待返回的所有信息。N 为学生人数,M 为班次数 index_to_name_dict = {} # 长度为 N 的字典,包含数组下标和学生姓名的对应关系 preference_mat = [] # N x M 的二维数组,表示每位学生对每个班次的满意度 want_num_array = [] # 长度为 N 的数组,表示每位学生想要值班的次数 is_new_array = [] # 长度为 N 的数组,表示每位学生是否是小朋友 - is_tech_array = [] # 长度为 N 的数组,表示每位学生是否是电脑部或电器部成员 + is_tech_array = [] # 长度为 N 的数组,表示每位学生是否是电脑部或电器部成员 is_hr_array = [] # 长度为 N 的数组,表示每位学生是否是人资部成员 ''' - 遍历每一行,对于每一行: - i=1 -> 时间戳 - i=6 -> 姓名 - i=7 -> 部门编号 - i=8 -> 老人/小朋友 - i=9~28 -> 共20个班次,每个班次的意愿度 - i=29 -> 想要值班的次数 - 考虑到原始填表信息中可能有某位同学多次提交的记录,先过滤一下冗余信息 ''' all_data = {} # 储存过滤后的数据 + format = "%Y/%m/%d %H:%M:%S" for index, row in df.iterrows(): # 读取学生姓名,比较时间戳 - name = row[6] - format = "%Y/%m/%d %H:%M:%S" - time_this = datetime.strptime(row[1], format) - if (name not in all_data) or (time_this > datetime.strptime(all_data[name][1], format)): - info_list = df.iloc[index].tolist() + name = row[col_name] + time_this = datetime.strptime(row[col_timestamp], format) + if (name not in all_data) or (time_this > datetime.strptime(all_data[name][col_timestamp], format)): + info_list = row.tolist() all_data[name] = info_list # 遍历过滤后的数据,组建待返回的信息 for index, (name, info_list) in enumerate(all_data.items()): # 学生姓名 index_to_name_dict[index] = name - # 意愿度 - preference = info_list[9:29] - preference_mat.append(preference) - + preference_mat.append(info_list[col_dutystart:col_dutyend + 1]) # 想要值班的次数 - want_num = info_list[29] - want_num_array.append(want_num) - + want_num_array.append(info_list[col_dutyfreq]) # 是否是小朋友 - is_new_array.append(index_to_type[info_list[8]] == "小朋友") - + is_new_array.append(index_to_type[info_list[col_member]] == "小朋友") # 是否是电脑部或电器部成员 - is_tech_array.append(index_to_departments[info_list[7]] in ["电脑部", "电器部"]) - - # 是否是电脑部或电器部成员 - is_hr_array.append(index_to_departments[info_list[7]] == "人资部") + is_tech_array.append(index_to_departments[info_list[col_department]] in ["电脑部", "电器部"]) + # 是否是人资部成员 + is_hr_array.append(index_to_departments[info_list[col_department]] == "人资部") return all_data, index_to_name_dict, preference_mat, want_num_array, is_new_array, is_tech_array, is_hr_array -def save_to_excel(variables, all_data, index_to_name_dict, preference_mat, file_path): +def save_to_excel(variables, all_data, index_to_name_dict, file_path): - # 用一个list储存每一班的值班人员,该list中每个元素是一个存有若干dict的list,每个dict表示某一班的某一值班人员信息 + # 用一个 list 储存每一班的值班人员,该 list 中每个元素是一个存有若干 dict 的 list,每个 dict 表示某一班的某一值班人员信息 all_result = [] max_single_class_num = 0 # 用于记录最大的班次人数,以便后写入 excel for j in range(len(variables[0])): @@ -89,32 +89,32 @@ def save_to_excel(variables, all_data, index_to_name_dict, preference_mat, file_ if variables[i][j] == 1: single_stu_info = {} single_stu_info["name"] = index_to_name_dict[i] - single_stu_info["department"] = all_data[index_to_name_dict[i]][7] - single_stu_info["type"] = all_data[index_to_name_dict[i]][8] - single_stu_info["duty_head"] = False + single_stu_info["department"] = index_to_departments[all_data[index_to_name_dict[i]][col_department]] + single_stu_info["type"] = index_to_type[all_data[index_to_name_dict[i]][col_member]] + single_stu_info["duty_monitor"] = False on_duty_list.append(single_stu_info) single_class_num += 1 all_index.append(_cnt) - if index_to_type[single_stu_info["type"]] == "小朋友": + if single_stu_info["type"] == "小朋友": new_index.append(_cnt) - if single_stu_info["department"] in [3,4,5]: + if single_stu_info["department"] in ["人资部", "财外部", "文宣部"]: none_tech_new_index.append(_cnt) if single_stu_info["department"] == 3: hr_new_index.append(_cnt) _cnt += 1 - # 为每一班的值班人员中的值班组长打上标记 - duty_head_index = -1 + # 为每一班的值班组长打上标记 + duty_monitor_index = -1 if hr_new_index: - duty_head_index = random.choice(hr_new_index) + duty_monitor_index = random.choice(hr_new_index) elif none_tech_new_index: - duty_head_index = random.choice(none_tech_new_index) + duty_monitor_index = random.choice(none_tech_new_index) elif new_index: - duty_head_index = random.choice(new_index) + duty_monitor_index = random.choice(new_index) else: - duty_head_index = random.choice(all_index) - on_duty_list[duty_head_index]["duty_head"] = True + duty_monitor_index = random.choice(all_index) + on_duty_list[duty_monitor_index]["duty_monitor"] = True on_duty_list = sorted(on_duty_list, key=lambda x: x["department"]) # 按部门编号升序排序 all_result.append(on_duty_list) @@ -122,11 +122,13 @@ def save_to_excel(variables, all_data, index_to_name_dict, preference_mat, file_ from openpyxl import Workbook - from openpyxl.styles import Font, Alignment, Border, Side, PatternFill + from openpyxl.styles import PatternFill # 创建一个新的工作簿 wb = Workbook() ws = wb.active + if ws is None: + ws = wb.create_sheet(title="Sheet1") # 写入表头 width = 25 @@ -146,25 +148,24 @@ def save_to_excel(variables, all_data, index_to_name_dict, preference_mat, file_ ws.column_dimensions['H'].width = width start_index = [] - ws.merge_cells(f'A2:A{2+max_single_class_num}') + ws.merge_cells(f'A2:A{2 + max_single_class_num}') ws['A2'] = "第一班" start_index.append(2) - ws.merge_cells(f'A{2+max_single_class_num+1}:A{2+2*max_single_class_num+1}') - ws[f'A{2+max_single_class_num+1}'] = "第二班" - start_index.append(2+max_single_class_num+1) - ws.merge_cells(f'A{2+2*max_single_class_num+2}:A{2+3*max_single_class_num+2}') - ws[f'A{2+2*max_single_class_num+2}'] = "第三班" - start_index.append(2+2*max_single_class_num+2) + ws.merge_cells(f'A{2 + max_single_class_num + 1}:A{2 + 2 * max_single_class_num + 1}') + ws[f'A{2 + max_single_class_num + 1}'] = "第二班" + start_index.append(2 + max_single_class_num + 1) + ws.merge_cells(f'A{2 + 2 * max_single_class_num + 2}:A{2 + 3 * max_single_class_num + 2}') + ws[f'A{2 + 2 * max_single_class_num + 2}'] = "第三班" + start_index.append(2 + 2 * max_single_class_num + 2) for duty_index, duty in enumerate(all_result): for stu_index, stu in enumerate(duty): - col = chr(ord('B')+duty_index//3) - row = start_index[duty_index%3]+stu_index - str_info = f"{stu['name']} {index_to_departments[stu['department']]} {index_to_type[stu['type']]}" - if stu['duty_head']: - ws[col+str(row)].fill = PatternFill(fill_type='solid', start_color='FFFF00', end_color='FFFF00') - ws[col+str(row)] = str_info - + col = chr(ord('B') + duty_index // 3) + row = start_index[duty_index % 3] + stu_index + str_info = f"{stu['name']} {stu['department']} {stu['type']}" + if stu['duty_monitor']: + ws[col + str(row)].fill = PatternFill(fill_type='solid', start_color='FFFF00', end_color='FFFF00') + ws[col + str(row)] = str_info # 保存文件 wb.save(file_path) \ No newline at end of file diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..c71e238 --- /dev/null +++ b/uv.lock @@ -0,0 +1,326 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "absl-py" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/2a/c93173ffa1b39c1d0395b7e842bbdc62e556ca9d8d3b5572926f3e4ca752/absl_py-2.3.1.tar.gz", hash = "sha256:a97820526f7fbfd2ec1bce83f3f25e3a14840dac0d8e02a0b71cd75db3f77fc9", size = 116588, upload-time = "2025-07-03T09:31:44.05Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/aa/ba0014cc4659328dc818a28827be78e6d97312ab0cb98105a770924dc11e/absl_py-2.3.1-py3-none-any.whl", hash = "sha256:eeecf07f0c2a93ace0772c92e596ace6d3d3996c042b2128459aaae2a76de11d", size = 135811, upload-time = "2025-07-03T09:31:42.253Z" }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, +] + +[[package]] +name = "eva-duty-arrange-tool" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "openpyxl" }, + { name = "ortools" }, + { name = "pandas" }, + { name = "pyside6" }, +] + +[package.metadata] +requires-dist = [ + { name = "openpyxl", specifier = ">=3.1.5" }, + { name = "ortools", specifier = ">=9.14.6206" }, + { name = "pandas", specifier = ">=2.3.3" }, + { name = "pyside6", specifier = ">=6.10.0" }, +] + +[[package]] +name = "immutabledict" +version = "4.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/12/1da8e1a9050d0603ba65fb1796ed8860a705b906701c96e77f85cc7490be/immutabledict-4.2.2.tar.gz", hash = "sha256:cb6ed3090df593148f94cb407d218ca526fd2639694afdb553dc4f50ce6feeca", size = 6099, upload-time = "2025-10-12T13:32:59.755Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/7b/04ab6afa1ff7eb9ccb09049918c0407b205f5009092c0416147d163e4e2b/immutabledict-4.2.2-py3-none-any.whl", hash = "sha256:97c31d098a2c850e93a958badeef765e4736ed7942ec73e439facd764a3a7217", size = 4736, upload-time = "2025-10-12T13:32:58.326Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648, upload-time = "2025-09-09T16:54:12.543Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014, upload-time = "2025-09-09T15:56:29.966Z" }, + { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220, upload-time = "2025-09-09T15:56:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918, upload-time = "2025-09-09T15:56:34.175Z" }, + { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922, upload-time = "2025-09-09T15:56:36.149Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991, upload-time = "2025-09-09T15:56:40.548Z" }, + { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643, upload-time = "2025-09-09T15:56:43.343Z" }, + { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787, upload-time = "2025-09-09T15:56:46.141Z" }, + { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598, upload-time = "2025-09-09T15:56:49.844Z" }, + { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800, upload-time = "2025-09-09T15:56:52.499Z" }, + { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615, upload-time = "2025-09-09T15:56:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936, upload-time = "2025-09-09T15:56:56.541Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588, upload-time = "2025-09-09T15:56:59.087Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802, upload-time = "2025-09-09T15:57:01.73Z" }, + { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537, upload-time = "2025-09-09T15:57:03.765Z" }, + { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743, upload-time = "2025-09-09T15:57:07.921Z" }, + { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881, upload-time = "2025-09-09T15:57:11.349Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301, upload-time = "2025-09-09T15:57:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645, upload-time = "2025-09-09T15:57:16.534Z" }, + { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179, upload-time = "2025-09-09T15:57:18.883Z" }, + { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250, upload-time = "2025-09-09T15:57:21.296Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269, upload-time = "2025-09-09T15:57:23.034Z" }, + { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314, upload-time = "2025-09-09T15:57:25.045Z" }, + { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025, upload-time = "2025-09-09T15:57:27.257Z" }, + { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053, upload-time = "2025-09-09T15:57:30.077Z" }, + { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444, upload-time = "2025-09-09T15:57:32.733Z" }, + { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039, upload-time = "2025-09-09T15:57:34.328Z" }, + { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314, upload-time = "2025-09-09T15:57:36.255Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722, upload-time = "2025-09-09T15:57:38.622Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755, upload-time = "2025-09-09T15:57:41.16Z" }, + { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560, upload-time = "2025-09-09T15:57:43.459Z" }, + { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776, upload-time = "2025-09-09T15:57:45.793Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281, upload-time = "2025-09-09T15:57:47.492Z" }, + { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275, upload-time = "2025-09-09T15:57:49.647Z" }, + { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527, upload-time = "2025-09-09T15:57:52.006Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159, upload-time = "2025-09-09T15:57:54.407Z" }, + { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624, upload-time = "2025-09-09T15:57:56.5Z" }, + { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627, upload-time = "2025-09-09T15:57:58.206Z" }, + { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926, upload-time = "2025-09-09T15:58:00.035Z" }, + { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958, upload-time = "2025-09-09T15:58:02.738Z" }, + { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920, upload-time = "2025-09-09T15:58:05.029Z" }, + { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076, upload-time = "2025-09-09T15:58:07.745Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952, upload-time = "2025-09-09T15:58:10.096Z" }, + { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322, upload-time = "2025-09-09T15:58:12.138Z" }, + { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630, upload-time = "2025-09-09T15:58:14.64Z" }, + { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987, upload-time = "2025-09-09T15:58:16.889Z" }, + { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076, upload-time = "2025-09-09T15:58:20.343Z" }, + { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491, upload-time = "2025-09-09T15:58:22.481Z" }, + { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913, upload-time = "2025-09-09T15:58:24.569Z" }, + { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811, upload-time = "2025-09-09T15:58:26.416Z" }, + { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689, upload-time = "2025-09-09T15:58:28.831Z" }, + { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855, upload-time = "2025-09-09T15:58:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520, upload-time = "2025-09-09T15:58:33.762Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371, upload-time = "2025-09-09T15:58:36.04Z" }, + { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576, upload-time = "2025-09-09T15:58:37.927Z" }, + { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953, upload-time = "2025-09-09T15:58:40.576Z" }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, +] + +[[package]] +name = "ortools" +version = "9.14.6206" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py" }, + { name = "immutabledict" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "protobuf" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/2e/b0d7e7ee9d1a45001a05ca2f65ccc1ab28cee510e725e01e248496510ac1/ortools-9.14.6206-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:e38c8c4a184820cbfdb812a8d484f6506cf16993ce2a95c88bc1c9d23b17c63e", size = 22239884, upload-time = "2025-06-19T15:45:51.774Z" }, + { url = "https://files.pythonhosted.org/packages/31/ad/964ee5341767dd9e2f13e76f0a36d45aa8d81ad776c80bdd6dedc8f2f462/ortools-9.14.6206-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:db685073cbed9f8bfaa744f5e883f3dea57c93179b0abe1788276fd3b074fa61", size = 20211128, upload-time = "2025-06-19T15:45:54.829Z" }, + { url = "https://files.pythonhosted.org/packages/7c/93/d94a66cdfadeb2747d96f1c8d3f590d81c4ad47fd357dfc57de8d7a75bbe/ortools-9.14.6206-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4bfb8bffb29991834cf4bde7048ca8ee8caed73e8dd21e5ec7de99a33bbfea0", size = 25663650, upload-time = "2025-06-19T15:47:20.207Z" }, + { url = "https://files.pythonhosted.org/packages/eb/74/1d374bf510e9fb36bba82ecd3e09461cd8394afef3e418fa5b060f129401/ortools-9.14.6206-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb464a698837e7f90ca5f9b3d748b6ddf553198a70032bc77824d1cd88695d2b", size = 27670004, upload-time = "2025-06-19T15:47:23.111Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e3/5943467ae41efa06cff12b79bfd146c4a54903345f0cc5c896884829d14a/ortools-9.14.6206-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8f33deaeb7c3dda8ca1d29c5b9aa9c3a4f2ca9ecf34f12a1f809bb2995f41274", size = 27653302, upload-time = "2025-06-19T15:53:47.615Z" }, + { url = "https://files.pythonhosted.org/packages/6c/28/a896080fe6e13b4bdae74601f19c28b7ba05ec45f3adca3e992d6174ac57/ortools-9.14.6206-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:086e7c2dc4f23efffb20a5e20f618c7d6adb99b2d94f684cab482387da3bc434", size = 29503497, upload-time = "2025-06-19T15:53:51.174Z" }, + { url = "https://files.pythonhosted.org/packages/38/ad/8d02013116cc5d51084fe24c5b73f5b349dd10925d2927d19d21a2068a4c/ortools-9.14.6206-cp312-cp312-win_amd64.whl", hash = "sha256:17c13b0bfde17ac57789ad35243edf1318ecd5db23cf949b75ab62480599f188", size = 20512174, upload-time = "2025-06-19T15:46:33.339Z" }, + { url = "https://files.pythonhosted.org/packages/d8/9c/fe6d5ca549c2fb5ed3e8e1d928a11f4509c024c974e1f6e2d75d206bc226/ortools-9.14.6206-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:8d0df7eef8ba53ad235e29018389259bad2e667d9594b9c2a412ed6a5756bd4e", size = 22259719, upload-time = "2025-06-19T15:45:57.504Z" }, + { url = "https://files.pythonhosted.org/packages/19/0f/0b9858e7d5b31dfb23a1fe945d3e9fd5d2feba893190e53f70374ac7e084/ortools-9.14.6206-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:57dfe10844ce8331634d4723040fe249263fd490407346efc314c0bc656849b5", size = 20231092, upload-time = "2025-06-19T15:46:00.003Z" }, + { url = "https://files.pythonhosted.org/packages/6b/48/de4eff68cb4ea124c9d6edf68049d329a332aab36d011c2798ea1afb4c98/ortools-9.14.6206-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c0c2c00a6e5d5c462e76fdda7dbd40d0f9139f1df4211d34b36906696248020", size = 25662903, upload-time = "2025-06-19T15:47:26.368Z" }, + { url = "https://files.pythonhosted.org/packages/c9/44/970f72cd5e537fc10e20582dadbdd2f8b2b3c802ac812105c40119572ea7/ortools-9.14.6206-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:38044cf39952d93cbcc02f6acdbe0a9bd3628fbf17f0d7eb0374060fa028c22e", size = 27669250, upload-time = "2025-06-19T15:47:29.738Z" }, + { url = "https://files.pythonhosted.org/packages/a4/31/37e2eacc37e4448090f693d482316a67bf2b47f2aefae6d6236b4ed41924/ortools-9.14.6206-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:98564de773d709e1e49cb3c32f6917589c314f047786d88bd5f324c0eb7be96e", size = 27652453, upload-time = "2025-06-19T15:53:54.742Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8f/0b1bb2a3268114b95381d5a1146c293259d6e45c69e4e3f2d2cf52617796/ortools-9.14.6206-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:80528b0ac72dc3de00cbeef2ce028517a476450b5877b1cda1b8ecb9fa98505e", size = 29503368, upload-time = "2025-06-19T15:53:57.989Z" }, + { url = "https://files.pythonhosted.org/packages/d9/ad/93c05084eec710c38bc952a19002aac31d4c26bb6f8fcbf1057ccc55254b/ortools-9.14.6206-cp313-cp313-win_amd64.whl", hash = "sha256:47b1b15dcb085d32c61621b790259193aefa9e4577abadf233d47fbe7d0b81ef", size = 20530387, upload-time = "2025-06-19T15:46:35.964Z" }, + { url = "https://files.pythonhosted.org/packages/51/85/aeba0d90a3cee4a23ba74a4f2d4c27088923c8b77fa1b73a52ad34593be5/ortools-9.14.6206-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d26a0f9ed97ef9d3384a9069923585f5f974c3fde555a41f4d6381fbe7840bc4", size = 25704462, upload-time = "2025-06-19T15:47:33.064Z" }, + { url = "https://files.pythonhosted.org/packages/98/83/2954b6aa032b77f49a478e0d9682ae8176abfb4bd33d935f0260ecb1741b/ortools-9.14.6206-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d40d8141667d47405f296a9f687058c566d7816586e9a672b59e9fcec8493133", size = 27687594, upload-time = "2025-06-19T15:47:36.241Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9a/9e9866952841e9f4aadccb110c0012d6a76f01b8798432fac0971d60aac1/ortools-9.14.6206-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:aefea81ed81aa937873efc520381785ed65380e52917f492ab566f46bbb5660d", size = 27698487, upload-time = "2025-06-19T15:54:01.03Z" }, + { url = "https://files.pythonhosted.org/packages/91/a5/97a86cdd52c961273981e9ab905a301b7f086593b597d8974c411decf61a/ortools-9.14.6206-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f044bb277db3ab6a1b958728fe1cf14ca87c3800d67d7b321d876b48269340f6", size = 29519050, upload-time = "2025-06-19T15:54:04.147Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +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" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { 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" }, +] + +[[package]] +name = "protobuf" +version = "6.31.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/f3/b9655a711b32c19720253f6f06326faf90580834e2e83f840472d752bc8b/protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a", size = 441797, upload-time = "2025-05-28T19:25:54.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/6f/6ab8e4bf962fd5570d3deaa2d5c38f0a363f57b4501047b5ebeb83ab1125/protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9", size = 423603, upload-time = "2025-05-28T19:25:41.198Z" }, + { url = "https://files.pythonhosted.org/packages/44/3a/b15c4347dd4bf3a1b0ee882f384623e2063bb5cf9fa9d57990a4f7df2fb6/protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447", size = 435283, upload-time = "2025-05-28T19:25:44.275Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402", size = 425604, upload-time = "2025-05-28T19:25:45.702Z" }, + { url = "https://files.pythonhosted.org/packages/76/a1/7a5a94032c83375e4fe7e7f56e3976ea6ac90c5e85fac8576409e25c39c3/protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39", size = 322115, upload-time = "2025-05-28T19:25:47.128Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6", size = 321070, upload-time = "2025-05-28T19:25:50.036Z" }, + { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724, upload-time = "2025-05-28T19:25:53.926Z" }, +] + +[[package]] +name = "pyside6" +version = "6.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyside6-addons" }, + { name = "pyside6-essentials" }, + { name = "shiboken6" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/98/84b16f78b5d92dd234fb1eb9890a350a5b0c83d985bb8c44a92f813a2d02/pyside6-6.10.0-cp39-abi3-macosx_13_0_universal2.whl", hash = "sha256:c2cbc5dc2a164e3c7c51b3435e24203e90e5edd518c865466afccbd2e5872bb0", size = 558115, upload-time = "2025-10-08T09:47:09.246Z" }, + { url = "https://files.pythonhosted.org/packages/4e/76/0961c8c5653ecb60a6881b649dcb6b71a6be5bd1c8d441ecc48ac7f50b1a/pyside6-6.10.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ae8c3c8339cd7c3c9faa7cc5c52670dcc8662ccf4b63a6fed61c6345b90c4c01", size = 557762, upload-time = "2025-10-08T09:47:11.819Z" }, + { url = "https://files.pythonhosted.org/packages/c8/73/6187502fff8b6599443d15c46dd900b2ded24be5aacb2becce33f6faf566/pyside6-6.10.0-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:9f402f883e640048fab246d36e298a5e16df9b18ba2e8c519877e472d3602820", size = 558299, upload-time = "2025-10-08T09:47:14.255Z" }, + { url = "https://files.pythonhosted.org/packages/43/67/94794ebaf198bbdb35cb77f19f38370f9b323b036ab149874bc33c38faab/pyside6-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:70a8bcc73ea8d6baab70bba311eac77b9a1d31f658d0b418e15eb6ea36c97e6f", size = 564367, upload-time = "2025-10-08T09:47:16.287Z" }, + { url = "https://files.pythonhosted.org/packages/1d/cc/552331d413c1b933d54ed45e33cc7ff29d0b239677975fe2528e7ac8bfbc/pyside6-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:4b709bdeeb89d386059343a5a706fc185cee37b517bda44c7d6b64d5fdaf3339", size = 548826, upload-time = "2025-10-08T09:47:18.399Z" }, +] + +[[package]] +name = "pyside6-addons" +version = "6.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyside6-essentials" }, + { name = "shiboken6" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/23/9fbdec2ce16244ac3fe28e6d44c39c70465c93a03325939a792fd00fde7f/pyside6_addons-6.10.0-cp39-abi3-macosx_13_0_universal2.whl", hash = "sha256:88e61e21ee4643cdd9efb39ec52f4dc1ac74c0b45c5b7fa453d03c094f0a8a5c", size = 322248256, upload-time = "2025-10-08T09:47:37.844Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/d129210f2c7366b4e1bf5bb6230be42052b29e8ba1b1d7db6ef333cf5a39/pyside6_addons-6.10.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:08d4ed46c4c9a353a9eb84134678f8fdd4ce17fb8cce2b3686172a7575025464", size = 170238987, upload-time = "2025-10-08T09:47:51.446Z" }, + { url = "https://files.pythonhosted.org/packages/cf/ae/ede1edd009395092219f3437d2ee59f9ba93739c28c040542ed47c6cc831/pyside6_addons-6.10.0-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:15d32229d681be0bba1b936c4a300da43d01e1917ada5b57f9e03a387c245ab0", size = 165939425, upload-time = "2025-10-08T09:48:02.073Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5d/a3c32f85ac7f905c95679967c0ddda0ba043c273b75623cc90d8185064e4/pyside6_addons-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:99d93a32c17c5f6d797c3b90dd58f2a8bae13abde81e85802c34ceafaee11859", size = 164814172, upload-time = "2025-10-08T09:48:12.891Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2a/4ff71b09571202c8e1320c45276fc1d0cd81ee53107dfc17bb22d4243f88/pyside6_addons-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:92536427413f3b6557cf53f1a515cd766725ee46a170aff57ad2ff1dfce0ffb1", size = 34104251, upload-time = "2025-10-08T09:48:18.287Z" }, +] + +[[package]] +name = "pyside6-essentials" +version = "6.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "shiboken6" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/55/bad02ab890c8b8101abef0db4a2e5304be78a69e23a438e4d8555b664467/pyside6_essentials-6.10.0-cp39-abi3-macosx_13_0_universal2.whl", hash = "sha256:003e871effe1f3e5b876bde715c15a780d876682005a6e989d89f48b8b93e93a", size = 105034090, upload-time = "2025-10-08T09:48:24.944Z" }, + { url = "https://files.pythonhosted.org/packages/5c/75/e17efc7eb900993e0e3925885635c6cf373c817196f09bcbcc102b00ac94/pyside6_essentials-6.10.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:1d5e013a8698e37ab8ef360e6960794eb5ef20832a8d562e649b8c5a0574b2d8", size = 76362150, upload-time = "2025-10-08T09:48:31.849Z" }, + { url = "https://files.pythonhosted.org/packages/06/62/fbd1e81caafcda97b147c03f5b06cfaadd8da5fa8298f527d2ec648fa5b7/pyside6_essentials-6.10.0-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:b1dd0864f0577a448fb44426b91cafff7ee7cccd1782ba66491e1c668033f998", size = 75454169, upload-time = "2025-10-08T09:48:38.21Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3a/d8211d17e6ca70f641c6ebd309f08ef18930acda60e74082c75875a274da/pyside6_essentials-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:fc167eb211dd1580e20ba90d299e74898e7a5a1306d832421e879641fc03b6fe", size = 74361794, upload-time = "2025-10-08T09:48:44.335Z" }, + { url = "https://files.pythonhosted.org/packages/61/e9/0e22e3c10325c4ff09447fadb43f7962afb82cef0b65358f5704251c6b32/pyside6_essentials-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:6dd0936394cb14da2fd8e869899f5e0925a738b1c8d74c2f22503720ea363fb1", size = 55099467, upload-time = "2025-10-08T09:48:50.902Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +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 = "shiboken6" +version = "6.10.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/78/3e730aea82089dd82b1e092bc265778bda329459e6ad9b7134eec5fff3f2/shiboken6-6.10.0-cp39-abi3-macosx_13_0_universal2.whl", hash = "sha256:7a5f5f400ebfb3a13616030815708289c2154e701a60b9db7833b843e0bee543", size = 476535, upload-time = "2025-10-08T09:49:08Z" }, + { url = "https://files.pythonhosted.org/packages/ea/09/4ffa3284a17b6b765d45b41c9a7f1b2cde6c617c853ac6f170fb62bbbece/shiboken6-6.10.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:e612734da515d683696980107cdc0396a3ae0f07b059f0f422ec8a2333810234", size = 271098, upload-time = "2025-10-08T09:49:09.47Z" }, + { url = "https://files.pythonhosted.org/packages/31/29/00e26f33a0fb259c2edce9c761a7a438d7531ca514bdb1a4c072673bd437/shiboken6-6.10.0-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:b01377e68d14132360efb0f4b7233006d26aa8ae9bb50edf00960c2a5f52d148", size = 267698, upload-time = "2025-10-08T09:49:10.694Z" }, + { url = "https://files.pythonhosted.org/packages/11/30/e4624a7e3f0dc9796b701079b77defcce0d32d1afc86bb1d0df04bc3d9e2/shiboken6-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:0bc5631c1bf150cbef768a17f5f289aae1cb4db6c6b0c19b2421394e27783717", size = 1234227, upload-time = "2025-10-08T09:49:12.774Z" }, + { url = "https://files.pythonhosted.org/packages/dd/e5/0ab862005ea87dc8647ba958a3099b3b0115fd6491c65da5c5a0f6364db1/shiboken6-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:dfc4beab5fec7dbbebbb418f3bf99af865d6953aa0795435563d4cbb82093b61", size = 1794775, upload-time = "2025-10-08T09:49:14.641Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, +] diff --git a/问卷星结果_较极端样例.xlsx b/问卷星结果_较极端样例.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..94933af71b8415e66c6aa3be0bdb423ee91e2c9c GIT binary patch literal 26348 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 Wfi{p(y8r+M;f53b0L&o&e)<>I$(=R; literal 0 HcmV?d00001