supervisely 6.73.274__py3-none-any.whl → 6.73.276__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.

Potentially problematic release.


This version of supervisely might be problematic. Click here for more details.

Files changed (20) hide show
  1. supervisely/app/widgets/custom_models_selector/custom_models_selector.py +54 -44
  2. supervisely/convert/__init__.py +4 -1
  3. supervisely/convert/base_converter.py +2 -9
  4. supervisely/convert/pointcloud/nuscenes_conv/__init__.py +0 -0
  5. supervisely/convert/pointcloud/nuscenes_conv/nuscenes_converter.py +227 -0
  6. supervisely/convert/pointcloud/pointcloud_converter.py +52 -1
  7. supervisely/convert/pointcloud/sly/sly_pointcloud_converter.py +8 -21
  8. supervisely/convert/pointcloud/sly/sly_pointcloud_helper.py +4 -2
  9. supervisely/convert/pointcloud_episodes/lyft/lyft_converter.py +19 -20
  10. supervisely/convert/pointcloud_episodes/nuscenes_conv/__init__.py +0 -0
  11. supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_converter.py +305 -0
  12. supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_helper.py +265 -0
  13. supervisely/convert/pointcloud_episodes/pointcloud_episodes_converter.py +82 -27
  14. supervisely/convert/pointcloud_episodes/sly/sly_pointcloud_episodes_converter.py +9 -8
  15. {supervisely-6.73.274.dist-info → supervisely-6.73.276.dist-info}/METADATA +1 -1
  16. {supervisely-6.73.274.dist-info → supervisely-6.73.276.dist-info}/RECORD +20 -15
  17. {supervisely-6.73.274.dist-info → supervisely-6.73.276.dist-info}/LICENSE +0 -0
  18. {supervisely-6.73.274.dist-info → supervisely-6.73.276.dist-info}/WHEEL +0 -0
  19. {supervisely-6.73.274.dist-info → supervisely-6.73.276.dist-info}/entry_points.txt +0 -0
  20. {supervisely-6.73.274.dist-info → supervisely-6.73.276.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,6 @@
1
- from typing import Dict, Optional, Union
1
+ import imghdr
2
+ import os
3
+ from typing import Dict, List, Optional, Set, Tuple, Union
2
4
 
3
5
  from supervisely import (
4
6
  Api,
@@ -10,9 +12,11 @@ from supervisely import (
10
12
  )
11
13
  from supervisely.api.module_api import ApiField
12
14
  from supervisely.convert.base_converter import BaseConverter
15
+ from supervisely.io.fs import get_file_ext, get_file_name
13
16
  from supervisely.io.json import load_json_file
14
- from supervisely.project.project_settings import LabelingInterface
15
17
  from supervisely.pointcloud.pointcloud import ALLOWED_POINTCLOUD_EXTENSIONS
18
+ from supervisely.pointcloud.pointcloud import validate_ext as validate_pcd_ext
19
+ from supervisely.project.project_settings import LabelingInterface
16
20
 
17
21
 
18
22
  class PointcloudEpisodeConverter(BaseConverter):
@@ -89,13 +93,9 @@ class PointcloudEpisodeConverter(BaseConverter):
89
93
  ):
90
94
  """Upload converted data to Supervisely"""
91
95
 
92
- meta, renamed_classes, renamed_tags = self.merge_metas_with_conflicts(
93
- api, dataset_id
94
- )
96
+ meta, renamed_classes, renamed_tags = self.merge_metas_with_conflicts(api, dataset_id)
95
97
 
96
- existing_names = set(
97
- [pcde.name for pcde in api.pointcloud_episode.get_list(dataset_id)]
98
- )
98
+ existing_names = set([pcde.name for pcde in api.pointcloud_episode.get_list(dataset_id)])
99
99
 
100
100
  if log_progress:
101
101
  progress, progress_cb = self.get_progress(
@@ -130,28 +130,20 @@ class PointcloudEpisodeConverter(BaseConverter):
130
130
  camera_names = []
131
131
  if len(item._related_images) > 0:
132
132
  img_paths, rimg_ann_paths = list(zip(*item._related_images))
133
- rimg_hashes = api.pointcloud_episode.upload_related_images(
134
- img_paths
135
- )
133
+ rimg_hashes = api.pointcloud_episode.upload_related_images(img_paths)
136
134
  for img_ind, (img_hash, rimg_ann_path) in enumerate(
137
135
  zip(rimg_hashes, rimg_ann_paths)
138
136
  ):
139
137
  meta_json = load_json_file(rimg_ann_path)
140
138
  try:
141
139
  if ApiField.META not in meta_json:
142
- raise ValueError(
143
- "Related image meta not found in json file."
144
- )
140
+ raise ValueError("Related image meta not found in json file.")
145
141
  if ApiField.NAME not in meta_json:
146
- raise ValueError(
147
- "Related image name not found in json file."
148
- )
142
+ raise ValueError("Related image name not found in json file.")
149
143
  if "deviceId" not in meta_json[ApiField.META].keys():
150
144
  camera_names.append(f"CAM_{str(img_ind).zfill(2)}")
151
145
  else:
152
- camera_names.append(
153
- meta_json[ApiField.META]["deviceId"]
154
- )
146
+ camera_names.append(meta_json[ApiField.META]["deviceId"])
155
147
  rimg_infos.append(
156
148
  {
157
149
  ApiField.ENTITY_ID: pcd_id,
@@ -162,7 +154,7 @@ class PointcloudEpisodeConverter(BaseConverter):
162
154
  )
163
155
  api.pointcloud.add_related_images(rimg_infos, camera_names)
164
156
  except Exception as e:
165
- logger.warn(
157
+ logger.warning(
166
158
  f"Failed to upload related image or add it to pointcloud episo: {repr(e)}"
167
159
  )
168
160
  continue
@@ -171,14 +163,77 @@ class PointcloudEpisodeConverter(BaseConverter):
171
163
  progress_cb(len(batch))
172
164
 
173
165
  if self.items_count > 0:
174
- ann = self.to_supervisely(
175
- self._items[0], meta, renamed_classes, renamed_tags
176
- )
177
- api.pointcloud_episode.annotation.append(
178
- dataset_id, ann, frame_to_pointcloud_ids
179
- )
166
+ ann = self.to_supervisely(self._items[0], meta, renamed_classes, renamed_tags)
167
+ api.pointcloud_episode.annotation.append(dataset_id, ann, frame_to_pointcloud_ids)
180
168
 
181
169
  if log_progress:
182
170
  if is_development():
183
171
  progress.close()
184
172
  logger.info(f"Dataset ID:{dataset_id} has been successfully uploaded.")
173
+
174
+ def _collect_items_if_format_not_detected(self) -> Tuple[List[Item], bool, Set[str]]:
175
+ only_modality_items = True
176
+ unsupported_exts = set()
177
+ pcd_dict = {}
178
+ frames_pcd_map = None
179
+ used_img_ext = set()
180
+ rimg_dict, rimg_json_dict = {}, {}
181
+ for root, _, files in os.walk(self._input_data):
182
+ for file in files:
183
+ full_path = os.path.join(root, file)
184
+ if file == "frame_pointcloud_map.json":
185
+ frames_pcd_map = load_json_file(full_path)
186
+ continue
187
+
188
+ ext = get_file_ext(full_path)
189
+ recognized_ext = imghdr.what(full_path)
190
+ if ext == ".json":
191
+ rimg_json_dict[file] = full_path
192
+ elif recognized_ext:
193
+ if ext.lower() == ".pcd":
194
+ logger.warning(
195
+ f"File '{file}' has been recognized as '.{recognized_ext}' format. Skipping."
196
+ )
197
+ continue
198
+ rimg_dict[file] = full_path
199
+ if ext not in used_img_ext:
200
+ used_img_ext.add(ext)
201
+ elif ext.lower() in self.allowed_exts:
202
+ try:
203
+ validate_pcd_ext(ext)
204
+ pcd_dict[file] = full_path
205
+ except:
206
+ pass
207
+ else:
208
+ only_modality_items = False
209
+ unsupported_exts.add(ext)
210
+
211
+ items = []
212
+ updated_frames_pcd_map = {}
213
+ if frames_pcd_map:
214
+ list_of_pcd_names = list(frames_pcd_map.values())
215
+ else:
216
+ list_of_pcd_names = sorted(pcd_dict.keys())
217
+
218
+ for i, pcd_name in enumerate(list_of_pcd_names):
219
+ if pcd_name in pcd_dict:
220
+ updated_frames_pcd_map[i] = pcd_name
221
+ item = self.Item(pcd_dict[pcd_name], i)
222
+ for ext in used_img_ext:
223
+ rimg_name = f"{item.name}{ext}"
224
+ if not rimg_name in rimg_dict:
225
+ rimg_name = f"{get_file_name(item.name)}{ext}"
226
+ if rimg_name in rimg_dict:
227
+ rimg_path = rimg_dict[rimg_name]
228
+ rimg_ann_name = f"{rimg_name}.json"
229
+ if rimg_ann_name in rimg_json_dict:
230
+ rimg_ann_path = rimg_json_dict[rimg_ann_name]
231
+ item.set_related_images((rimg_path, rimg_ann_path))
232
+ items.append(item)
233
+ else:
234
+ logger.warning(f"Pointcloud file {pcd_name} not found. Skipping frame.")
235
+ continue
236
+ self._frame_pointcloud_map = updated_frames_pcd_map
237
+ self._frame_count = len(self._frame_pointcloud_map)
238
+
239
+ return items, only_modality_items, unsupported_exts
@@ -48,7 +48,7 @@ class SLYPointcloudEpisodesConverter(PointcloudEpisodeConverter):
48
48
  return False
49
49
 
50
50
  def validate_format(self) -> bool:
51
- ann_or_rimg_detected = False
51
+ sly_ann_detected = False
52
52
  ann_path = None
53
53
  pcd_dict = {}
54
54
  frames_pcd_map = None
@@ -74,7 +74,7 @@ class SLYPointcloudEpisodesConverter(PointcloudEpisodeConverter):
74
74
  recognized_ext = imghdr.what(full_path)
75
75
  if file in JUNK_FILES:
76
76
  continue
77
- elif ext in self.ann_ext:
77
+ elif ext == self.ann_ext:
78
78
  rimg_json_dict[file] = full_path
79
79
  elif recognized_ext:
80
80
  if ext.lower() == ".pcd":
@@ -94,6 +94,7 @@ class SLYPointcloudEpisodesConverter(PointcloudEpisodeConverter):
94
94
 
95
95
  if self._meta is not None:
96
96
  meta = self._meta
97
+ sly_ann_detected = True
97
98
  else:
98
99
  meta = ProjectMeta()
99
100
  if ann_path is not None:
@@ -101,7 +102,10 @@ class SLYPointcloudEpisodesConverter(PointcloudEpisodeConverter):
101
102
  meta = self.generate_meta_from_annotation(ann_path, meta)
102
103
  is_valid = self.validate_ann_file(ann_path, meta)
103
104
  if is_valid:
104
- ann_or_rimg_detected = True
105
+ sly_ann_detected = True
106
+
107
+ if not sly_ann_detected:
108
+ return False
105
109
 
106
110
  self._items = []
107
111
  updated_frames_pcd_map = {}
@@ -124,18 +128,15 @@ class SLYPointcloudEpisodesConverter(PointcloudEpisodeConverter):
124
128
  if rimg_ann_name in rimg_json_dict:
125
129
  rimg_ann_path = rimg_json_dict[rimg_ann_name]
126
130
  item.set_related_images((rimg_path, rimg_ann_path))
127
- ann_or_rimg_detected = True
128
131
  self._items.append(item)
129
132
  else:
130
- logger.warn(f"Pointcloud file {pcd_name} not found. Skipping frame.")
133
+ logger.warning(f"Pointcloud file {pcd_name} not found. Skipping frame.")
131
134
  continue
132
135
  self._frame_pointcloud_map = updated_frames_pcd_map
133
136
  self._frame_count = len(self._frame_pointcloud_map)
134
137
 
135
138
  self._meta = meta
136
- if self._frame_pointcloud_map is not None and len(self._items) > 0:
137
- ann_or_rimg_detected = True
138
- return ann_or_rimg_detected
139
+ return sly_ann_detected
139
140
 
140
141
  def to_supervisely(
141
142
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.274
3
+ Version: 6.73.276
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -205,7 +205,7 @@ supervisely/app/widgets/copy_to_clipboard/__init__.py,sha256=47DEQpj8HBSa-_TImW-
205
205
  supervisely/app/widgets/copy_to_clipboard/copy_to_clipboard.py,sha256=UlBbXeCBS2_60wtJrMZj3jqPhQJR0wJ3T7vfK4WA588,3283
206
206
  supervisely/app/widgets/copy_to_clipboard/template.html,sha256=4gGPot40yVqFkpVVUZGz3DPogVFlZKQ98YM01EUfQDY,492
207
207
  supervisely/app/widgets/custom_models_selector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
- supervisely/app/widgets/custom_models_selector/custom_models_selector.py,sha256=yt9rmJR9cHcYorzb04g8yEu5yxrEsRxZVtmlb6-rsMU,20835
208
+ supervisely/app/widgets/custom_models_selector/custom_models_selector.py,sha256=L4FFkTLODWpzrJ09JsCjJA9hNi7ITz9qe1uuRGkf874,21495
209
209
  supervisely/app/widgets/custom_models_selector/style.css,sha256=-zPPXHnJvatYj_xVVAb7T8uoSsUTyhm5xCKWkkFQ78E,548
210
210
  supervisely/app/widgets/custom_models_selector/template.html,sha256=k7f_Xl6nDUXXwu6IY_RblYni5TbZRRxCBduY5O_SyFs,2908
211
211
  supervisely/app/widgets/dataset_thumbnail/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -560,8 +560,8 @@ supervisely/cli/teamfiles/teamfiles_upload.py,sha256=xnsW2rvdq1e-KGjF1tMBu7Oxh3n
560
560
  supervisely/collection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
561
561
  supervisely/collection/key_indexed_collection.py,sha256=x2UVlkprspWhhae9oLUzjTWBoIouiWY9UQSS_MozfH0,37643
562
562
  supervisely/collection/str_enum.py,sha256=Zp29yFGvnxC6oJRYNNlXhO2lTSdsriU1wiGHj6ahEJE,1250
563
- supervisely/convert/__init__.py,sha256=fgJPpXP8jOt4lMbG0lYqWLOTDNcw695vINCqvZ0i6BA,2742
564
- supervisely/convert/base_converter.py,sha256=Y_uOUFJtqC44y_J6VsFB90hao8rrXkffV1ilxdj2T5o,18352
563
+ supervisely/convert/__init__.py,sha256=qomoncLRQeOzJkMceC6okFbyYcVQIXdvH_VG0-yKMqo,2955
564
+ supervisely/convert/base_converter.py,sha256=F2fD1zq3agV1H_T59V4nduI_0V4uVe9bjfPeu85L_8c,18004
565
565
  supervisely/convert/converter.py,sha256=tWxTDfFv7hwzQhUQrBxzfr6WP8FUGFX_ewg5T2HbUYo,8959
566
566
  supervisely/convert/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
567
567
  supervisely/convert/image/image_converter.py,sha256=r-qdhuwOsk727mXIM26ucQhkoIKigu1M0BF-tw9IfGg,10321
@@ -609,7 +609,7 @@ supervisely/convert/image/yolo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
609
609
  supervisely/convert/image/yolo/yolo_converter.py,sha256=cg5___X5MzvR-rZbNLmaKtr0MdRnyqtEzbBq5UBnYZ0,11171
610
610
  supervisely/convert/image/yolo/yolo_helper.py,sha256=aVCvOuSz73iwOM01lWb2N6ImXYsz0FMup9ACXKC1-Ek,7837
611
611
  supervisely/convert/pointcloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
612
- supervisely/convert/pointcloud/pointcloud_converter.py,sha256=WeJqEPhVQNWwJn5MiPoC3I1mUh8tH84BsGd2uHHjpnc,4907
612
+ supervisely/convert/pointcloud/pointcloud_converter.py,sha256=yCCpzm7GrvL6WT4lNesvtYWWwdO3DO32JIOBBSSQgSA,7130
613
613
  supervisely/convert/pointcloud/bag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
614
614
  supervisely/convert/pointcloud/bag/bag_converter.py,sha256=WWd6A2hS7H4MRgtLdJ-yYgmNU-Wk2eycl6LTTJM2GKQ,11391
615
615
  supervisely/convert/pointcloud/bag/bag_helper.py,sha256=2TFe49isZTxMhya-PApqLPxrvGnvRFMBc_--BwyCpWU,4284
@@ -619,20 +619,25 @@ supervisely/convert/pointcloud/las/las_helper.py,sha256=1gQ3OZLpe6D25CY_jXWDsrLB
619
619
  supervisely/convert/pointcloud/lyft/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
620
620
  supervisely/convert/pointcloud/lyft/lyft_converter.py,sha256=bM9R3LLt4l5frK1Lhmy_WnhGUYCC7rH94v94sqmLxjY,11010
621
621
  supervisely/convert/pointcloud/lyft/lyft_helper.py,sha256=bTe7ryLPfSkW0MjzFP-6AMyDMBtPu8Xk9cx0g0MomoQ,8521
622
+ supervisely/convert/pointcloud/nuscenes_conv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
623
+ supervisely/convert/pointcloud/nuscenes_conv/nuscenes_converter.py,sha256=YZlPjY8F_k270Mqir7yce7KIOh9SlU8i80nr-IaAj1Y,10121
622
624
  supervisely/convert/pointcloud/ply/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
623
625
  supervisely/convert/pointcloud/ply/ply_converter.py,sha256=2ZCYkhJQzUev-sWGsBwCPtj1TGjdcx8o-Q--RAHavp8,2698
624
626
  supervisely/convert/pointcloud/ply/ply_helper.py,sha256=YfLiV9m6a4NNEMs0J32dmMTLffMLX4-JPTThMHOEK4w,268
625
627
  supervisely/convert/pointcloud/sly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
626
- supervisely/convert/pointcloud/sly/sly_pointcloud_converter.py,sha256=cIBx5mEwtbJevxUCksPvC0KZRtQX_q3h7MaLSjli0N0,5455
627
- supervisely/convert/pointcloud/sly/sly_pointcloud_helper.py,sha256=fhXrRBFqAMpJpparkAwxAaLGN_yArRuAbKTAK4bJpfw,3898
628
+ supervisely/convert/pointcloud/sly/sly_pointcloud_converter.py,sha256=r56Rwil-55cRnd0sIePFGrf_xXa-lKQSfwhEUrjOquk,5070
629
+ supervisely/convert/pointcloud/sly/sly_pointcloud_helper.py,sha256=kOluL97FfCFfIvnUE_FeN8iQLMlwdiMR5gayorOGDXw,3968
628
630
  supervisely/convert/pointcloud_episodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
629
- supervisely/convert/pointcloud_episodes/pointcloud_episodes_converter.py,sha256=ynqF1PSn3zWCD4SS7nvLE5eerAG1Nvj_StsoJ5JrNPg,6703
631
+ supervisely/convert/pointcloud_episodes/pointcloud_episodes_converter.py,sha256=qULUzO96BvWgNVmyxSQ0pUPBPG3WHgUJuK_U7Z8NM-g,9428
630
632
  supervisely/convert/pointcloud_episodes/bag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
631
633
  supervisely/convert/pointcloud_episodes/bag/bag_converter.py,sha256=jzWKXoFUWu11d5WlPfT1hphCubYpq_lhQZmhh07xZdQ,1659
632
634
  supervisely/convert/pointcloud_episodes/lyft/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
633
- supervisely/convert/pointcloud_episodes/lyft/lyft_converter.py,sha256=wdq_dO5Vejj0Df5Fuo-oQBWkEF1IGBr89XuBBHilGmM,10384
635
+ supervisely/convert/pointcloud_episodes/lyft/lyft_converter.py,sha256=QXreWUJ-QhoWgLPqRxCayatYCCCuSV6Z2XCZKScrD3o,10419
636
+ supervisely/convert/pointcloud_episodes/nuscenes_conv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
637
+ supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_converter.py,sha256=hveKmKVe-jOvME1mMbDwynTlL5kKqd53T9BDmFitbkM,12808
638
+ supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_helper.py,sha256=RrTlskRrqxwzrjFfT4e5aI9YeAxnun7Io9fjoicZmnY,8959
634
639
  supervisely/convert/pointcloud_episodes/sly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
635
- supervisely/convert/pointcloud_episodes/sly/sly_pointcloud_episodes_converter.py,sha256=7ONcZMOUJCNpmc0tmMX6FnNG0lu8Nj9K2SSTQHaSXFM,6188
640
+ supervisely/convert/pointcloud_episodes/sly/sly_pointcloud_episodes_converter.py,sha256=fSEGxuTtFTAOLNBAZncOxw9PVALBOtB7yZ8qTCaET7w,6102
636
641
  supervisely/convert/pointcloud_episodes/sly/sly_pointcloud_episodes_helper.py,sha256=h4WvNH6cEHtjxxhCnU7Hs2vkyJMye0qwabqXNYVTywE,3570
637
642
  supervisely/convert/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
638
643
  supervisely/convert/video/video_converter.py,sha256=f-b6FexBjXw9xWv5w8lxlNxCh4FvacNolX-WQDibWFs,11338
@@ -1062,9 +1067,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1062
1067
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
1063
1068
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
1064
1069
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1065
- supervisely-6.73.274.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1066
- supervisely-6.73.274.dist-info/METADATA,sha256=PHTIEhW0ErGXlcajujh7MS3qSy4cq8TDdAIhh_eIY7U,33573
1067
- supervisely-6.73.274.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1068
- supervisely-6.73.274.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1069
- supervisely-6.73.274.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1070
- supervisely-6.73.274.dist-info/RECORD,,
1070
+ supervisely-6.73.276.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1071
+ supervisely-6.73.276.dist-info/METADATA,sha256=IEQlHjL5OYrRUVXISxSa5jZEaxfStqtTGbn40HHu810,33573
1072
+ supervisely-6.73.276.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1073
+ supervisely-6.73.276.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1074
+ supervisely-6.73.276.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1075
+ supervisely-6.73.276.dist-info/RECORD,,