amlpai04 commited on
Commit
e03657f
·
1 Parent(s): cadea01

add favicon

Browse files
app/content/main_sub_title.md CHANGED
@@ -1,3 +1,3 @@
1
- <a href="https://riksarkivet.se">
2
- <img src="https://raw.githubusercontent.com/Borg93/Riksarkivet_docs/main/docs/assets/fav-removebg-preview.png" width="17%" align="left" margin-left="100" />
3
  </a>
 
1
+ <a href="https://huggingface.co/Riksarkivet">
2
+ <img src="app/assets/images/fav-removebg-preview.png" width="17%" align="right" margin-right="100" />
3
  </a>
app/main.py CHANGED
@@ -14,6 +14,7 @@ from app.tabs.templating import (
14
  TEMPLATE_YAML_FOLDER,
15
  template_output_yaml_code,
16
  )
 
17
 
18
  from htrflow.models.huggingface.trocr import TrOCR
19
 
@@ -24,6 +25,7 @@ gr.set_static_paths(paths=[TEMPLATE_YAML_FOLDER])
24
  # TODO add colab
25
  # TDOO addd eexmaple for api
26
 
 
27
  def load_markdown(language, section, content_dir="app/content"):
28
  """Load markdown content from files."""
29
  if language is None:
@@ -37,10 +39,29 @@ def load_markdown(language, section, content_dir="app/content"):
37
  return f"## Content missing for {file_path} in {language}"
38
 
39
 
40
- with gr.Blocks(title="HTRflow", theme=theme, css=css) as demo:
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  with gr.Row():
42
  with gr.Column(scale=1):
43
- pass
 
 
 
 
 
 
44
  with gr.Column(scale=2):
45
  gr.Markdown(load_markdown(None, "main_title"))
46
  with gr.Column(scale=1):
@@ -56,6 +77,10 @@ with gr.Blocks(title="HTRflow", theme=theme, css=css) as demo:
56
  with gr.Tab(label="Visualize Result") as tab_visualizer:
57
  visualizer.render()
58
 
 
 
 
 
59
  @demo.load()
60
  def inital_yaml_code():
61
  tmp_dir = "tmp/"
@@ -69,10 +94,6 @@ with gr.Blocks(title="HTRflow", theme=theme, css=css) as demo:
69
  def inital_yaml_code(template_output_yaml_code):
70
  return template_output_yaml_code
71
 
72
- @demo.load()
73
- def inital_trocr_load():
74
- return TrOCR("Riksarkivet/trocr-base-handwritten-hist-swe-2")
75
-
76
  def sync_gradio_objects(input_value, state_value):
77
  """Synchronize the YAML state if there is a mismatch."""
78
  return input_value if input_value != state_value else gr.skip()
@@ -100,6 +121,7 @@ with gr.Blocks(title="HTRflow", theme=theme, css=css) as demo:
100
  fn=sync_gradio_object_state,
101
  )
102
 
 
103
 
104
  demo.queue()
105
 
@@ -108,6 +130,5 @@ if __name__ == "__main__":
108
  server_name="0.0.0.0",
109
  server_port=7860,
110
  enable_monitoring=True,
111
- ssr_mode=True
112
  # show_error=True,
113
  )
 
14
  TEMPLATE_YAML_FOLDER,
15
  template_output_yaml_code,
16
  )
17
+ from gradio_modal import Modal
18
 
19
  from htrflow.models.huggingface.trocr import TrOCR
20
 
 
25
  # TODO add colab
26
  # TDOO addd eexmaple for api
27
 
28
+
29
  def load_markdown(language, section, content_dir="app/content"):
30
  """Load markdown content from files."""
31
  if language is None:
 
39
  return f"## Content missing for {file_path} in {language}"
40
 
41
 
42
+ matomo = """
43
+ <!-- Matomo Tag Manager -->
44
+ <script>
45
+ var _mtm = window._mtm = window._mtm || [];
46
+ _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
47
+ (function() {
48
+ var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
49
+ g.async=true; g.src='https://matomo.riksarkivet.se/js/container_pWJwXoXG.js';; s.parentNode.insertBefore(g,s);
50
+ })();
51
+ </script>
52
+ <!-- End Matomo Tag Manager -->
53
+ """
54
+
55
+ with gr.Blocks(title="HTRflow", theme=theme, css=css, head=matomo) as demo:
56
  with gr.Row():
57
  with gr.Column(scale=1):
58
+ help_button = gr.Button("Help", scale=0)
59
+ with Modal(visible=False) as help_modal:
60
+ with gr.Tab("How to use App"):
61
+ gr.Markdown("# How it works")
62
+ with gr.Tab("Contact"):
63
+ pass
64
+
65
  with gr.Column(scale=2):
66
  gr.Markdown(load_markdown(None, "main_title"))
67
  with gr.Column(scale=1):
 
77
  with gr.Tab(label="Visualize Result") as tab_visualizer:
78
  visualizer.render()
79
 
80
+ @demo.load()
81
+ def inital_trocr_load():
82
+ TrOCR("Riksarkivet/trocr-base-handwritten-hist-swe-2")
83
+
84
  @demo.load()
85
  def inital_yaml_code():
86
  tmp_dir = "tmp/"
 
94
  def inital_yaml_code(template_output_yaml_code):
95
  return template_output_yaml_code
96
 
 
 
 
 
97
  def sync_gradio_objects(input_value, state_value):
98
  """Synchronize the YAML state if there is a mismatch."""
99
  return input_value if input_value != state_value else gr.skip()
 
121
  fn=sync_gradio_object_state,
122
  )
123
 
124
+ help_button.click(lambda: Modal(visible=True), None, help_modal)
125
 
126
  demo.queue()
127
 
 
130
  server_name="0.0.0.0",
131
  server_port=7860,
132
  enable_monitoring=True,
 
133
  # show_error=True,
134
  )
app/tabs/templating.py CHANGED
@@ -70,7 +70,7 @@ with gr.Blocks() as templating_block:
70
  with gr.Row():
71
  dropdown_selection_template = gr.Dropdown(
72
  label="Choose template",
73
- info="template info",
74
  value="Simple",
75
  choices=["Simple", "Nested", "Custom"],
76
  multiselect=False,
 
70
  with gr.Row():
71
  dropdown_selection_template = gr.Dropdown(
72
  label="Choose template",
73
+ info="Choice a suitable template for your material",
74
  value="Simple",
75
  choices=["Simple", "Nested", "Custom"],
76
  multiselect=False,
app/tabs/visualizer.py CHANGED
@@ -38,27 +38,28 @@ def load_visualize_state_from_submit(col: Collection, progress):
38
  continue
39
 
40
  if node.text_result:
41
- recog_conf_values[i] = list(zip(
42
- node.text_result.texts,
43
- node.text_result.scores
44
- ))
45
-
46
- annotated_image = draw_polygons(
47
- image=page_image,
48
- polygons=line_polygons
49
- )
50
  annotated_page_node = np.clip(annotated_image, 0, 255).astype(np.uint8)
51
 
52
- results.append({
53
- "page_image": page_node,
54
- "annotated_page_node": annotated_page_node,
55
- "line_crops": line_crops,
56
- "recog_conf_values": _convert_conf_values_to_df(recog_conf_values),
57
- })
 
 
58
 
59
  return results
60
 
61
- def _convert_conf_values_to_df(conf_values: Dict[int, List[tuple[str, float]]]) -> pd.DataFrame:
 
 
 
62
  """Convert recognition confidence values to a pandas DataFrame."""
63
  return pd.DataFrame(
64
  [
@@ -68,6 +69,7 @@ def _convert_conf_values_to_df(conf_values: Dict[int, List[tuple[str, float]]])
68
  ]
69
  )
70
 
 
71
  with gr.Blocks() as visualizer:
72
  with gr.Column(variant="panel"):
73
  with gr.Row():
@@ -85,7 +87,7 @@ with gr.Blocks() as visualizer:
85
  )
86
 
87
  visualize_button = gr.Button(
88
- "Visualize", scale=0, min_width=200, variant="secondary"
89
  )
90
 
91
  progress_bar = gr.Textbox(visible=False, show_label=False)
@@ -95,7 +97,7 @@ with gr.Blocks() as visualizer:
95
  interactive=False,
96
  preview=True,
97
  label="Cropped Polygons",
98
- height=200,
99
  )
100
  df_for_cropped_images = gr.Dataframe(
101
  label="Cropped Transcriptions",
 
38
  continue
39
 
40
  if node.text_result:
41
+ recog_conf_values[i] = list(
42
+ zip(node.text_result.texts, node.text_result.scores)
43
+ )
44
+
45
+ annotated_image = draw_polygons(image=page_image, polygons=line_polygons)
 
 
 
 
46
  annotated_page_node = np.clip(annotated_image, 0, 255).astype(np.uint8)
47
 
48
+ results.append(
49
+ {
50
+ "page_image": page_node,
51
+ "annotated_page_node": annotated_page_node,
52
+ "line_crops": line_crops,
53
+ "recog_conf_values": _convert_conf_values_to_df(recog_conf_values),
54
+ }
55
+ )
56
 
57
  return results
58
 
59
+
60
+ def _convert_conf_values_to_df(
61
+ conf_values: Dict[int, List[tuple[str, float]]]
62
+ ) -> pd.DataFrame:
63
  """Convert recognition confidence values to a pandas DataFrame."""
64
  return pd.DataFrame(
65
  [
 
69
  ]
70
  )
71
 
72
+
73
  with gr.Blocks() as visualizer:
74
  with gr.Column(variant="panel"):
75
  with gr.Row():
 
87
  )
88
 
89
  visualize_button = gr.Button(
90
+ "Visualize", scale=0, min_width=200, variant="primary"
91
  )
92
 
93
  progress_bar = gr.Textbox(visible=False, show_label=False)
 
97
  interactive=False,
98
  preview=True,
99
  label="Cropped Polygons",
100
+ height=400,
101
  )
102
  df_for_cropped_images = gr.Dataframe(
103
  label="Cropped Transcriptions",
pyproject.toml CHANGED
@@ -23,6 +23,7 @@ dependencies = [
23
  "pandas>=2.2.3",
24
  "tqdm>=4.67.1",
25
  "pillow>=11.1.0",
 
26
  ]
27
 
28
  [project.urls]
 
23
  "pandas>=2.2.3",
24
  "tqdm>=4.67.1",
25
  "pillow>=11.1.0",
26
+ "gradio-modal>=0.0.4",
27
  ]
28
 
29
  [project.urls]
uv.lock CHANGED
@@ -678,6 +678,18 @@ wheels = [
678
  { url = "https://files.pythonhosted.org/packages/a6/3d/e05202dd42581c2a1e93c730d10a0ef45bc40921332c9aa0d6645bbf0e2b/gradio_client-1.5.4-py3-none-any.whl", hash = "sha256:ad38c9a6f7fc590e822627f5bf5685321a7822b8f1a88b76d00a0621a43162d6", size = 321364 },
679
  ]
680
 
 
 
 
 
 
 
 
 
 
 
 
 
681
  [[package]]
682
  name = "h11"
683
  version = "0.14.0"
@@ -719,6 +731,7 @@ source = { editable = "." }
719
  dependencies = [
720
  { name = "datasets" },
721
  { name = "gradio" },
 
722
  { name = "htrflow" },
723
  { name = "pandas" },
724
  { name = "pillow" },
@@ -737,6 +750,7 @@ dev = [
737
  requires-dist = [
738
  { name = "datasets", specifier = ">=3.2.0" },
739
  { name = "gradio", specifier = ">=5.11.0" },
 
740
  { name = "htrflow", specifier = "==0.2.0" },
741
  { name = "pandas", specifier = ">=2.2.3" },
742
  { name = "pillow", specifier = ">=11.1.0" },
@@ -1342,7 +1356,6 @@ name = "nvidia-cublas-cu12"
1342
  version = "12.4.5.8"
1343
  source = { registry = "https://pypi.org/simple" }
1344
  wheels = [
1345
- { url = "https://files.pythonhosted.org/packages/7f/7f/7fbae15a3982dc9595e49ce0f19332423b260045d0a6afe93cdbe2f1f624/nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0f8aa1706812e00b9f19dfe0cdb3999b092ccb8ca168c0db5b8ea712456fd9b3", size = 363333771 },
1346
  { url = "https://files.pythonhosted.org/packages/ae/71/1c91302526c45ab494c23f61c7a84aa568b8c1f9d196efa5993957faf906/nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b", size = 363438805 },
1347
  ]
1348
 
@@ -1351,7 +1364,6 @@ name = "nvidia-cuda-cupti-cu12"
1351
  version = "12.4.127"
1352
  source = { registry = "https://pypi.org/simple" }
1353
  wheels = [
1354
- { url = "https://files.pythonhosted.org/packages/93/b5/9fb3d00386d3361b03874246190dfec7b206fd74e6e287b26a8fcb359d95/nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:79279b35cf6f91da114182a5ce1864997fd52294a87a16179ce275773799458a", size = 12354556 },
1355
  { url = "https://files.pythonhosted.org/packages/67/42/f4f60238e8194a3106d06a058d494b18e006c10bb2b915655bd9f6ea4cb1/nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb", size = 13813957 },
1356
  ]
1357
 
@@ -1360,7 +1372,6 @@ name = "nvidia-cuda-nvrtc-cu12"
1360
  version = "12.4.127"
1361
  source = { registry = "https://pypi.org/simple" }
1362
  wheels = [
1363
- { url = "https://files.pythonhosted.org/packages/77/aa/083b01c427e963ad0b314040565ea396f914349914c298556484f799e61b/nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0eedf14185e04b76aa05b1fea04133e59f465b6f960c0cbf4e37c3cb6b0ea198", size = 24133372 },
1364
  { url = "https://files.pythonhosted.org/packages/2c/14/91ae57cd4db3f9ef7aa99f4019cfa8d54cb4caa7e00975df6467e9725a9f/nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338", size = 24640306 },
1365
  ]
1366
 
@@ -1369,7 +1380,6 @@ name = "nvidia-cuda-runtime-cu12"
1369
  version = "12.4.127"
1370
  source = { registry = "https://pypi.org/simple" }
1371
  wheels = [
1372
- { url = "https://files.pythonhosted.org/packages/a1/aa/b656d755f474e2084971e9a297def515938d56b466ab39624012070cb773/nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:961fe0e2e716a2a1d967aab7caee97512f71767f852f67432d572e36cb3a11f3", size = 894177 },
1373
  { url = "https://files.pythonhosted.org/packages/ea/27/1795d86fe88ef397885f2e580ac37628ed058a92ed2c39dc8eac3adf0619/nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5", size = 883737 },
1374
  ]
1375
 
@@ -1392,7 +1402,6 @@ dependencies = [
1392
  { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
1393
  ]
1394
  wheels = [
1395
- { url = "https://files.pythonhosted.org/packages/7a/8a/0e728f749baca3fbeffad762738276e5df60851958be7783af121a7221e7/nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5dad8008fc7f92f5ddfa2101430917ce2ffacd86824914c82e28990ad7f00399", size = 211422548 },
1396
  { url = "https://files.pythonhosted.org/packages/27/94/3266821f65b92b3138631e9c8e7fe1fb513804ac934485a8d05776e1dd43/nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9", size = 211459117 },
1397
  ]
1398
 
@@ -1401,7 +1410,6 @@ name = "nvidia-curand-cu12"
1401
  version = "10.3.5.147"
1402
  source = { registry = "https://pypi.org/simple" }
1403
  wheels = [
1404
- { url = "https://files.pythonhosted.org/packages/80/9c/a79180e4d70995fdf030c6946991d0171555c6edf95c265c6b2bf7011112/nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1f173f09e3e3c76ab084aba0de819c49e56614feae5c12f69883f4ae9bb5fad9", size = 56314811 },
1405
  { url = "https://files.pythonhosted.org/packages/8a/6d/44ad094874c6f1b9c654f8ed939590bdc408349f137f9b98a3a23ccec411/nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b", size = 56305206 },
1406
  ]
1407
 
@@ -1415,7 +1423,6 @@ dependencies = [
1415
  { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
1416
  ]
1417
  wheels = [
1418
- { url = "https://files.pythonhosted.org/packages/46/6b/a5c33cf16af09166845345275c34ad2190944bcc6026797a39f8e0a282e0/nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d338f155f174f90724bbde3758b7ac375a70ce8e706d70b018dd3375545fc84e", size = 127634111 },
1419
  { url = "https://files.pythonhosted.org/packages/3a/e1/5b9089a4b2a4790dfdea8b3a006052cfecff58139d5a4e34cb1a51df8d6f/nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260", size = 127936057 },
1420
  ]
1421
 
@@ -1427,7 +1434,6 @@ dependencies = [
1427
  { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
1428
  ]
1429
  wheels = [
1430
- { url = "https://files.pythonhosted.org/packages/96/a9/c0d2f83a53d40a4a41be14cea6a0bf9e668ffcf8b004bd65633f433050c0/nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9d32f62896231ebe0480efd8a7f702e143c98cfaa0e8a76df3386c1ba2b54df3", size = 207381987 },
1431
  { url = "https://files.pythonhosted.org/packages/db/f7/97a9ea26ed4bbbfc2d470994b8b4f338ef663be97b8f677519ac195e113d/nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1", size = 207454763 },
1432
  ]
1433
 
@@ -1444,7 +1450,6 @@ name = "nvidia-nvjitlink-cu12"
1444
  version = "12.4.127"
1445
  source = { registry = "https://pypi.org/simple" }
1446
  wheels = [
1447
- { url = "https://files.pythonhosted.org/packages/02/45/239d52c05074898a80a900f49b1615d81c07fceadd5ad6c4f86a987c0bc4/nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4abe7fef64914ccfa909bc2ba39739670ecc9e820c83ccc7a6ed414122599b83", size = 20552510 },
1448
  { url = "https://files.pythonhosted.org/packages/ff/ff/847841bacfbefc97a00036e0fce5a0f086b640756dc38caea5e1bb002655/nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57", size = 21066810 },
1449
  ]
1450
 
@@ -1453,7 +1458,6 @@ name = "nvidia-nvtx-cu12"
1453
  version = "12.4.127"
1454
  source = { registry = "https://pypi.org/simple" }
1455
  wheels = [
1456
- { url = "https://files.pythonhosted.org/packages/06/39/471f581edbb7804b39e8063d92fc8305bdc7a80ae5c07dbe6ea5c50d14a5/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7959ad635db13edf4fc65c06a6e9f9e55fc2f92596db928d169c0bb031e88ef3", size = 100417 },
1457
  { url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144 },
1458
  ]
1459
 
 
678
  { url = "https://files.pythonhosted.org/packages/a6/3d/e05202dd42581c2a1e93c730d10a0ef45bc40921332c9aa0d6645bbf0e2b/gradio_client-1.5.4-py3-none-any.whl", hash = "sha256:ad38c9a6f7fc590e822627f5bf5685321a7822b8f1a88b76d00a0621a43162d6", size = 321364 },
679
  ]
680
 
681
+ [[package]]
682
+ name = "gradio-modal"
683
+ version = "0.0.4"
684
+ source = { registry = "https://pypi.org/simple" }
685
+ dependencies = [
686
+ { name = "gradio" },
687
+ ]
688
+ sdist = { url = "https://files.pythonhosted.org/packages/e2/fd/3b383f9ee8d60625e9e26871ba4adcacbedeab132041b94290758e02e543/gradio_modal-0.0.4.tar.gz", hash = "sha256:717ae699072a171648cfa1b84bc153be84e92d04e9ad58c1bc59af68ef332726", size = 1180812 }
689
+ wheels = [
690
+ { url = "https://files.pythonhosted.org/packages/05/3d/76f454de84ae1dccbf2b7023e933afb8dde5fdd89e9476786726ef770737/gradio_modal-0.0.4-py3-none-any.whl", hash = "sha256:d96e817d2e934d9e1b835b06474f45fd349b5ccea499d1536bfb4bd38f62dedb", size = 1106241 },
691
+ ]
692
+
693
  [[package]]
694
  name = "h11"
695
  version = "0.14.0"
 
731
  dependencies = [
732
  { name = "datasets" },
733
  { name = "gradio" },
734
+ { name = "gradio-modal" },
735
  { name = "htrflow" },
736
  { name = "pandas" },
737
  { name = "pillow" },
 
750
  requires-dist = [
751
  { name = "datasets", specifier = ">=3.2.0" },
752
  { name = "gradio", specifier = ">=5.11.0" },
753
+ { name = "gradio-modal", specifier = ">=0.0.4" },
754
  { name = "htrflow", specifier = "==0.2.0" },
755
  { name = "pandas", specifier = ">=2.2.3" },
756
  { name = "pillow", specifier = ">=11.1.0" },
 
1356
  version = "12.4.5.8"
1357
  source = { registry = "https://pypi.org/simple" }
1358
  wheels = [
 
1359
  { url = "https://files.pythonhosted.org/packages/ae/71/1c91302526c45ab494c23f61c7a84aa568b8c1f9d196efa5993957faf906/nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b", size = 363438805 },
1360
  ]
1361
 
 
1364
  version = "12.4.127"
1365
  source = { registry = "https://pypi.org/simple" }
1366
  wheels = [
 
1367
  { url = "https://files.pythonhosted.org/packages/67/42/f4f60238e8194a3106d06a058d494b18e006c10bb2b915655bd9f6ea4cb1/nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb", size = 13813957 },
1368
  ]
1369
 
 
1372
  version = "12.4.127"
1373
  source = { registry = "https://pypi.org/simple" }
1374
  wheels = [
 
1375
  { url = "https://files.pythonhosted.org/packages/2c/14/91ae57cd4db3f9ef7aa99f4019cfa8d54cb4caa7e00975df6467e9725a9f/nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338", size = 24640306 },
1376
  ]
1377
 
 
1380
  version = "12.4.127"
1381
  source = { registry = "https://pypi.org/simple" }
1382
  wheels = [
 
1383
  { url = "https://files.pythonhosted.org/packages/ea/27/1795d86fe88ef397885f2e580ac37628ed058a92ed2c39dc8eac3adf0619/nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5", size = 883737 },
1384
  ]
1385
 
 
1402
  { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
1403
  ]
1404
  wheels = [
 
1405
  { url = "https://files.pythonhosted.org/packages/27/94/3266821f65b92b3138631e9c8e7fe1fb513804ac934485a8d05776e1dd43/nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9", size = 211459117 },
1406
  ]
1407
 
 
1410
  version = "10.3.5.147"
1411
  source = { registry = "https://pypi.org/simple" }
1412
  wheels = [
 
1413
  { url = "https://files.pythonhosted.org/packages/8a/6d/44ad094874c6f1b9c654f8ed939590bdc408349f137f9b98a3a23ccec411/nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b", size = 56305206 },
1414
  ]
1415
 
 
1423
  { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
1424
  ]
1425
  wheels = [
 
1426
  { url = "https://files.pythonhosted.org/packages/3a/e1/5b9089a4b2a4790dfdea8b3a006052cfecff58139d5a4e34cb1a51df8d6f/nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260", size = 127936057 },
1427
  ]
1428
 
 
1434
  { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
1435
  ]
1436
  wheels = [
 
1437
  { url = "https://files.pythonhosted.org/packages/db/f7/97a9ea26ed4bbbfc2d470994b8b4f338ef663be97b8f677519ac195e113d/nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1", size = 207454763 },
1438
  ]
1439
 
 
1450
  version = "12.4.127"
1451
  source = { registry = "https://pypi.org/simple" }
1452
  wheels = [
 
1453
  { url = "https://files.pythonhosted.org/packages/ff/ff/847841bacfbefc97a00036e0fce5a0f086b640756dc38caea5e1bb002655/nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57", size = 21066810 },
1454
  ]
1455
 
 
1458
  version = "12.4.127"
1459
  source = { registry = "https://pypi.org/simple" }
1460
  wheels = [
 
1461
  { url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144 },
1462
  ]
1463