azulgarza commited on
Commit
7901bf8
·
1 Parent(s): 7898153

feat: add style changes and cleaning

Browse files
Files changed (4) hide show
  1. app.py +23 -8
  2. data.py +2 -0
  3. leaderboard.py +12 -21
  4. uv.lock +46 -1
app.py CHANGED
@@ -16,25 +16,35 @@ df = load_data()
16
  ALL_METRICS = sorted(df["metric"].unique().tolist())
17
  ALL_SUBDATASETS = sorted(df["subdataset"].unique().tolist())
18
  ALL_MODELS = sorted(df["model"].unique().tolist())
 
19
 
20
 
21
- def build_table(metric, subdataset, models):
22
- sub = df[df["metric"] == metric]
 
23
  if subdataset != "All":
24
  sub = sub[sub["subdataset"] == subdataset]
 
 
25
  if models:
26
  sub = sub[sub["model"].isin(models)]
27
  pivot = sub.pivot_table(
28
- index=["subdataset", "cutoff"], columns="model", values="value"
 
 
29
  )
30
  pivot = pivot.sort_index()
31
  pivot = pivot.reset_index()
 
 
 
32
  return pivot
33
 
34
 
35
  def build_plots(metric, subdataset):
36
- fig_rank = plot_rank_for_subdataset(df, metric, subdataset)
37
- fig_value = plot_value_for_subdataset(df, metric, subdataset)
 
38
  return fig_rank, fig_value
39
 
40
 
@@ -664,6 +674,11 @@ Currently **{n_dates} evaluations** are available, from **{date_min}** to **{dat
664
  value="All",
665
  label="Subdataset",
666
  )
 
 
 
 
 
667
  models_dd = gr.Dropdown(
668
  choices=ALL_MODELS,
669
  value=ALL_MODELS,
@@ -672,15 +687,15 @@ Currently **{n_dates} evaluations** are available, from **{date_min}** to **{dat
672
  )
673
 
674
  results_table = gr.Dataframe(
675
- value=build_table(ALL_METRICS[0], "All", ALL_MODELS),
676
  label="Results",
677
  interactive=False,
678
  )
679
 
680
- for control in [metric_dd, subdataset_dd, models_dd]:
681
  control.change(
682
  fn=build_table,
683
- inputs=[metric_dd, subdataset_dd, models_dd],
684
  outputs=results_table,
685
  )
686
 
 
16
  ALL_METRICS = sorted(df["metric"].unique().tolist())
17
  ALL_SUBDATASETS = sorted(df["subdataset"].unique().tolist())
18
  ALL_MODELS = sorted(df["model"].unique().tolist())
19
+ ALL_FREQUENCIES = sorted(df["frequency"].unique().tolist())
20
 
21
 
22
+ def build_table(metric, subdataset, frequency, models):
23
+ data = load_data()
24
+ sub = data[data["metric"] == metric]
25
  if subdataset != "All":
26
  sub = sub[sub["subdataset"] == subdataset]
27
+ if frequency != "All":
28
+ sub = sub[sub["frequency"] == frequency]
29
  if models:
30
  sub = sub[sub["model"].isin(models)]
31
  pivot = sub.pivot_table(
32
+ index=["subdataset", "frequency", "cutoff"],
33
+ columns="model",
34
+ values="value",
35
  )
36
  pivot = pivot.sort_index()
37
  pivot = pivot.reset_index()
38
+ # Format numeric columns to 3 decimal places
39
+ num_cols = pivot.select_dtypes(include="number").columns
40
+ pivot[num_cols] = pivot[num_cols].round(3)
41
  return pivot
42
 
43
 
44
  def build_plots(metric, subdataset):
45
+ data = load_data()
46
+ fig_rank = plot_rank_for_subdataset(data, metric, subdataset)
47
+ fig_value = plot_value_for_subdataset(data, metric, subdataset)
48
  return fig_rank, fig_value
49
 
50
 
 
674
  value="All",
675
  label="Subdataset",
676
  )
677
+ frequency_dd = gr.Dropdown(
678
+ choices=["All"] + ALL_FREQUENCIES,
679
+ value="All",
680
+ label="Frequency",
681
+ )
682
  models_dd = gr.Dropdown(
683
  choices=ALL_MODELS,
684
  value=ALL_MODELS,
 
687
  )
688
 
689
  results_table = gr.Dataframe(
690
+ value=build_table(ALL_METRICS[0], "All", "All", ALL_MODELS),
691
  label="Results",
692
  interactive=False,
693
  )
694
 
695
+ for control in [metric_dd, subdataset_dd, frequency_dd, models_dd]:
696
  control.change(
697
  fn=build_table,
698
+ inputs=[metric_dd, subdataset_dd, frequency_dd, models_dd],
699
  outputs=results_table,
700
  )
701
 
data.py CHANGED
@@ -29,4 +29,6 @@ def load_data() -> pd.DataFrame:
29
  if "model_alias" in df.columns:
30
  df = df.rename(columns={"model": "model_id", "model_alias": "model"})
31
 
 
 
32
  return df
 
29
  if "model_alias" in df.columns:
30
  df = df.rename(columns={"model": "model_id", "model_alias": "model"})
31
 
32
+ print(df)
33
+
34
  return df
leaderboard.py CHANGED
@@ -14,9 +14,9 @@ def compute_leaderboard(df: pd.DataFrame) -> pd.DataFrame:
14
  Returns a dataframe with columns: model, rank CRPS, rank MASE
15
  """
16
  ranked = df.copy()
17
- ranked["rank"] = ranked.groupby(
18
- ["metric", "subdataset", "frequency", "cutoff"]
19
- )["value"].rank(method="min")
20
 
21
  # Step 2: average ranks across cutoffs per (metric, subdataset, frequency, model)
22
  per_subdataset = (
@@ -27,9 +27,9 @@ def compute_leaderboard(df: pd.DataFrame) -> pd.DataFrame:
27
 
28
  # Print per-subdataset ranks for manual inspection
29
  for metric in sorted(per_subdataset["metric"].unique()):
30
- print(f"\n{'='*60}")
31
  print(f"Metric: {metric}")
32
- print(f"{'='*60}")
33
  sub = per_subdataset[per_subdataset["metric"] == metric]
34
  pivot = sub.pivot_table(
35
  index=["subdataset", "frequency"], columns="model", values="rank"
@@ -37,11 +37,7 @@ def compute_leaderboard(df: pd.DataFrame) -> pd.DataFrame:
37
  print(pivot.to_string())
38
 
39
  # Step 3: average across all (subdataset, frequency) combos
40
- overall = (
41
- per_subdataset.groupby(["metric", "model"])["rank"]
42
- .mean()
43
- .reset_index()
44
- )
45
 
46
  # Pivot so each metric becomes a column
47
  leaderboard = overall.pivot(index="model", columns="metric", values="rank")
@@ -52,7 +48,7 @@ def compute_leaderboard(df: pd.DataFrame) -> pd.DataFrame:
52
  # Average metric values: mean across all (subdataset, frequency, cutoff) per (metric, model)
53
  avg_values = (
54
  df.groupby(["metric", "model"])["value"]
55
- .mean()
56
  .reset_index()
57
  .pivot(index="model", columns="metric", values="value")
58
  )
@@ -69,16 +65,13 @@ def compute_leaderboard(df: pd.DataFrame) -> pd.DataFrame:
69
 
70
  # Round for display
71
  for col in leaderboard.columns:
72
- if col.startswith("rank "):
73
- leaderboard[col] = leaderboard[col].round(2)
74
- elif col.startswith("avg "):
75
- leaderboard[col] = leaderboard[col].round(4)
76
 
77
  # Add medals to model names
78
  leaderboard = leaderboard.reset_index(drop=True)
79
  leaderboard["model"] = [
80
- f"{MEDALS.get(i, '')} {m}".strip()
81
- for i, m in enumerate(leaderboard["model"])
82
  ]
83
 
84
  # Reorder: model, avg columns, rank columns
@@ -89,14 +82,12 @@ def compute_leaderboard(df: pd.DataFrame) -> pd.DataFrame:
89
  return leaderboard
90
 
91
 
92
-
93
-
94
  if __name__ == "__main__":
95
  from data import load_data
96
 
97
  df = load_data()
98
  lb = compute_leaderboard(df)
99
- print(f"\n{'='*60}")
100
  print("LEADERBOARD")
101
- print(f"{'='*60}")
102
  print(lb.to_string(index=False))
 
14
  Returns a dataframe with columns: model, rank CRPS, rank MASE
15
  """
16
  ranked = df.copy()
17
+ ranked["rank"] = ranked.groupby(["metric", "subdataset", "frequency", "cutoff"])[
18
+ "value"
19
+ ].rank(method="min")
20
 
21
  # Step 2: average ranks across cutoffs per (metric, subdataset, frequency, model)
22
  per_subdataset = (
 
27
 
28
  # Print per-subdataset ranks for manual inspection
29
  for metric in sorted(per_subdataset["metric"].unique()):
30
+ print(f"\n{'=' * 60}")
31
  print(f"Metric: {metric}")
32
+ print(f"{'=' * 60}")
33
  sub = per_subdataset[per_subdataset["metric"] == metric]
34
  pivot = sub.pivot_table(
35
  index=["subdataset", "frequency"], columns="model", values="rank"
 
37
  print(pivot.to_string())
38
 
39
  # Step 3: average across all (subdataset, frequency) combos
40
+ overall = per_subdataset.groupby(["metric", "model"])["rank"].mean().reset_index()
 
 
 
 
41
 
42
  # Pivot so each metric becomes a column
43
  leaderboard = overall.pivot(index="model", columns="metric", values="rank")
 
48
  # Average metric values: mean across all (subdataset, frequency, cutoff) per (metric, model)
49
  avg_values = (
50
  df.groupby(["metric", "model"])["value"]
51
+ .median() # using median instead of mean to avoid outliers
52
  .reset_index()
53
  .pivot(index="model", columns="metric", values="value")
54
  )
 
65
 
66
  # Round for display
67
  for col in leaderboard.columns:
68
+ if col.startswith("rank ") or col.startswith("avg "):
69
+ leaderboard[col] = leaderboard[col].round(3)
 
 
70
 
71
  # Add medals to model names
72
  leaderboard = leaderboard.reset_index(drop=True)
73
  leaderboard["model"] = [
74
+ f"{MEDALS.get(i, '')} {m}".strip() for i, m in enumerate(leaderboard["model"])
 
75
  ]
76
 
77
  # Reorder: model, avg columns, rank columns
 
82
  return leaderboard
83
 
84
 
 
 
85
  if __name__ == "__main__":
86
  from data import load_data
87
 
88
  df = load_data()
89
  lb = compute_leaderboard(df)
90
+ print(f"\n{'=' * 60}")
91
  print("LEADERBOARD")
92
+ print(f"{'=' * 60}")
93
  print(lb.to_string(index=False))
uv.lock CHANGED
@@ -1,5 +1,5 @@
1
  version = 1
2
- revision = 3
3
  requires-python = ">=3.12"
4
  resolution-markers = [
5
  "python_full_version >= '3.14' and sys_platform == 'win32'",
@@ -532,6 +532,7 @@ dependencies = [
532
  { name = "gradio" },
533
  { name = "matplotlib" },
534
  { name = "pandas" },
 
535
  ]
536
 
537
  [package.dev-dependencies]
@@ -544,6 +545,7 @@ requires-dist = [
544
  { name = "gradio", specifier = ">=6.5.1" },
545
  { name = "matplotlib", specifier = ">=3.10.8" },
546
  { name = "pandas", specifier = ">=3.0.0" },
 
547
  ]
548
 
549
  [package.metadata.requires-dev]
@@ -1123,6 +1125,49 @@ wheels = [
1123
  { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" },
1124
  ]
1125
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1126
  [[package]]
1127
  name = "pydantic"
1128
  version = "2.12.5"
 
1
  version = 1
2
+ revision = 2
3
  requires-python = ">=3.12"
4
  resolution-markers = [
5
  "python_full_version >= '3.14' and sys_platform == 'win32'",
 
532
  { name = "gradio" },
533
  { name = "matplotlib" },
534
  { name = "pandas" },
535
+ { name = "pyarrow" },
536
  ]
537
 
538
  [package.dev-dependencies]
 
545
  { name = "gradio", specifier = ">=6.5.1" },
546
  { name = "matplotlib", specifier = ">=3.10.8" },
547
  { name = "pandas", specifier = ">=3.0.0" },
548
+ { name = "pyarrow", specifier = ">=19.0.0" },
549
  ]
550
 
551
  [package.metadata.requires-dev]
 
1125
  { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" },
1126
  ]
1127
 
1128
+ [[package]]
1129
+ name = "pyarrow"
1130
+ version = "23.0.0"
1131
+ source = { registry = "https://pypi.org/simple" }
1132
+ sdist = { url = "https://files.pythonhosted.org/packages/01/33/ffd9c3eb087fa41dd79c3cf20c4c0ae3cdb877c4f8e1107a446006344924/pyarrow-23.0.0.tar.gz", hash = "sha256:180e3150e7edfcd182d3d9afba72f7cf19839a497cc76555a8dce998a8f67615", size = 1167185, upload-time = "2026-01-18T16:19:42.218Z" }
1133
+ wheels = [
1134
+ { url = "https://files.pythonhosted.org/packages/3d/bd/c861d020831ee57609b73ea721a617985ece817684dc82415b0bc3e03ac3/pyarrow-23.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5961a9f646c232697c24f54d3419e69b4261ba8a8b66b0ac54a1851faffcbab8", size = 34189116, upload-time = "2026-01-18T16:15:28.054Z" },
1135
+ { url = "https://files.pythonhosted.org/packages/8c/23/7725ad6cdcbaf6346221391e7b3eecd113684c805b0a95f32014e6fa0736/pyarrow-23.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:632b3e7c3d232f41d64e1a4a043fb82d44f8a349f339a1188c6a0dd9d2d47d8a", size = 35803831, upload-time = "2026-01-18T16:15:33.798Z" },
1136
+ { url = "https://files.pythonhosted.org/packages/57/06/684a421543455cdc2944d6a0c2cc3425b028a4c6b90e34b35580c4899743/pyarrow-23.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:76242c846db1411f1d6c2cc3823be6b86b40567ee24493344f8226ba34a81333", size = 44436452, upload-time = "2026-01-18T16:15:41.598Z" },
1137
+ { url = "https://files.pythonhosted.org/packages/c6/6f/8f9eb40c2328d66e8b097777ddcf38494115ff9f1b5bc9754ba46991191e/pyarrow-23.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b73519f8b52ae28127000986bf228fda781e81d3095cd2d3ece76eb5cf760e1b", size = 47557396, upload-time = "2026-01-18T16:15:51.252Z" },
1138
+ { url = "https://files.pythonhosted.org/packages/10/6e/f08075f1472e5159553501fde2cc7bc6700944bdabe49a03f8a035ee6ccd/pyarrow-23.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:068701f6823449b1b6469120f399a1239766b117d211c5d2519d4ed5861f75de", size = 48147129, upload-time = "2026-01-18T16:16:00.299Z" },
1139
+ { url = "https://files.pythonhosted.org/packages/7d/82/d5a680cd507deed62d141cc7f07f7944a6766fc51019f7f118e4d8ad0fb8/pyarrow-23.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1801ba947015d10e23bca9dd6ef5d0e9064a81569a89b6e9a63b59224fd060df", size = 50596642, upload-time = "2026-01-18T16:16:08.502Z" },
1140
+ { url = "https://files.pythonhosted.org/packages/a9/26/4f29c61b3dce9fa7780303b86895ec6a0917c9af927101daaaf118fbe462/pyarrow-23.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:52265266201ec25b6839bf6bd4ea918ca6d50f31d13e1cf200b4261cd11dc25c", size = 27660628, upload-time = "2026-01-18T16:16:15.28Z" },
1141
+ { url = "https://files.pythonhosted.org/packages/66/34/564db447d083ec7ff93e0a883a597d2f214e552823bfc178a2d0b1f2c257/pyarrow-23.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:ad96a597547af7827342ffb3c503c8316e5043bb09b47a84885ce39394c96e00", size = 34184630, upload-time = "2026-01-18T16:16:22.141Z" },
1142
+ { url = "https://files.pythonhosted.org/packages/aa/3a/3999daebcb5e6119690c92a621c4d78eef2ffba7a0a1b56386d2875fcd77/pyarrow-23.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:b9edf990df77c2901e79608f08c13fbde60202334a4fcadb15c1f57bf7afee43", size = 35796820, upload-time = "2026-01-18T16:16:29.441Z" },
1143
+ { url = "https://files.pythonhosted.org/packages/ec/ee/39195233056c6a8d0976d7d1ac1cd4fe21fb0ec534eca76bc23ef3f60e11/pyarrow-23.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:36d1b5bc6ddcaff0083ceec7e2561ed61a51f49cce8be079ee8ed406acb6fdef", size = 44438735, upload-time = "2026-01-18T16:16:38.79Z" },
1144
+ { url = "https://files.pythonhosted.org/packages/2c/41/6a7328ee493527e7afc0c88d105ecca69a3580e29f2faaeac29308369fd7/pyarrow-23.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4292b889cd224f403304ddda8b63a36e60f92911f89927ec8d98021845ea21be", size = 47557263, upload-time = "2026-01-18T16:16:46.248Z" },
1145
+ { url = "https://files.pythonhosted.org/packages/c6/ee/34e95b21ee84db494eae60083ddb4383477b31fb1fd19fd866d794881696/pyarrow-23.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dfd9e133e60eaa847fd80530a1b89a052f09f695d0b9c34c235ea6b2e0924cf7", size = 48153529, upload-time = "2026-01-18T16:16:53.412Z" },
1146
+ { url = "https://files.pythonhosted.org/packages/52/88/8a8d83cea30f4563efa1b7bf51d241331ee5cd1b185a7e063f5634eca415/pyarrow-23.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832141cc09fac6aab1cd3719951d23301396968de87080c57c9a7634e0ecd068", size = 50598851, upload-time = "2026-01-18T16:17:01.133Z" },
1147
+ { url = "https://files.pythonhosted.org/packages/c6/4c/2929c4be88723ba025e7b3453047dc67e491c9422965c141d24bab6b5962/pyarrow-23.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:7a7d067c9a88faca655c71bcc30ee2782038d59c802d57950826a07f60d83c4c", size = 27577747, upload-time = "2026-01-18T16:18:02.413Z" },
1148
+ { url = "https://files.pythonhosted.org/packages/64/52/564a61b0b82d72bd68ec3aef1adda1e3eba776f89134b9ebcb5af4b13cb6/pyarrow-23.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ce9486e0535a843cf85d990e2ec5820a47918235183a5c7b8b97ed7e92c2d47d", size = 34446038, upload-time = "2026-01-18T16:17:07.861Z" },
1149
+ { url = "https://files.pythonhosted.org/packages/cc/c9/232d4f9855fd1de0067c8a7808a363230d223c83aeee75e0fe6eab851ba9/pyarrow-23.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:075c29aeaa685fd1182992a9ed2499c66f084ee54eea47da3eb76e125e06064c", size = 35921142, upload-time = "2026-01-18T16:17:15.401Z" },
1150
+ { url = "https://files.pythonhosted.org/packages/96/f2/60af606a3748367b906bb82d41f0032e059f075444445d47e32a7ff1df62/pyarrow-23.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:799965a5379589510d888be3094c2296efd186a17ca1cef5b77703d4d5121f53", size = 44490374, upload-time = "2026-01-18T16:17:23.93Z" },
1151
+ { url = "https://files.pythonhosted.org/packages/ff/2d/7731543050a678ea3a413955a2d5d80d2a642f270aa57a3cb7d5a86e3f46/pyarrow-23.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ef7cac8fe6fccd8b9e7617bfac785b0371a7fe26af59463074e4882747145d40", size = 47527896, upload-time = "2026-01-18T16:17:33.393Z" },
1152
+ { url = "https://files.pythonhosted.org/packages/5a/90/f3342553b7ac9879413aed46500f1637296f3c8222107523a43a1c08b42a/pyarrow-23.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15a414f710dc927132dd67c361f78c194447479555af57317066ee5116b90e9e", size = 48210401, upload-time = "2026-01-18T16:17:42.012Z" },
1153
+ { url = "https://files.pythonhosted.org/packages/f3/da/9862ade205ecc46c172b6ce5038a74b5151c7401e36255f15975a45878b2/pyarrow-23.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e0d2e6915eca7d786be6a77bf227fbc06d825a75b5b5fe9bcbef121dec32685", size = 50579677, upload-time = "2026-01-18T16:17:50.241Z" },
1154
+ { url = "https://files.pythonhosted.org/packages/c2/4c/f11f371f5d4740a5dafc2e11c76bcf42d03dfdb2d68696da97de420b6963/pyarrow-23.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4b317ea6e800b5704e5e5929acb6e2dc13e9276b708ea97a39eb8b345aa2658b", size = 27631889, upload-time = "2026-01-18T16:17:56.55Z" },
1155
+ { url = "https://files.pythonhosted.org/packages/97/bb/15aec78bcf43a0c004067bd33eb5352836a29a49db8581fc56f2b6ca88b7/pyarrow-23.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:20b187ed9550d233a872074159f765f52f9d92973191cd4b93f293a19efbe377", size = 34213265, upload-time = "2026-01-18T16:18:07.904Z" },
1156
+ { url = "https://files.pythonhosted.org/packages/f6/6c/deb2c594bbba41c37c5d9aa82f510376998352aa69dfcb886cb4b18ad80f/pyarrow-23.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:18ec84e839b493c3886b9b5e06861962ab4adfaeb79b81c76afbd8d84c7d5fda", size = 35819211, upload-time = "2026-01-18T16:18:13.94Z" },
1157
+ { url = "https://files.pythonhosted.org/packages/e0/e5/ee82af693cb7b5b2b74f6524cdfede0e6ace779d7720ebca24d68b57c36b/pyarrow-23.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e438dd3f33894e34fd02b26bd12a32d30d006f5852315f611aa4add6c7fab4bc", size = 44502313, upload-time = "2026-01-18T16:18:20.367Z" },
1158
+ { url = "https://files.pythonhosted.org/packages/9c/86/95c61ad82236495f3c31987e85135926ba3ec7f3819296b70a68d8066b49/pyarrow-23.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:a244279f240c81f135631be91146d7fa0e9e840e1dfed2aba8483eba25cd98e6", size = 47585886, upload-time = "2026-01-18T16:18:27.544Z" },
1159
+ { url = "https://files.pythonhosted.org/packages/bb/6e/a72d901f305201802f016d015de1e05def7706fff68a1dedefef5dc7eff7/pyarrow-23.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c4692e83e42438dba512a570c6eaa42be2f8b6c0f492aea27dec54bdc495103a", size = 48207055, upload-time = "2026-01-18T16:18:35.425Z" },
1160
+ { url = "https://files.pythonhosted.org/packages/f9/e5/5de029c537630ca18828db45c30e2a78da03675a70ac6c3528203c416fe3/pyarrow-23.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae7f30f898dfe44ea69654a35c93e8da4cef6606dc4c72394068fd95f8e9f54a", size = 50619812, upload-time = "2026-01-18T16:18:43.553Z" },
1161
+ { url = "https://files.pythonhosted.org/packages/59/8d/2af846cd2412e67a087f5bda4a8e23dfd4ebd570f777db2e8686615dafc1/pyarrow-23.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:5b86bb649e4112fb0614294b7d0a175c7513738876b89655605ebb87c804f861", size = 28263851, upload-time = "2026-01-18T16:19:38.567Z" },
1162
+ { url = "https://files.pythonhosted.org/packages/7b/7f/caab863e587041156f6786c52e64151b7386742c8c27140f637176e9230e/pyarrow-23.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ebc017d765d71d80a3f8584ca0566b53e40464586585ac64176115baa0ada7d3", size = 34463240, upload-time = "2026-01-18T16:18:49.755Z" },
1163
+ { url = "https://files.pythonhosted.org/packages/c9/fa/3a5b8c86c958e83622b40865e11af0857c48ec763c11d472c87cd518283d/pyarrow-23.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:0800cc58a6d17d159df823f87ad66cefebf105b982493d4bad03ee7fab84b993", size = 35935712, upload-time = "2026-01-18T16:18:55.626Z" },
1164
+ { url = "https://files.pythonhosted.org/packages/c5/08/17a62078fc1a53decb34a9aa79cf9009efc74d63d2422e5ade9fed2f99e3/pyarrow-23.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:3a7c68c722da9bb5b0f8c10e3eae71d9825a4b429b40b32709df5d1fa55beb3d", size = 44503523, upload-time = "2026-01-18T16:19:03.958Z" },
1165
+ { url = "https://files.pythonhosted.org/packages/cc/70/84d45c74341e798aae0323d33b7c39194e23b1abc439ceaf60a68a7a969a/pyarrow-23.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:bd5556c24622df90551063ea41f559b714aa63ca953db884cfb958559087a14e", size = 47542490, upload-time = "2026-01-18T16:19:11.208Z" },
1166
+ { url = "https://files.pythonhosted.org/packages/61/d9/d1274b0e6f19e235de17441e53224f4716574b2ca837022d55702f24d71d/pyarrow-23.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54810f6e6afc4ffee7c2e0051b61722fbea9a4961b46192dcfae8ea12fa09059", size = 48233605, upload-time = "2026-01-18T16:19:19.544Z" },
1167
+ { url = "https://files.pythonhosted.org/packages/39/07/e4e2d568cb57543d84482f61e510732820cddb0f47c4bb7df629abfed852/pyarrow-23.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:14de7d48052cf4b0ed174533eafa3cfe0711b8076ad70bede32cf59f744f0d7c", size = 50603979, upload-time = "2026-01-18T16:19:26.717Z" },
1168
+ { url = "https://files.pythonhosted.org/packages/72/9c/47693463894b610f8439b2e970b82ef81e9599c757bf2049365e40ff963c/pyarrow-23.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:427deac1f535830a744a4f04a6ac183a64fcac4341b3f618e693c41b7b98d2b0", size = 28338905, upload-time = "2026-01-18T16:19:32.93Z" },
1169
+ ]
1170
+
1171
  [[package]]
1172
  name = "pydantic"
1173
  version = "2.12.5"