supervisely 6.73.390__py3-none-any.whl → 6.73.391__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. supervisely/app/widgets/experiment_selector/experiment_selector.py +20 -3
  2. supervisely/app/widgets/experiment_selector/template.html +49 -70
  3. supervisely/app/widgets/report_thumbnail/report_thumbnail.py +19 -4
  4. supervisely/decorators/profile.py +20 -0
  5. supervisely/nn/benchmark/utils/detection/utlis.py +7 -0
  6. supervisely/nn/experiments.py +4 -0
  7. supervisely/nn/inference/gui/serving_gui_template.py +71 -11
  8. supervisely/nn/inference/inference.py +108 -6
  9. supervisely/nn/training/gui/classes_selector.py +246 -27
  10. supervisely/nn/training/gui/gui.py +318 -234
  11. supervisely/nn/training/gui/hyperparameters_selector.py +2 -2
  12. supervisely/nn/training/gui/model_selector.py +42 -1
  13. supervisely/nn/training/gui/tags_selector.py +1 -1
  14. supervisely/nn/training/gui/train_val_splits_selector.py +8 -7
  15. supervisely/nn/training/gui/training_artifacts.py +10 -1
  16. supervisely/nn/training/gui/training_process.py +17 -1
  17. supervisely/nn/training/train_app.py +227 -72
  18. supervisely/template/__init__.py +2 -0
  19. supervisely/template/base_generator.py +90 -0
  20. supervisely/template/experiment/__init__.py +0 -0
  21. supervisely/template/experiment/experiment.html.jinja +537 -0
  22. supervisely/template/experiment/experiment_generator.py +996 -0
  23. supervisely/template/experiment/header.html.jinja +154 -0
  24. supervisely/template/experiment/sidebar.html.jinja +240 -0
  25. supervisely/template/experiment/sly-style.css +397 -0
  26. supervisely/template/experiment/template.html.jinja +18 -0
  27. supervisely/template/extensions.py +172 -0
  28. supervisely/template/template_renderer.py +253 -0
  29. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/METADATA +3 -1
  30. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/RECORD +34 -23
  31. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/LICENSE +0 -0
  32. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/WHEEL +0 -0
  33. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/entry_points.txt +0 -0
  34. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,253 @@
1
+ import os
2
+ import re
3
+ from pathlib import Path
4
+ from typing import Any, Dict, List, Optional, Tuple, Union
5
+
6
+ from jinja2 import Environment, FileSystemLoader
7
+
8
+ from supervisely import logger
9
+ from supervisely.template.extensions import (
10
+ AutoSidebarExtension,
11
+ MarkdownExtension,
12
+ TabExtension,
13
+ TabsExtension,
14
+ )
15
+
16
+
17
+ class TemplateRenderer:
18
+
19
+ def __init__(
20
+ self,
21
+ generate_sidebar: bool = False,
22
+ jinja_options: Optional[Dict[str, Any]] = None,
23
+ jinja_extensions: Optional[list] = None,
24
+ add_header_ids: bool = True,
25
+ ):
26
+ """
27
+ Initializes template renderer with specified parameters.
28
+
29
+ :param jinja_extensions: List of Jinja2 extensions to use. By default includes MarkdownExtension.
30
+ :type jinja_extensions: Optional[list]
31
+ :param jinja_options: Additional options for configuring Jinja2 environment.
32
+ :type jinja_options: Optional[Dict[str, Any]]
33
+ """
34
+ if jinja_options is None:
35
+ jinja_options = {
36
+ "autoescape": False,
37
+ "trim_blocks": True,
38
+ "lstrip_blocks": True,
39
+ }
40
+
41
+ if jinja_extensions is None:
42
+ jinja_extensions = [MarkdownExtension, TabsExtension, TabExtension]
43
+ if generate_sidebar:
44
+ jinja_extensions.append(AutoSidebarExtension)
45
+
46
+ self.jinja_extensions = jinja_extensions
47
+ self.jinja_options = jinja_options
48
+ self.add_header_ids = add_header_ids
49
+ self.environment = None
50
+
51
+ def render(
52
+ self,
53
+ template_path: str,
54
+ context: dict,
55
+ ) -> str:
56
+ """
57
+ Renders a template with the provided context.
58
+
59
+ :param template_path: Path to the markdown template file relative to template dir.
60
+ :type template_path: str
61
+ :param context: Dictionary with data for template rendering.
62
+ :type context: Dict[str, Any]
63
+
64
+ :returns: Result of template rendering as a string.
65
+ :rtype: str
66
+ """
67
+ # Render
68
+ p = Path(template_path)
69
+ directory = p.parent.absolute()
70
+ filename = p.name
71
+ loader = FileSystemLoader(directory)
72
+ env_options = {**self.jinja_options, "extensions": self.jinja_extensions}
73
+ environment = Environment(loader=loader, **env_options)
74
+ self.environment = environment
75
+ template = environment.get_template(filename)
76
+ html = template.render(**context)
77
+
78
+ # Generate sidebar if AutoSidebarExtension is used
79
+ if AutoSidebarExtension in self.jinja_extensions:
80
+ html = self._generate_autosidebar(html)
81
+ elif self.add_header_ids:
82
+ html = self._add_header_ids(html)
83
+
84
+ return html
85
+
86
+ def _add_header_ids(self, content_html: str) -> str:
87
+ """
88
+ Add IDs to h2 and h3 header tags for table of contents generation.
89
+
90
+ Args:
91
+ content_html: HTML content with h2 and h3 headers
92
+
93
+ Returns:
94
+ HTML content with IDs added to headers
95
+ """
96
+ def clean_title_for_id(title: str) -> str:
97
+ """Convert header title to a clean ID format"""
98
+ # Remove HTML tags if any
99
+ title = re.sub(r'<[^>]+>', '', title)
100
+ # Keep only alphanumeric characters, spaces, and hyphens
101
+ title = re.sub(r'[^\w\s-]', '', title)
102
+ # Replace spaces with hyphens and convert to lowercase
103
+ title = title.strip().lower().replace(' ', '-')
104
+ # Remove multiple consecutive hyphens
105
+ title = re.sub(r'-+', '-', title)
106
+ # Remove leading/trailing hyphens
107
+ title = title.strip('-')
108
+ return title
109
+
110
+ def replace_header(match):
111
+ """Replace header with version that includes ID"""
112
+ level = match.group(1) # Header level (2 or 3)
113
+ title = match.group(2).strip() # Header title text
114
+
115
+ # Generate clean ID
116
+ clean_id = clean_title_for_id(title)
117
+ section_id = f"{clean_id}"
118
+
119
+ # Check for potential duplicate IDs (basic check)
120
+ if section_id in used_ids:
121
+ logger.debug(f"Duplicate header ID detected: '{section_id}' for title '{title}'")
122
+ section_id += "-2" # TODO: Improve duplicate handling logic
123
+ used_ids.add(section_id)
124
+
125
+ # Return header with ID attribute
126
+ return f'<h{level} id="{section_id}">{title}</h{level}>'
127
+
128
+ # Track used IDs for duplicate detection
129
+ used_ids = set()
130
+
131
+ # Pattern to match h2 and h3 headers
132
+ header_pattern = r"<h([2-3])>(.*?)</h\1>"
133
+
134
+ # Replace all matching headers with versions that include IDs
135
+ updated_html = re.sub(header_pattern, replace_header, content_html, flags=re.IGNORECASE)
136
+
137
+ return updated_html
138
+
139
+ def _generate_autosidebar(self, content_html: str):
140
+ # Extract h2 headers and generate ids
141
+ h2_pattern = r"<h2>(.*?)</h2>"
142
+ headers = []
143
+ navigation = []
144
+ lines = content_html.split("\n")
145
+ for i, line in enumerate(lines):
146
+ match = re.search(h2_pattern, line)
147
+ if match:
148
+ title = match.group(1).strip()
149
+ section_id = f"{title.lower().replace(' ', '-')}-markdown-section"
150
+ headers.append({"index": i, "title": title, "id": section_id})
151
+ navigation.append({"id": section_id, "title": title})
152
+
153
+ # Add ids to h2 headers
154
+ new_lines = []
155
+ first_header_index = headers[0]["index"]
156
+ new_lines.extend(lines[:first_header_index])
157
+ for i, header in enumerate(headers):
158
+ new_lines.append(f'<div id="{header["id"]}" class="section">')
159
+ new_lines.append(lines[header["index"]])
160
+ if i < len(headers) - 1:
161
+ next_header_index = headers[i + 1]["index"]
162
+ new_lines.extend(lines[header["index"] + 1 : next_header_index])
163
+ new_lines.append("</div>")
164
+ else:
165
+ closing_found = False
166
+ for j in range(header["index"] + 1, len(lines)):
167
+ if lines[j].strip().startswith("</sly-iw-sidebar>"):
168
+ new_lines.append("</div>")
169
+ new_lines.extend(lines[j:])
170
+ closing_found = True
171
+ break
172
+ else:
173
+ new_lines.append(lines[j])
174
+ if not closing_found:
175
+ logger.warning(
176
+ f"</sly-iw-sidebar> closing tag not found after the last h2 header."
177
+ f" Check that all <h2> headers are presented within <sly-iw-sidebar>"
178
+ f" to generate sidebar correctly."
179
+ )
180
+ new_lines.append("</div>")
181
+ html = "\n".join(new_lines)
182
+
183
+ # Generate sidebar
184
+ sidebar_placeholder_pattern = r"^([ \t]*)<!--AUTOSIDEBAR_PLACEHOLDER-->$"
185
+ sidebar_match = re.search(sidebar_placeholder_pattern, html, re.MULTILINE)
186
+ if sidebar_match:
187
+ # base_indent = sidebar_match.group(1)
188
+ base_indent = " " * 4 * 3
189
+ sidebar_parts = []
190
+ for section in headers:
191
+ button_html = (
192
+ f"{base_indent}<div>\n"
193
+ f"{base_indent} <el-button type=\"text\" @click=\"data.scrollIntoView='{section['id']}'\"\n"
194
+ f"{base_indent} :style=\"{{fontWeight: data.scrollIntoView === '{section['id']}' ? 'bold' : 'normal'}}\">\n"
195
+ f"{base_indent} {section['title']}\n"
196
+ f"{base_indent} </el-button>\n"
197
+ f"{base_indent}</div>"
198
+ )
199
+ sidebar_parts.append(button_html)
200
+ sidebar_code = "\n".join(sidebar_parts)
201
+ html = re.sub(sidebar_placeholder_pattern, sidebar_code, html, flags=re.MULTILINE)
202
+
203
+ return html
204
+
205
+ def render_to_file(
206
+ self,
207
+ template_path: str,
208
+ context: dict,
209
+ output_path: str,
210
+ ) -> None:
211
+ """
212
+ Renders a template and saves the result to a file.
213
+
214
+ :param template_path: Path to the markdown template file relative to template dir.
215
+ :type template_path: str
216
+ :param context: Dictionary with data for template rendering.
217
+ :type context: Dict[str, Any]
218
+ :param output_path: Path to the file where the result will be saved.
219
+ :type output_path: str
220
+
221
+ :returns: None
222
+ """
223
+ rendered_content = self.render(template_path, context)
224
+ path = Path(output_path)
225
+ path.parent.mkdir(parents=True, exist_ok=True)
226
+ with open(path, "w", encoding="utf-8") as f:
227
+ f.write(rendered_content)
228
+
229
+ def add_filter(self, filter_name: str, filter_function: callable) -> None:
230
+ """
231
+ Adds a custom filter to the Jinja2 environment.
232
+
233
+ :param filter_name: Filter name.
234
+ :type filter_name: str
235
+ :param filter_function: Function that implements the filter.
236
+ :type filter_function: callable
237
+
238
+ :returns: None
239
+ """
240
+ self.environment.filters[filter_name] = filter_function
241
+
242
+ def add_global(self, variable_name: str, variable_value: Any) -> None:
243
+ """
244
+ Adds a global variable to the Jinja2 environment.
245
+
246
+ :param variable_name: Variable name.
247
+ :type variable_name: str
248
+ :param variable_value: Variable value.
249
+ :type variable_value: Any
250
+
251
+ :returns: None
252
+ """
253
+ self.environment.globals[variable_name] = variable_value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.390
3
+ Version: 6.73.391
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -136,6 +136,8 @@ Requires-Dist: plotly==5.22.0; extra == "training"
136
136
  Requires-Dist: torch; extra == "training"
137
137
  Requires-Dist: torchvision; extra == "training"
138
138
  Requires-Dist: tensorboardX; extra == "training"
139
+ Requires-Dist: markdown; extra == "training"
140
+ Requires-Dist: pymdown-extensions; extra == "training"
139
141
 
140
142
  <h1 align="center">
141
143
  <a href="https://supervisely.com"><img alt="Supervisely" title="Supervisely" src="https://i.imgur.com/B276eMS.png"></a>
@@ -255,9 +255,9 @@ supervisely/app/widgets/empty/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
255
255
  supervisely/app/widgets/empty/empty.py,sha256=fCr8I7CQ2XLo59bl2txjDrblOGiu0TzUcM-Pq6s7gKY,1285
256
256
  supervisely/app/widgets/empty/template.html,sha256=aDBKkin5aLuqByzNN517-rTYCGIg5SPKgnysYMPYjv8,40
257
257
  supervisely/app/widgets/experiment_selector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
- supervisely/app/widgets/experiment_selector/experiment_selector.py,sha256=MButdiR6j6bpvJRI9iYtO5UjQu_Dc4ABzcrPsy2YcRg,19933
258
+ supervisely/app/widgets/experiment_selector/experiment_selector.py,sha256=eJsbQzZSgl7G50pzbjB6tHsyrXEloprQgxyMnd7agIE,20559
259
259
  supervisely/app/widgets/experiment_selector/style.css,sha256=-zPPXHnJvatYj_xVVAb7T8uoSsUTyhm5xCKWkkFQ78E,548
260
- supervisely/app/widgets/experiment_selector/template.html,sha256=k7f_Xl6nDUXXwu6IY_RblYni5TbZRRxCBduY5O_SyFs,2908
260
+ supervisely/app/widgets/experiment_selector/template.html,sha256=bYNGb77q8WwRFtkhJM9_I0UzPW0kTTIOvZZmzuHLXmY,2753
261
261
  supervisely/app/widgets/fast_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
262
262
  supervisely/app/widgets/fast_table/fast_table.py,sha256=7VLdcf0kySg7_cQwBCOjSFEPUBuru_0_zQ6oAbZ7fSE,36024
263
263
  supervisely/app/widgets/fast_table/script.js,sha256=3XnKAYsGyVIvOGyxxW6djCr2-7tYYK84oWKUZ999W2I,8878
@@ -424,7 +424,7 @@ supervisely/app/widgets/reloadable_area/reloadable_area.py,sha256=eFxE3FRNR1hX5J
424
424
  supervisely/app/widgets/reloadable_area/script.js,sha256=bNVyJZjsRJ6IDhF46WOCZtNAUe36BsIR-o8JdvxfrAw,1050
425
425
  supervisely/app/widgets/reloadable_area/template.html,sha256=paxfrLxppLATh4zCiJDDKJGruR5zBIYT-M-dwvINiFw,187
426
426
  supervisely/app/widgets/report_thumbnail/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
427
- supervisely/app/widgets/report_thumbnail/report_thumbnail.py,sha256=JYEoNi9tXslx9nlxdFcklxk-4ONtb_F46H5FRxZD1p0,2163
427
+ supervisely/app/widgets/report_thumbnail/report_thumbnail.py,sha256=Nrtd4UhrBBpIfeEViZbDJpj4TCtqbGUegcLRgIukPtU,2783
428
428
  supervisely/app/widgets/report_thumbnail/template.html,sha256=7dGngqwO_xxWZLOre0f6Vml3B_qXWu0l1P96L3opJ84,429
429
429
  supervisely/app/widgets/run_app_button/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
430
430
  supervisely/app/widgets/run_app_button/run_app_button.py,sha256=cr07jabP1vF-rvH0_swVTuzpWXsvI9tHy_oQbJrHxSU,11044
@@ -682,7 +682,7 @@ supervisely/convert/volume/sly/sly_volume_converter.py,sha256=XmSuxnRqxchG87b244
682
682
  supervisely/convert/volume/sly/sly_volume_helper.py,sha256=gUY0GW3zDMlO2y-zQQG36uoXMrKkKz4-ErM1CDxFCxE,5620
683
683
  supervisely/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
684
684
  supervisely/decorators/inference.py,sha256=p0fBSg3ek2tt29h7OxQwhtvLcBhKe9kSgA8G5zZHXjE,13777
685
- supervisely/decorators/profile.py,sha256=Q0x_OaRX8_Z-Ff1NVIBnn70xyS0awU7NMfLCA5WKdW4,1324
685
+ supervisely/decorators/profile.py,sha256=mOnIIXWmk4Wf99-vQLLEopYcujIPwTao4iExepmijSE,1954
686
686
  supervisely/delme_fastapi_helpers/__init__.py,sha256=k5IkHj5IQ8BZ-sVy0rydgxJO75RNgopcZHf2K_3o0Os,237
687
687
  supervisely/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
688
688
  supervisely/export/pascal_voc.py,sha256=McFae1V6374_SV-mhd17AeZMkrE9JQjOTTyYGNcxD8Q,3104
@@ -747,7 +747,7 @@ supervisely/metric/pixel_accuracy.py,sha256=qjtxInOTkGDwPeLUnjBdzOrVRT3V6kGGOWjB
747
747
  supervisely/metric/precision_recall_metric.py,sha256=4AQCkcB84mpYQS94yJ-wkG1LBuXlQf3X_tI9f67vtR8,3426
748
748
  supervisely/metric/projects_applier.py,sha256=ORtgLQHYtNi4KYsSGaGPPWiZPexTJF9IWqX_RuLRxPk,3415
749
749
  supervisely/nn/__init__.py,sha256=ZGCDjx_cGIW8CxIWNCzVDRVfAzt7QzlkcvKvLBE8wMc,669
750
- supervisely/nn/experiments.py,sha256=hJNQtvAuxZgo8BDlp41_WpJcGVUCeYqQCkyOQi5oN1Q,9735
750
+ supervisely/nn/experiments.py,sha256=eBIggokbD59hz3BAdhSelgXirr9PetWG7tQ6ungP1qU,9980
751
751
  supervisely/nn/prediction_dto.py,sha256=oi146DJpUUBDbR-b-vYkL5WAhCZQYOGomqBDEQGbPdY,2700
752
752
  supervisely/nn/task_type.py,sha256=UJvSJ4L3I08j_e6sU6Ptu7kS5p1H09rfhfoDUSZ2iys,522
753
753
  supervisely/nn/utils.py,sha256=WoEidpLo5__R6eXsvEFH7VRxb4MtXCr9H-kchg25FDY,2965
@@ -858,7 +858,7 @@ supervisely/nn/benchmark/utils/detection/calculate_metrics.py,sha256=plgBNJXRZ2M
858
858
  supervisely/nn/benchmark/utils/detection/coco_eval.py,sha256=9Pz0_zUzg8qCOWyE24wzhRoDLO5z9qPuWoqc8Pj29do,4135
859
859
  supervisely/nn/benchmark/utils/detection/metrics.py,sha256=oyictdJ7rRDUkaVvHoxntywW5zZweS8pIJ1bN6JgXtE,2420
860
860
  supervisely/nn/benchmark/utils/detection/sly2coco.py,sha256=0O2LSCU5zIX34mD4hZIv8O3-j6LwnB0DqhiVPAiosO8,6883
861
- supervisely/nn/benchmark/utils/detection/utlis.py,sha256=dKhsOGmQKH20-IlD90DWfZzi171j65N71hNdHRCX5Hs,954
861
+ supervisely/nn/benchmark/utils/detection/utlis.py,sha256=NaH5VHF2I3KQLOu2UlB7-fSA6zhY8xbzROgLe7VqpV4,1131
862
862
  supervisely/nn/benchmark/utils/semantic_segmentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
863
863
  supervisely/nn/benchmark/utils/semantic_segmentation/calculate_metrics.py,sha256=4ifC5r_Q880yIr8gWnjEzwKbS0vizMWqSF4XeyaMvh0,924
864
864
  supervisely/nn/benchmark/utils/semantic_segmentation/evaluator.py,sha256=iPHRo1LLgOzB1S7xD-6ThtoPTQ0tL5Ipu88sZhFMHyM,29261
@@ -893,7 +893,7 @@ supervisely/nn/benchmark/visualization/widgets/table/__init__.py,sha256=47DEQpj8
893
893
  supervisely/nn/benchmark/visualization/widgets/table/table.py,sha256=atmDnF1Af6qLQBUjLhK18RMDKAYlxnsuVHMSEa5a-e8,4319
894
894
  supervisely/nn/inference/__init__.py,sha256=QFukX2ip-U7263aEPCF_UCFwj6EujbMnsgrXp5Bbt8I,1623
895
895
  supervisely/nn/inference/cache.py,sha256=yqVPIWzhIDRHwrCIpdm-gPxUM2rH8BD98omF659RElw,34938
896
- supervisely/nn/inference/inference.py,sha256=xRlxOm8ep_Zha97NpRszrxVdg5xDregpShKkZNNTq0g,178340
896
+ supervisely/nn/inference/inference.py,sha256=angMpnfUyPa5OQxkUn9GIliavxygyz1BytNUIks3T8M,183369
897
897
  supervisely/nn/inference/inference_request.py,sha256=y6yw0vbaRRcEBS27nq3y0sL6Gmq2qLA_Bm0GrnJGegE,14267
898
898
  supervisely/nn/inference/session.py,sha256=dIg2F-OBl68pUzcmtmcI0YQIp1WWNnrJTVMjwFN91Q4,35824
899
899
  supervisely/nn/inference/uploader.py,sha256=21a9coOimCHhEqAbV-llZWcp12847DEMoQp3N16bpK0,5425
@@ -901,7 +901,7 @@ supervisely/nn/inference/video_inference.py,sha256=8Bshjr6rDyLay5Za8IB8Dr6FURMO2
901
901
  supervisely/nn/inference/gui/__init__.py,sha256=wCxd-lF5Zhcwsis-wScDA8n1Gk_1O00PKgDviUZ3F1U,221
902
902
  supervisely/nn/inference/gui/gui.py,sha256=0OjGcU0KGZgWfLVQkBbljNy-QV22pdZ0bbpPvao5fx0,20143
903
903
  supervisely/nn/inference/gui/serving_gui.py,sha256=JCIVp3B_tX0VKMMBJ-TdRzzAMnAL-sdqHnb1vd28r50,8596
904
- supervisely/nn/inference/gui/serving_gui_template.py,sha256=LkKnhZGqCPtW5nI2ACR_3T4rn4t1kF4__tPQMPgXqIc,7142
904
+ supervisely/nn/inference/gui/serving_gui_template.py,sha256=V2FJYLyWT9a315npIeVkEEpB8Xc-AOL7TgG0wgM08sc,9777
905
905
  supervisely/nn/inference/instance_segmentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
906
906
  supervisely/nn/inference/instance_segmentation/instance_segmentation.py,sha256=TWasw61P4CDiWi2zWuIYJLZ9woLA5IxWtUNRn9u6qEU,2211
907
907
  supervisely/nn/inference/instance_segmentation/dashboard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -999,18 +999,18 @@ supervisely/nn/tracking/__init__.py,sha256=Ld1ed7ZZQZPkhX-5Xr-UbHZx5zLCm2-tInHnP
999
999
  supervisely/nn/tracking/boxmot.py,sha256=H9cQjYGL9nX_TLrfKDChhljTIiE9lffcgbwWCf_4PJU,4277
1000
1000
  supervisely/nn/tracking/tracking.py,sha256=WNrNm02B1pspA3d_AmzSJ-54RZTqWV2NZiC7FHe88bo,857
1001
1001
  supervisely/nn/training/__init__.py,sha256=gY4PCykJ-42MWKsqb9kl-skemKa8yB6t_fb5kzqR66U,111
1002
- supervisely/nn/training/train_app.py,sha256=A-L0KufMdq4-eRa1u5xB-jMyYdyDSIFZUKCOaK_hYB8,117843
1002
+ supervisely/nn/training/train_app.py,sha256=0tE1noQGvfV7oWFPadL1D87wjuHEWnBtOax4Z7p5RUI,123660
1003
1003
  supervisely/nn/training/gui/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
1004
- supervisely/nn/training/gui/classes_selector.py,sha256=Bpp-RFDQqcZ0kLJmS6ZnExkdscWwRusvF4vbWjEsKlQ,3926
1005
- supervisely/nn/training/gui/gui.py,sha256=FbKsd4Tur1YsUwQmoHhFdkP6IZILbprXbOliD9jrEyQ,44882
1006
- supervisely/nn/training/gui/hyperparameters_selector.py,sha256=5dUCYAx4E0HBLguj2B_s2nWeGGCWzv6vJeT0XvDJO3M,7746
1004
+ supervisely/nn/training/gui/classes_selector.py,sha256=tqmVwUfC2u5K53mZmvDvNOhu9Mw5mddjpB2kxRXXUO8,12453
1005
+ supervisely/nn/training/gui/gui.py,sha256=0QTIz9XXwDHyPQoDKciWGOvAZPQaJA6hbF_UrWlW4So,49130
1006
+ supervisely/nn/training/gui/hyperparameters_selector.py,sha256=bcCxJ9-8NjZa0U9XWHysrMzr8dxqXiqUgX5lbDiAm5A,7767
1007
1007
  supervisely/nn/training/gui/input_selector.py,sha256=rmirJzpdxuYONI6y5_cvMdGWBJ--T20YTsISghATHu4,2510
1008
- supervisely/nn/training/gui/model_selector.py,sha256=I6KRKyylpwUEC3CApEnzDKkWe5xqju0Az3D0Eg32Jdc,5352
1009
- supervisely/nn/training/gui/tags_selector.py,sha256=ZirVXm5NNuIDjXO3wuHDnpYTWgFVLn-W7voBudh5bP0,3772
1010
- supervisely/nn/training/gui/train_val_splits_selector.py,sha256=bNyQ2jnaQ-eA7ux6wWqMP6k6It20lmjziZPfMI7cGlo,16306
1011
- supervisely/nn/training/gui/training_artifacts.py,sha256=c0GH70ZByvnL413KWHjSKcSX8V5DStXM5sjFVZafSZo,10519
1008
+ supervisely/nn/training/gui/model_selector.py,sha256=Fvsja7n75PzqxDkDhPEkCltYsbAPPRpUxgWgIZCseks,7439
1009
+ supervisely/nn/training/gui/tags_selector.py,sha256=0yg2OGPqiHUBp3iML2vrzTOVeSKtRtR9JoMy4Snx41U,3755
1010
+ supervisely/nn/training/gui/train_val_splits_selector.py,sha256=5-Ra-qFG7ki2yFBUa7mST_BbbE_RzPgA3ubP9wTC8oY,16498
1011
+ supervisely/nn/training/gui/training_artifacts.py,sha256=8ReWCo46fEOPpjVf_jPWczZwaWCDH2a6VQGC7ic-BLA,10871
1012
1012
  supervisely/nn/training/gui/training_logs.py,sha256=GgEQMj9p98Z3p2b_-3BkHOhY7WQYELxctsRKmkbg3JY,4966
1013
- supervisely/nn/training/gui/training_process.py,sha256=2F65cuu5ypKWkdaO4uVpNLMkwXjM8dpprd7Km5aedds,3192
1013
+ supervisely/nn/training/gui/training_process.py,sha256=XJ3ELyys_rBFmLQnI9qe3QhmfZ6U0CrK1FbI6d-Fbns,3664
1014
1014
  supervisely/nn/training/gui/utils.py,sha256=cEOsYItxgGTGKxFAvn7zQcTpwHgcGRO_UNGBn8idMUI,4983
1015
1015
  supervisely/nn/training/loggers/__init__.py,sha256=DOqR-4NJv25C4Y1HCWggvGNM5mgo1CbwQOdvROOL-60,777
1016
1016
  supervisely/nn/training/loggers/base_train_logger.py,sha256=Gf_TKwSfQdSVG6P3wAeWf5t2_EJWJqOPqt_TsJ5jpBY,1914
@@ -1060,6 +1060,17 @@ supervisely/task/progress.py,sha256=TH8au8yc1PkCw-YF40sjOmXZhlEWMkk4FrPKJO_W8O4,
1060
1060
  supervisely/task/task_logger.py,sha256=_uDfqEtiwetga6aDAqcTKCKqHjZJSuUXTsHSQFNxAvI,3531
1061
1061
  supervisely/team_files/__init__.py,sha256=mtz0Z7eFvsykOcEnSVZ-5bNHsq0_YsNBjZK3qngO-DY,149
1062
1062
  supervisely/team_files/team_files_path.py,sha256=dSqz-bycImQYwAs62TD1zCD1NQdysqCQIBhEVh9EDjw,177
1063
+ supervisely/template/__init__.py,sha256=AjUhLEuoLnnj4i7YxevFELb2bScsQ0EaJAOtYxaLP2Q,152
1064
+ supervisely/template/base_generator.py,sha256=3nesbfRpueyRYljQSTnkMjeC8ERTOfjI88INITItXvA,3341
1065
+ supervisely/template/extensions.py,sha256=kTYxu_LrvFyUN3HByCebGq8ra7zUygcEyw4qTUHq3M4,5255
1066
+ supervisely/template/template_renderer.py,sha256=SzGxRdbP59uxqcZT8kZbaHN2epK8Vjfh-0jKBpkdCBY,9709
1067
+ supervisely/template/experiment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1068
+ supervisely/template/experiment/experiment.html.jinja,sha256=ALz53bAA-nwfCBoKCHM4O4xooZGEacEOHVC92bw_F-o,17598
1069
+ supervisely/template/experiment/experiment_generator.py,sha256=PNW8lqEOH4YOsA9MdkppbJxNvuzEdtpXx9kvfbNoCbM,37389
1070
+ supervisely/template/experiment/header.html.jinja,sha256=vm0XfXoMBU6nvHPrhX9k4OkkKkmu69OJFGWYvsRTrcs,12801
1071
+ supervisely/template/experiment/sidebar.html.jinja,sha256=4IxuJzcU1OT93mXMixE7EAMYfcn_lOVfCjS3VkEieSk,9323
1072
+ supervisely/template/experiment/sly-style.css,sha256=cl_wJfM-KOL0DumW5vdyLavF7mc6_hb9kh15qhD7MqM,8344
1073
+ supervisely/template/experiment/template.html.jinja,sha256=Sb20RybxMQyi9CjoqMXiGxQsnlyWTWK-TePdvfUe5XU,506
1063
1074
  supervisely/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1064
1075
  supervisely/user/user.py,sha256=4GSVIupPAxWjIxZmUtH3Dtms_vGV82-49kM_aaR2gBI,319
1065
1076
  supervisely/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1103,9 +1114,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1103
1114
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
1104
1115
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
1105
1116
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1106
- supervisely-6.73.390.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1107
- supervisely-6.73.390.dist-info/METADATA,sha256=TqfUilWvWkT1w_BZMqgjL5NuKwydVNxJzivkWUNco9k,35154
1108
- supervisely-6.73.390.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1109
- supervisely-6.73.390.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1110
- supervisely-6.73.390.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1111
- supervisely-6.73.390.dist-info/RECORD,,
1117
+ supervisely-6.73.391.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1118
+ supervisely-6.73.391.dist-info/METADATA,sha256=zN0oMPyOmo2cnOXswgAIal6RvpY8q17ySOVBovFz154,35254
1119
+ supervisely-6.73.391.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1120
+ supervisely-6.73.391.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1121
+ supervisely-6.73.391.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1122
+ supervisely-6.73.391.dist-info/RECORD,,