shunk031 commited on
Commit
6e016f7
·
1 Parent(s): bae937d

deploy: 63a85616f5fc427cf1e1e7b425293131f2fce2b8

Browse files
Files changed (3) hide show
  1. README.md +167 -1
  2. layout-underlay-effectiveness.py +26 -9
  3. requirements.txt +134 -89
README.md CHANGED
@@ -8,4 +8,170 @@ sdk_version: 4.36.1
8
  app_file: app.py
9
  pinned: false
10
  ---
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  app_file: app.py
9
  pinned: false
10
  ---
11
+
12
+ # Layout Underlay Effectiveness
13
+
14
+ ## Description
15
+
16
+ The Layout Underlay Effectiveness metric evaluates how well underlay (decoration/background) elements are placed in a layout. Underlay elements should be positioned underneath other layout elements to serve their intended purpose as background or decorative layers. This metric measures what proportion of underlay elements correctly have other elements placed on top of them.
17
+
18
+ ## What It Measures
19
+
20
+ This metric computes:
21
+
22
+ - **Valid underlay ratio**: Proportion of underlay elements that correctly have foreground elements on top
23
+ - **Underlay functionality**: Whether decoration elements serve their background purpose
24
+ - **Layer correctness**: How well the layout respects foreground/background hierarchy
25
+
26
+ Higher scores indicate better underlay placement where decoration elements properly support foreground content.
27
+
28
+ ## Metric Details
29
+
30
+ Two calculation modes:
31
+
32
+ 1. **Strict mode**: Underlay scores 1 if there's a non-underlay element completely inside it, 0 otherwise
33
+ 2. **Loose mode**: Calculates ratio of intersection area to underlay area (ai/a2)
34
+
35
+ - Filters out text and other underlay elements when evaluating each underlay
36
+ - From PosterLayout (Hsu et al., CVPR 2023) for poster design evaluation
37
+ - Typical underlay class index: 3 (decoration/background)
38
+
39
+ ## Usage
40
+
41
+ ### Installation
42
+
43
+ ```bash
44
+ pip install evaluate
45
+ ```
46
+
47
+ ### Basic Example
48
+
49
+ ```python
50
+ import evaluate
51
+ import numpy as np
52
+
53
+ # Load the metric with canvas dimensions
54
+ metric = evaluate.load(
55
+ "creative-graphic-design/layout-underlay-effectiveness",
56
+ canvas_width=360,
57
+ canvas_height=504,
58
+ text_label_index=1,
59
+ decoration_label_index=3
60
+ )
61
+
62
+ # Prepare data
63
+ predictions = np.random.rand(1, 25, 4) # normalized ltrb coordinates
64
+ gold_labels = np.random.randint(0, 4, size=(1, 25)) # class labels
65
+ score = metric.compute(predictions=predictions, gold_labels=gold_labels)
66
+ print(score)
67
+ ```
68
+
69
+ ### Batch Processing Example
70
+
71
+ ```python
72
+ import evaluate
73
+ import numpy as np
74
+
75
+ # Load the metric
76
+ metric = evaluate.load(
77
+ "creative-graphic-design/layout-underlay-effectiveness",
78
+ canvas_width=360,
79
+ canvas_height=504,
80
+ text_label_index=1,
81
+ decoration_label_index=3
82
+ )
83
+
84
+ # Batch processing
85
+ batch_size = 128
86
+ predictions = np.random.rand(batch_size, 25, 4)
87
+ gold_labels = np.random.randint(0, 4, size=(batch_size, 25))
88
+ score = metric.compute(predictions=predictions, gold_labels=gold_labels)
89
+ print(score)
90
+ ```
91
+
92
+ ## Parameters
93
+
94
+ ### Initialization Parameters
95
+
96
+ - **canvas_width** (`int`, required): Width of the canvas in pixels
97
+ - **canvas_height** (`int`, required): Height of the canvas in pixels
98
+ - **text_label_index** (`int`, optional, default=1): Class index for text elements
99
+ - **decoration_label_index** (`int`, optional, default=3): Class index for underlay/decoration elements
100
+
101
+ ### Computation Parameters
102
+
103
+ - **predictions** (`list` of `lists` of `float`): Normalized bounding boxes in ltrb format (0.0 to 1.0)
104
+ - **gold_labels** (`list` of `lists` of `int`): Class labels for each element (0 = padding)
105
+
106
+ **Note**:
107
+
108
+ - Elements with label == 0 are treated as padding
109
+ - Text elements (text_label_index) and other underlays are excluded when checking each underlay
110
+ - Very small elements (< 0.1% of canvas) are filtered out
111
+
112
+ ## Returns
113
+
114
+ Returns a dictionary containing:
115
+
116
+ - **underlay-effectiveness-strict** (`float`): Strict mode score (0.0 to 1.0)
117
+ - **underlay-effectiveness-loose** (`float`): Loose mode score (0.0 to 1.0)
118
+
119
+ ## Interpretation
120
+
121
+ - **Higher is better** (range: 0.0 to 1.0)
122
+ - **Value of 1.0**: All underlay elements have foreground content on top (perfect)
123
+ - **Value of 0.7-1.0**: Most underlays are effective
124
+ - **Value of 0.5-0.7**: Some underlays are not effectively used
125
+ - **Value < 0.5**: Many underlays lack foreground content (poor design)
126
+ - **Value of 0.0**: No underlays have elements on top (problematic)
127
+
128
+ ### Mode Differences
129
+
130
+ **Strict Mode**:
131
+
132
+ - Binary scoring (0 or 1 per underlay)
133
+ - Requires complete containment of a foreground element
134
+ - More conservative evaluation
135
+
136
+ **Loose Mode**:
137
+
138
+ - Continuous scoring based on overlap ratio
139
+ - Partial overlaps count proportionally
140
+ - More lenient evaluation
141
+
142
+ ### Use Cases
143
+
144
+ - **Poster/presentation layout evaluation**: Ensure decoration layers function properly
145
+ - **Multi-layer designs**: Validate foreground/background hierarchy
146
+ - **Content-aware generation**: Assess whether models understand layer relationships
147
+ - **Design quality**: Identify layouts with ineffective underlay usage
148
+
149
+ ### Key Insights
150
+
151
+ - **Purpose of underlay**: Should support foreground content, not exist independently
152
+ - **Layout hierarchy matters**: Underlay effectiveness indicates proper layer understanding
153
+ - **Design intent**: Some layouts intentionally have standalone decorative elements
154
+ - **Context-specific**: Most relevant for poster, flyer, and presentation layouts
155
+
156
+ ## Citations
157
+
158
+ ```bibtex
159
+ @inproceedings{hsu2023posterlayout,
160
+ title={Posterlayout: A new benchmark and approach for content-aware visual-textual presentation layout},
161
+ author={Hsu, Hsiao Yuan and He, Xiangteng and Peng, Yuxin and Kong, Hao and Zhang, Qing},
162
+ booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
163
+ pages={6018--6026},
164
+ year={2023}
165
+ }
166
+ ```
167
+
168
+ ## References
169
+
170
+ - **Paper**: [PosterLayout (Hsu et al., CVPR 2023)](https://arxiv.org/abs/2303.15937)
171
+ - **Reference Implementation**: [PosterLayout eval.py](https://github.com/PKU-ICST-MIPL/PosterLayout-CVPR2023/blob/main/eval.py)
172
+
173
+ ## Related Metrics
174
+
175
+ - [Layout Overlay](../layout_overlay/): Measures overlap excluding underlay
176
+ - [Layout Occlusion](../layout_occlusion/): Evaluates coverage of salient regions
177
+ - [Layout Validity](../layout_validity/): Checks basic validity constraints
layout-underlay-effectiveness.py CHANGED
@@ -4,10 +4,9 @@ import datasets as ds
4
  import evaluate
5
  import numpy as np
6
  import numpy.typing as npt
 
7
 
8
  _DESCRIPTION = r"""\
9
- Computes the non-flatness of regions that text elements are solely put on, referring to CGL-GAN.
10
-
11
  Computes the ratio of valid underlay elements to total underlay elements used in PosterLayout. Intuitively, underlay should be placed under other non-underlay elements.
12
  - strict: scoring the underlay as:
13
  - 1: there is a non-underlay element completely inside
@@ -16,7 +15,15 @@ Computes the ratio of valid underlay elements to total underlay elements used in
16
  """
17
 
18
  _KWARGS_DESCRIPTION = """\
19
- FIXME
 
 
 
 
 
 
 
 
20
  """
21
 
22
  _CITATION = """\
@@ -30,6 +37,7 @@ _CITATION = """\
30
  """
31
 
32
 
 
33
  class LayoutUnderlayEffectiveness(evaluate.Metric):
34
  def __init__(
35
  self,
@@ -106,7 +114,9 @@ class LayoutUnderlayEffectiveness(evaluate.Metric):
106
  def _compute_und_l(
107
  self, predictions: npt.NDArray[np.float64], gold_labels: npt.NDArray[np.int64]
108
  ) -> float:
109
- metrics, avali = 0.0, 0
 
 
110
 
111
  for gold_label, prediction in zip(gold_labels, predictions):
112
  und = 0
@@ -127,9 +137,12 @@ class LayoutUnderlayEffectiveness(evaluate.Metric):
127
  ios = self.metrics_inter_oneside(bb1, bb2)
128
  max_ios = max(max_ios, ios)
129
  und += max_ios
130
- metrics += und / n1
 
131
 
132
- return metrics / avali if avali > 0 else 0.0
 
 
133
 
134
  def _compute_und_s(
135
  self, predictions: npt.NDArray[np.float64], gold_labels: npt.NDArray[np.int64]
@@ -145,7 +158,9 @@ class LayoutUnderlayEffectiveness(evaluate.Metric):
145
 
146
  return c1 and c2 and c3 and c4
147
 
148
- metrics, avali = 0.0, 0
 
 
149
 
150
  for gold_label, prediction in zip(gold_labels, predictions):
151
  und = 0
@@ -165,9 +180,11 @@ class LayoutUnderlayEffectiveness(evaluate.Metric):
165
  if is_contain(bb1, bb2):
166
  und += 1
167
  break
168
- metrics += und / n1
 
169
 
170
- return metrics / avali if avali > 0 else 0.0
 
171
 
172
  def _compute(
173
  self,
 
4
  import evaluate
5
  import numpy as np
6
  import numpy.typing as npt
7
+ from evaluate.utils.file_utils import add_start_docstrings
8
 
9
  _DESCRIPTION = r"""\
 
 
10
  Computes the ratio of valid underlay elements to total underlay elements used in PosterLayout. Intuitively, underlay should be placed under other non-underlay elements.
11
  - strict: scoring the underlay as:
12
  - 1: there is a non-underlay element completely inside
 
15
  """
16
 
17
  _KWARGS_DESCRIPTION = """\
18
+ Args:
19
+ predictions (`list` of `lists` of `float`): A list of lists of floats representing normalized `ltrb`-format bounding boxes.
20
+ gold_labels (`list` of `lists` of `int`): A list of lists of integers representing class labels.
21
+
22
+ Returns:
23
+ float: The ratio of valid underlay elements to total underlay elements.
24
+
25
+ Examples:
26
+ FIXME
27
  """
28
 
29
  _CITATION = """\
 
37
  """
38
 
39
 
40
+ @add_start_docstrings(_DESCRIPTION, _KWARGS_DESCRIPTION)
41
  class LayoutUnderlayEffectiveness(evaluate.Metric):
42
  def __init__(
43
  self,
 
114
  def _compute_und_l(
115
  self, predictions: npt.NDArray[np.float64], gold_labels: npt.NDArray[np.int64]
116
  ) -> float:
117
+ # metrics, avali = 0.0, 0
118
+ metrics = []
119
+ avali = 0
120
 
121
  for gold_label, prediction in zip(gold_labels, predictions):
122
  und = 0
 
137
  ios = self.metrics_inter_oneside(bb1, bb2)
138
  max_ios = max(max_ios, ios)
139
  und += max_ios
140
+ # metrics += und / n1
141
+ metrics.append(und / n1)
142
 
143
+ # return metrics / avali if avali > 0 else 0.0
144
+ # return {"mean": np.mean(metrics), "std": np.std(metrics)}
145
+ return float(np.mean(metrics))
146
 
147
  def _compute_und_s(
148
  self, predictions: npt.NDArray[np.float64], gold_labels: npt.NDArray[np.int64]
 
158
 
159
  return c1 and c2 and c3 and c4
160
 
161
+ # metrics, avali = 0.0, 0
162
+ metrics = []
163
+ avali = 0
164
 
165
  for gold_label, prediction in zip(gold_labels, predictions):
166
  und = 0
 
180
  if is_contain(bb1, bb2):
181
  und += 1
182
  break
183
+ # metrics += und / n1
184
+ metrics.append(und / n1)
185
 
186
+ # return metrics / avali if avali > 0 else 0.0
187
+ return float(np.mean(metrics))
188
 
189
  def _compute(
190
  self,
requirements.txt CHANGED
@@ -1,89 +1,134 @@
1
- aiofiles==23.2.1 ; python_version >= "3.9" and python_version < "4.0"
2
- aiohttp==3.9.3 ; python_version >= "3.9" and python_version < "4.0"
3
- aiosignal==1.3.1 ; python_version >= "3.9" and python_version < "4.0"
4
- altair==5.2.0 ; python_version >= "3.9" and python_version < "4.0"
5
- annotated-types==0.6.0 ; python_version >= "3.9" and python_version < "4.0"
6
- anyio==4.2.0 ; python_version >= "3.9" and python_version < "4.0"
7
- arrow==1.3.0 ; python_version >= "3.9" and python_version < "4.0"
8
- async-timeout==4.0.3 ; python_version >= "3.9" and python_version < "3.11"
9
- attrs==23.2.0 ; python_version >= "3.9" and python_version < "4.0"
10
- binaryornot==0.4.4 ; python_version >= "3.9" and python_version < "4.0"
11
- certifi==2024.2.2 ; python_version >= "3.9" and python_version < "4.0"
12
- chardet==5.2.0 ; python_version >= "3.9" and python_version < "4.0"
13
- charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "4.0"
14
- click==8.1.7 ; python_version >= "3.9" and python_version < "4.0"
15
- colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0"
16
- contourpy==1.2.0 ; python_version >= "3.9" and python_version < "4.0"
17
- cookiecutter==2.5.0 ; python_version >= "3.9" and python_version < "4.0"
18
- cycler==0.12.1 ; python_version >= "3.9" and python_version < "4.0"
19
- datasets==2.17.0 ; python_version >= "3.9" and python_version < "4.0"
20
- dill==0.3.8 ; python_version >= "3.9" and python_version < "4.0"
21
- evaluate[template]==0.4.1 ; python_version >= "3.9" and python_version < "4.0"
22
- exceptiongroup==1.2.0 ; python_version >= "3.9" and python_version < "3.11"
23
- fastapi==0.109.2 ; python_version >= "3.9" and python_version < "4.0"
24
- ffmpy==0.3.1 ; python_version >= "3.9" and python_version < "4.0"
25
- filelock==3.13.1 ; python_version >= "3.9" and python_version < "4.0"
26
- fonttools==4.48.1 ; python_version >= "3.9" and python_version < "4.0"
27
- frozenlist==1.4.1 ; python_version >= "3.9" and python_version < "4.0"
28
- fsspec==2023.10.0 ; python_version >= "3.9" and python_version < "4.0"
29
- fsspec[http]==2023.10.0 ; python_version >= "3.9" and python_version < "4.0"
30
- gradio-client==0.10.0 ; python_version >= "3.9" and python_version < "4.0"
31
- gradio==4.18.0 ; python_version >= "3.9" and python_version < "4.0"
32
- h11==0.14.0 ; python_version >= "3.9" and python_version < "4.0"
33
- httpcore==1.0.2 ; python_version >= "3.9" and python_version < "4.0"
34
- httpx==0.26.0 ; python_version >= "3.9" and python_version < "4.0"
35
- huggingface-hub==0.20.3 ; python_version >= "3.9" and python_version < "4.0"
36
- idna==3.6 ; python_version >= "3.9" and python_version < "4.0"
37
- importlib-resources==6.1.1 ; python_version >= "3.9" and python_version < "4.0"
38
- jinja2==3.1.3 ; python_version >= "3.9" and python_version < "4.0"
39
- jsonschema-specifications==2023.12.1 ; python_version >= "3.9" and python_version < "4.0"
40
- jsonschema==4.21.1 ; python_version >= "3.9" and python_version < "4.0"
41
- kiwisolver==1.4.5 ; python_version >= "3.9" and python_version < "4.0"
42
- markdown-it-py==3.0.0 ; python_version >= "3.9" and python_version < "4.0"
43
- markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "4.0"
44
- matplotlib==3.8.2 ; python_version >= "3.9" and python_version < "4.0"
45
- mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0"
46
- multidict==6.0.5 ; python_version >= "3.9" and python_version < "4.0"
47
- multiprocess==0.70.16 ; python_version >= "3.9" and python_version < "4.0"
48
- numpy==1.26.4 ; python_version >= "3.9" and python_version < "4.0"
49
- orjson==3.9.13 ; python_version >= "3.9" and python_version < "4.0"
50
- packaging==23.2 ; python_version >= "3.9" and python_version < "4.0"
51
- pandas==2.2.0 ; python_version >= "3.9" and python_version < "4.0"
52
- pillow==10.2.0 ; python_version >= "3.9" and python_version < "4.0"
53
- pyarrow-hotfix==0.6 ; python_version >= "3.9" and python_version < "4.0"
54
- pyarrow==15.0.0 ; python_version >= "3.9" and python_version < "4.0"
55
- pydantic-core==2.16.2 ; python_version >= "3.9" and python_version < "4.0"
56
- pydantic==2.6.1 ; python_version >= "3.9" and python_version < "4.0"
57
- pydub==0.25.1 ; python_version >= "3.9" and python_version < "4.0"
58
- pygments==2.17.2 ; python_version >= "3.9" and python_version < "4.0"
59
- pyparsing==3.1.1 ; python_version >= "3.9" and python_version < "4.0"
60
- python-dateutil==2.8.2 ; python_version >= "3.9" and python_version < "4.0"
61
- python-multipart==0.0.9 ; python_version >= "3.9" and python_version < "4.0"
62
- python-slugify==8.0.4 ; python_version >= "3.9" and python_version < "4.0"
63
- pytz==2024.1 ; python_version >= "3.9" and python_version < "4.0"
64
- pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0"
65
- referencing==0.33.0 ; python_version >= "3.9" and python_version < "4.0"
66
- requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0"
67
- responses==0.18.0 ; python_version >= "3.9" and python_version < "4.0"
68
- rich==13.7.0 ; python_version >= "3.9" and python_version < "4.0"
69
- rpds-py==0.17.1 ; python_version >= "3.9" and python_version < "4.0"
70
- ruff==0.2.1 ; python_version >= "3.9" and python_version < "4.0"
71
- semantic-version==2.10.0 ; python_version >= "3.9" and python_version < "4.0"
72
- shellingham==1.5.4 ; python_version >= "3.9" and python_version < "4.0"
73
- six==1.16.0 ; python_version >= "3.9" and python_version < "4.0"
74
- sniffio==1.3.0 ; python_version >= "3.9" and python_version < "4.0"
75
- starlette==0.36.3 ; python_version >= "3.9" and python_version < "4.0"
76
- text-unidecode==1.3 ; python_version >= "3.9" and python_version < "4.0"
77
- tomlkit==0.12.0 ; python_version >= "3.9" and python_version < "4.0"
78
- toolz==0.12.1 ; python_version >= "3.9" and python_version < "4.0"
79
- tqdm==4.66.2 ; python_version >= "3.9" and python_version < "4.0"
80
- typer[all]==0.9.0 ; python_version >= "3.9" and python_version < "4.0"
81
- types-python-dateutil==2.8.19.20240106 ; python_version >= "3.9" and python_version < "4.0"
82
- typing-extensions==4.9.0 ; python_version >= "3.9" and python_version < "4.0"
83
- tzdata==2024.1 ; python_version >= "3.9" and python_version < "4.0"
84
- urllib3==2.2.0 ; python_version >= "3.9" and python_version < "4.0"
85
- uvicorn==0.27.1 ; python_version >= "3.9" and python_version < "4.0"
86
- websockets==11.0.3 ; python_version >= "3.9" and python_version < "4.0"
87
- xxhash==3.4.1 ; python_version >= "3.9" and python_version < "4.0"
88
- yarl==1.9.4 ; python_version >= "3.9" and python_version < "4.0"
89
- zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file was autogenerated by uv via the following command:
2
+ # uv export --package layout_underlay_effectiveness --no-dev --no-hashes --format requirements-txt
3
+ aiohappyeyeballs==2.6.1
4
+ # via aiohttp
5
+ aiohttp==3.13.2
6
+ # via fsspec
7
+ aiosignal==1.4.0
8
+ # via aiohttp
9
+ anyio==4.12.0
10
+ # via httpx
11
+ attrs==25.4.0
12
+ # via aiohttp
13
+ certifi==2025.11.12
14
+ # via
15
+ # httpcore
16
+ # httpx
17
+ # requests
18
+ charset-normalizer==3.4.4
19
+ # via requests
20
+ click==8.3.1
21
+ # via typer-slim
22
+ colorama==0.4.6 ; sys_platform == 'win32'
23
+ # via
24
+ # click
25
+ # tqdm
26
+ datasets==4.4.2
27
+ # via evaluate
28
+ dill==0.4.0
29
+ # via
30
+ # datasets
31
+ # evaluate
32
+ # multiprocess
33
+ evaluate==0.4.6
34
+ # via layout-underlay-effectiveness
35
+ filelock==3.20.1
36
+ # via
37
+ # datasets
38
+ # huggingface-hub
39
+ frozenlist==1.8.0
40
+ # via
41
+ # aiohttp
42
+ # aiosignal
43
+ fsspec==2025.10.0
44
+ # via
45
+ # datasets
46
+ # evaluate
47
+ # huggingface-hub
48
+ h11==0.16.0
49
+ # via httpcore
50
+ hf-xet==1.2.0 ; platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
51
+ # via huggingface-hub
52
+ httpcore==1.0.9
53
+ # via httpx
54
+ httpx==0.28.1
55
+ # via
56
+ # datasets
57
+ # huggingface-hub
58
+ huggingface-hub==1.2.3
59
+ # via
60
+ # datasets
61
+ # evaluate
62
+ idna==3.11
63
+ # via
64
+ # anyio
65
+ # httpx
66
+ # requests
67
+ # yarl
68
+ multidict==6.7.0
69
+ # via
70
+ # aiohttp
71
+ # yarl
72
+ multiprocess==0.70.18
73
+ # via
74
+ # datasets
75
+ # evaluate
76
+ numpy==2.2.6
77
+ # via
78
+ # datasets
79
+ # evaluate
80
+ # pandas
81
+ packaging==25.0
82
+ # via
83
+ # datasets
84
+ # evaluate
85
+ # huggingface-hub
86
+ pandas==2.3.3
87
+ # via
88
+ # datasets
89
+ # evaluate
90
+ propcache==0.4.1
91
+ # via
92
+ # aiohttp
93
+ # yarl
94
+ pyarrow==22.0.0
95
+ # via datasets
96
+ python-dateutil==2.9.0.post0
97
+ # via pandas
98
+ pytz==2025.2
99
+ # via pandas
100
+ pyyaml==6.0.3
101
+ # via
102
+ # datasets
103
+ # huggingface-hub
104
+ requests==2.32.5
105
+ # via
106
+ # datasets
107
+ # evaluate
108
+ shellingham==1.5.4
109
+ # via huggingface-hub
110
+ six==1.17.0
111
+ # via python-dateutil
112
+ tqdm==4.67.1
113
+ # via
114
+ # datasets
115
+ # evaluate
116
+ # huggingface-hub
117
+ typer-slim==0.21.0
118
+ # via huggingface-hub
119
+ typing-extensions==4.15.0
120
+ # via
121
+ # aiosignal
122
+ # anyio
123
+ # huggingface-hub
124
+ # typer-slim
125
+ tzdata==2025.3
126
+ # via pandas
127
+ urllib3==2.6.2
128
+ # via requests
129
+ xxhash==3.6.0
130
+ # via
131
+ # datasets
132
+ # evaluate
133
+ yarl==1.22.0
134
+ # via aiohttp