pixeltable 0.2.10__py3-none-any.whl → 0.2.12__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 pixeltable might be problematic. Click here for more details.

@@ -0,0 +1,234 @@
1
+ import base64
2
+ import html
3
+ import json
4
+ import logging
5
+ import mimetypes
6
+ from typing import Any, Callable, Optional
7
+
8
+ import PIL
9
+ import PIL.Image as Image
10
+ import cv2
11
+ import numpy as np
12
+
13
+ import io
14
+ import pixeltable.type_system as ts
15
+ from pixeltable.utils.http_server import get_file_uri
16
+
17
+ _logger = logging.getLogger('pixeltable')
18
+
19
+
20
+ class Formatter:
21
+ """
22
+ A factory for constructing HTML formatters for Pixeltable data. The formatters are used to customize
23
+ the rendering of `DataFrameResultSet`s in notebooks.
24
+
25
+ Args:
26
+ num_rows: Number of rows in the DataFrame being rendered.
27
+ num_cols: Number of columns in the DataFrame being rendered.
28
+ http_address: Root address of the Pixeltable HTTP server (used to construct URLs for media references).
29
+ """
30
+
31
+ __FLOAT_PRECISION = 3
32
+ __LIST_THRESHOLD = 16
33
+ __LIST_EDGEITEMS = 6
34
+ __STRING_SEP = ' ...... '
35
+ __STRING_MAX_LEN = 1000
36
+ __NESTED_STRING_MAX_LEN = 300
37
+
38
+ def __init__(self, num_rows: int, num_cols: int, http_address: str):
39
+ self.__num_rows = num_rows
40
+ self.__num_cols = num_cols
41
+ self.__http_address = http_address
42
+
43
+ def get_pandas_formatter(self, col_type: ts.ColumnType) -> Optional[Callable]:
44
+ if col_type.is_string_type():
45
+ return self.format_string
46
+ if col_type.is_float_type():
47
+ return self.format_float
48
+ if col_type.is_json_type():
49
+ return self.format_json
50
+ if col_type.is_array_type():
51
+ return self.format_array
52
+ if col_type.is_image_type():
53
+ return self.format_img
54
+ if col_type.is_video_type():
55
+ return self.format_video
56
+ if col_type.is_audio_type():
57
+ return self.format_audio
58
+ if col_type.is_document_type():
59
+ return self.format_document
60
+ return None
61
+
62
+ @classmethod
63
+ def format_string(cls, val: str) -> str:
64
+ """
65
+ Escapes special characters in `val`, and abbreviates `val` if its length exceeds `_STRING_MAX_LEN`.
66
+ """
67
+ return cls.__escape(cls.__abbreviate(val, cls.__STRING_MAX_LEN))
68
+
69
+ @classmethod
70
+ def __abbreviate(cls, val: str, max_len: int) -> str:
71
+ if len(val) > max_len:
72
+ edgeitems = (max_len - len(cls.__STRING_SEP)) // 2
73
+ return f'{val[:edgeitems]}{cls.__STRING_SEP}{val[-edgeitems:]}'
74
+ return val
75
+
76
+ @classmethod
77
+ def __escape(cls, val: str) -> str:
78
+ # HTML-escape the specified string, then escape $ signs to suppress MathJax formatting
79
+ # TODO(aaron-siegel): The '$' escaping isn't perfect; it will fail on '$' that are already escaped
80
+ return html.escape(val).replace('$', r'\$')
81
+
82
+ @classmethod
83
+ def format_float(cls, val: float) -> str:
84
+ # stay consistent with numpy formatting (0-D array has no brackets)
85
+ return np.array2string(np.array(val), precision=cls.__FLOAT_PRECISION)
86
+
87
+ @classmethod
88
+ def format_array(cls, arr: np.ndarray) -> str:
89
+ return np.array2string(
90
+ arr,
91
+ precision=cls.__FLOAT_PRECISION,
92
+ threshold=cls.__LIST_THRESHOLD,
93
+ edgeitems=cls.__LIST_EDGEITEMS,
94
+ max_line_width=1000000,
95
+ )
96
+
97
+ @classmethod
98
+ def format_json(cls, val: Any) -> str:
99
+ if isinstance(val, str):
100
+ # JSON-like formatting will be applied to strings that appear nested within a list or dict
101
+ # (quote the string; escape any quotes inside the string; shorter abbreviations).
102
+ # However, if the string appears in top-level position (i.e., the entire JSON value is a
103
+ # string), then we format it like an ordinary string.
104
+ return cls.format_string(val)
105
+ # In all other cases, dump the JSON struct recursively.
106
+ return cls.__format_json_rec(val)
107
+
108
+ @classmethod
109
+ def __format_json_rec(cls, val: Any) -> str:
110
+ if isinstance(val, str):
111
+ return cls.__escape(json.dumps(cls.__abbreviate(val, cls.__NESTED_STRING_MAX_LEN)))
112
+ if isinstance(val, float):
113
+ return cls.format_float(val)
114
+ if isinstance(val, np.ndarray):
115
+ return cls.format_array(val)
116
+ if isinstance(val, list):
117
+ if len(val) < cls.__LIST_THRESHOLD:
118
+ components = [cls.__format_json_rec(x) for x in val]
119
+ else:
120
+ components = [cls.__format_json_rec(x) for x in val[: cls.__LIST_EDGEITEMS]]
121
+ components.append('...')
122
+ components.extend(cls.__format_json_rec(x) for x in val[-cls.__LIST_EDGEITEMS :])
123
+ return '[' + ', '.join(components) + ']'
124
+ if isinstance(val, dict):
125
+ kv_pairs = (f'{cls.__format_json_rec(k)}: {cls.__format_json_rec(v)}' for k, v in val.items())
126
+ return '{' + ', '.join(kv_pairs) + '}'
127
+
128
+ # Everything else
129
+ try:
130
+ return json.dumps(val)
131
+ except TypeError: # Not JSON serializable
132
+ return str(val)
133
+
134
+ def format_img(self, img: Image.Image) -> str:
135
+ """
136
+ Create <img> tag for Image object.
137
+ """
138
+ assert isinstance(img, Image.Image), f'Wrong type: {type(img)}'
139
+ # Try to make it look decent in a variety of display scenarios
140
+ if self.__num_rows > 1:
141
+ width = 240 # Multiple rows: display small images
142
+ elif self.__num_cols > 1:
143
+ width = 480 # Multiple columns: display medium images
144
+ else:
145
+ width = 640 # A single image: larger display
146
+ with io.BytesIO() as buffer:
147
+ img.save(buffer, 'jpeg')
148
+ img_base64 = base64.b64encode(buffer.getvalue()).decode()
149
+ return f"""
150
+ <div class="pxt_image" style="width:{width}px;">
151
+ <img src="data:image/jpeg;base64,{img_base64}" width="{width}" />
152
+ </div>
153
+ """
154
+
155
+ def format_video(self, file_path: str) -> str:
156
+ thumb_tag = ''
157
+ # Attempt to extract the first frame of the video to use as a thumbnail,
158
+ # so that the notebook can be exported as HTML and viewed in contexts where
159
+ # the video itself is not accessible.
160
+ # TODO(aaron-siegel): If the video is backed by a concrete external URL,
161
+ # should we link to that instead?
162
+ video_reader = cv2.VideoCapture(str(file_path))
163
+ if video_reader.isOpened():
164
+ status, img_array = video_reader.read()
165
+ if status:
166
+ img_array = cv2.cvtColor(img_array, cv2.COLOR_BGR2RGB)
167
+ thumb = PIL.Image.fromarray(img_array)
168
+ with io.BytesIO() as buffer:
169
+ thumb.save(buffer, 'jpeg')
170
+ thumb_base64 = base64.b64encode(buffer.getvalue()).decode()
171
+ thumb_tag = f'poster="data:image/jpeg;base64,{thumb_base64}"'
172
+ video_reader.release()
173
+ if self.__num_rows > 1:
174
+ width = 320
175
+ elif self.__num_cols > 1:
176
+ width = 480
177
+ else:
178
+ width = 800
179
+ return f"""
180
+ <div class="pxt_video" style="width:{width}px;">
181
+ <video controls width="{width}" {thumb_tag}>
182
+ {self.__create_source_tag(self.__http_address, file_path)}
183
+ </video>
184
+ </div>
185
+ """
186
+
187
+ def format_audio(self, file_path: str) -> str:
188
+ return f"""
189
+ <div class="pxt_audio">
190
+ <audio controls>
191
+ {self.__create_source_tag(self.__http_address, file_path)}
192
+ </audio>
193
+ </div>
194
+ """
195
+
196
+ def format_document(self, file_path: str) -> str:
197
+ max_width = max_height = 320
198
+ # by default, file path will be shown as a link
199
+ inner_element = file_path
200
+ inner_element = html.escape(inner_element)
201
+ # try generating a thumbnail for different types and use that if successful
202
+ if file_path.lower().endswith('.pdf'):
203
+ try:
204
+ import fitz
205
+
206
+ doc = fitz.open(file_path)
207
+ p = doc.get_page_pixmap(0)
208
+ while p.width > max_width or p.height > max_height:
209
+ # shrink(1) will halve each dimension
210
+ p.shrink(1)
211
+ data = p.tobytes(output='jpeg')
212
+ thumb_base64 = base64.b64encode(data).decode()
213
+ img_src = f'data:image/jpeg;base64,{thumb_base64}'
214
+ inner_element = f"""
215
+ <img style="object-fit: contain; border: 1px solid black;" src="{img_src}" />
216
+ """
217
+ except:
218
+ logging.warning(f'Failed to produce PDF thumbnail {file_path}. Make sure you have PyMuPDF installed.')
219
+
220
+ return f"""
221
+ <div class="pxt_document" style="width:{max_width}px;">
222
+ <a href="{get_file_uri(self.__http_address, file_path)}">
223
+ {inner_element}
224
+ </a>
225
+ </div>
226
+ """
227
+
228
+ @classmethod
229
+ def __create_source_tag(cls, http_address: str, file_path: str) -> str:
230
+ src_url = get_file_uri(http_address, file_path)
231
+ mime = mimetypes.guess_type(src_url)[0]
232
+ # if mime is None, the attribute string would not be valid html.
233
+ mime_attr = f'type="{mime}"' if mime is not None else ''
234
+ return f'<source src="{src_url}" {mime_attr} />'
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pixeltable
3
- Version: 0.2.10
3
+ Version: 0.2.12
4
4
  Summary: Pixeltable: The Multimodal AI Data Plane
5
- Author: Marcel Kornacker
6
- Author-email: marcelk@gmail.com
5
+ Author: Pixeltable, Inc.
6
+ Author-email: contact@pixeltable.com
7
7
  Requires-Python: >=3.9,<4.0
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.9
@@ -75,7 +75,7 @@ Learn how to create tables, populate them with data, and enhance them with built
75
75
 
76
76
  | Topic | Notebook | API |
77
77
  |:--------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------:|
78
- | Get Started | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/tutorials/pixeltable-basics.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | [![API](https://img.shields.io/badge/api-reference-blue.svg)](https://pixeltable.github.io/pixeltable/api/pixeltable/) |
78
+ | Get Started | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/tutorials/pixeltable-basics.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | [![API](https://img.shields.io/badge/api-reference-blue.svg)](https://pixeltable.github.io/pixeltable/api/pixeltable/) |
79
79
  | User-Defined Functions (UDFs) | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/howto/udfs-in-pixeltable.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | [![API](https://img.shields.io/badge/api-reference-blue.svg)](https://pixeltable.github.io/pixeltable/api/iterators/document-splitter/) |
80
80
  | Comparing Object Detection Models | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/tutorials/object-detection-in-videos.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | [![API](https://img.shields.io/badge/api-reference-blue.svg)](https://pixeltable.github.io/pixeltable/api-cheat-sheet/#frame-extraction-for-video-data) |
81
81
  | Experimenting with Chunking (RAG) | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/tutorials/rag-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> | [![API](https://img.shields.io/badge/api-reference-blue.svg)](https://pixeltable.github.io/pixeltable/api/iterators/document-splitter/) |
@@ -1,20 +1,20 @@
1
- pixeltable/__init__.py,sha256=GNlV3jQKDQKTrOq8BVvPsnd9W9ROneP9-1C-zgNSWsg,1275
2
- pixeltable/__version__.py,sha256=4ON_EBN7M0CO070jZIUauJIAKAL4Ccrf8-Kg_a7aB0w,114
1
+ pixeltable/__init__.py,sha256=SkhQ6olglhj3NdcyVYzsTwpTZs8uVmtJa9INfsQV9gk,1267
2
+ pixeltable/__version__.py,sha256=VEuOm2X4I15fkc_I-vzJLLY4TEd1E8QfUbdSN8vRrVA,114
3
3
  pixeltable/catalog/__init__.py,sha256=E41bxaPeQIcgRYzTWc2vkDOboQhRymrJf4IcHQO7o_8,453
4
- pixeltable/catalog/catalog.py,sha256=gzEuse0f_rj7oKRWMyorhUpOLhYbWSQ8CFLOuFLbXak,7918
4
+ pixeltable/catalog/catalog.py,sha256=8gsFWm6o9Qg4_BEO6oejdpmP4MAOlhmuKRaJP0o2UPU,7906
5
5
  pixeltable/catalog/column.py,sha256=Dmc6CgFLExJy3tdvuX0Emjc8SgqZvmCbAHozibO1-G0,9417
6
6
  pixeltable/catalog/dir.py,sha256=DWl9nnCOoiYLKWp31MNMvLmryXeQiQZu5YJcd4tpy38,921
7
- pixeltable/catalog/globals.py,sha256=yLEGNbsSnLzjWNHVJacfjA9hbw13Q6QXLOSCRmdTlq0,943
8
- pixeltable/catalog/insertable_table.py,sha256=jP6EFMqkGNAbqRAj6YpCaZzWdFwu13t_dQste_f0clk,6468
7
+ pixeltable/catalog/globals.py,sha256=tNb_6jzAKJWD4MH1Y9g2UhVQkiomYfbHQZ2GIcg7vUI,974
8
+ pixeltable/catalog/insertable_table.py,sha256=u2yMCw1lWSIeRAknIKQmSMWS_3oLTn1kCR1Hk79OvrI,5883
9
9
  pixeltable/catalog/named_function.py,sha256=UhHaimM_uJHS-0RQcqGOgvWeZtMfKsIgSeKSRwT2moU,1149
10
10
  pixeltable/catalog/path.py,sha256=QgccEi_QOfaKt8YsR2zLtd_z7z7QQkU_1kprJFi2SPQ,1677
11
11
  pixeltable/catalog/path_dict.py,sha256=xfvxg1Ze5jZCARUGASF2DRbQPh7pRVTYhuJ_u82gYUo,5941
12
- pixeltable/catalog/schema_object.py,sha256=Sf8aGARpsPeRUz1NjsZ97oSBMyElsctP39uU9x9Ic80,964
13
- pixeltable/catalog/table.py,sha256=qzxm3SN0hHObZlJycEsmzOd3VLsqSnrZ9fk1M3F5YGM,42636
14
- pixeltable/catalog/table_version.py,sha256=-46Z-aSKdjXpbmWlwZpGWZMw6VOKJZczNvx05Txe_0I,55148
15
- pixeltable/catalog/table_version_path.py,sha256=lE2EFn0kylXhy-oBXTyXbJox6rl_6klfOmDjK-2Uq_Q,6432
16
- pixeltable/catalog/view.py,sha256=dphf9ZFi_ReQkokcN_Auh6ZQFmGtnOcVDvz6fcJfJzs,10332
17
- pixeltable/dataframe.py,sha256=Bws93dh5zeIhwuF-fezV0TWVXxmkISCD0nIh1W0m_Fw,37173
12
+ pixeltable/catalog/schema_object.py,sha256=1GuxN68P3c7g0gmY8doB6qoUGJsalyECWaO-KEi96D0,1879
13
+ pixeltable/catalog/table.py,sha256=J4MRWMly9uz-utLnXIKh7OTUbY0t4_ogHeEuDcApEPk,41151
14
+ pixeltable/catalog/table_version.py,sha256=qnPIIxwIOQbukV84ydeksVNURb37kAnGOXI-ZO2kkCo,57233
15
+ pixeltable/catalog/table_version_path.py,sha256=6JZlgKMYa3Xf8p_2Z-iDIFIcfuYRyjbpc3_CC9l1HME,6396
16
+ pixeltable/catalog/view.py,sha256=3OAk-NBPlSagMCsdVtcx35jHD80SIYCuOy5dc1kM7Fs,10403
17
+ pixeltable/dataframe.py,sha256=7w-1-RGIGEJFJydFazHOzHLFSjZ4Ejvv_JjP4fKfRjo,34333
18
18
  pixeltable/env.py,sha256=WO_WLfRj9Fft6QyW89S9cw47RTg1ALviStu9pNygJEQ,21635
19
19
  pixeltable/exceptions.py,sha256=MSP9zeL0AmXT93XqjdvgGN4rzno1_KRrGriq6hpemnw,376
20
20
  pixeltable/exec/__init__.py,sha256=RK7SKvrQ7Ky3G_LXDP4Bf7lHmMM_uYZl8dJaZYs0FjY,454
@@ -32,7 +32,7 @@ pixeltable/exprs/__init__.py,sha256=7dwrdk-NpF66OT-m5yNtFEhq-o1T476dnXHjluw2K1s,
32
32
  pixeltable/exprs/arithmetic_expr.py,sha256=sWBYCBKI6IHj9ASwDcm2BlkQ5gleVtKtmpiPvzFNBJM,4386
33
33
  pixeltable/exprs/array_slice.py,sha256=VmWc6iFusrM85MjyEBBCfXG1Jnt8-Gr6-J88BXxNoOE,2131
34
34
  pixeltable/exprs/column_property_ref.py,sha256=0PHiBys0fxe2LgjaMId5UHob4E-ZggyPLnnW41RgA0E,2706
35
- pixeltable/exprs/column_ref.py,sha256=jmKUHuRev3PI-58BqYQVcBPLQ3E7bM1mPlFSVlwa5b0,5554
35
+ pixeltable/exprs/column_ref.py,sha256=rlw6Ic_atAfPZpEBNAqbRZauMeEUci2rDyVoHd1pA1I,5195
36
36
  pixeltable/exprs/comparison.py,sha256=hP3M_lMWcFgENBICFosZPw2lRm1R6_qM_O9bKPmWJGI,4789
37
37
  pixeltable/exprs/compound_predicate.py,sha256=Gh22MKi625m5A_RunVRd-a1XFi-fitikqBVz2VNXKrs,3830
38
38
  pixeltable/exprs/data_row.py,sha256=RTBw1cBt29g_9g_hgdEYZ5aiHl7WZMBaBC2fOMOfwOc,8668
@@ -52,7 +52,7 @@ pixeltable/exprs/object_ref.py,sha256=eTcx84aWRI59fIiGvbdv3_cfL0XW4xEFQ4lwpLpJkM
52
52
  pixeltable/exprs/predicate.py,sha256=OSDgjfSqiK7J_5GZMUXMvjfyomKEGi0JNxeB073SGXw,1859
53
53
  pixeltable/exprs/row_builder.py,sha256=0OYd51J2ECPHkk2iN3MfYpS7LqnHTV5l5ubsVcy0dJA,15926
54
54
  pixeltable/exprs/rowid_ref.py,sha256=74w4rEy21YysTVbyKNc3op-pYFqDAx8VJdtl7ZPpxHs,4268
55
- pixeltable/exprs/similarity_expr.py,sha256=i5urJiSD43lJIi0AnMZhNvl7q5I8P3BPRuMx4IaAym0,3015
55
+ pixeltable/exprs/similarity_expr.py,sha256=DqLOWtwPn9LxBRPm-d5Qz0yZ7w9YTOP8w0rgbr-6Lyg,3702
56
56
  pixeltable/exprs/type_cast.py,sha256=JMg8p1qYoFfiAXfJPSbTEnfrK7lRO_JMaqlPHOrhNQU,1793
57
57
  pixeltable/exprs/variable.py,sha256=Kg_O4ytcHYZFijIyMHYBJn063cTKU1-YE583FAz8Qaw,1361
58
58
  pixeltable/ext/__init__.py,sha256=0uugfuME1FybVo-MdxaVNGagRjhcvNTnv5MZUem6Cyo,269
@@ -74,22 +74,22 @@ pixeltable/functions/fireworks.py,sha256=sbZy3HRn8o01nT4k1lOJJ_jGrjhBNkYmj1_Trao
74
74
  pixeltable/functions/globals.py,sha256=MVKcwvfRaqBMV58KBxp5ACMsTbj29WD97AOg1N5ZheY,1596
75
75
  pixeltable/functions/huggingface.py,sha256=qFdFpBX4R8Iz6fB0PKOwicdfvnEV7DQhtdcvsIQz55I,7372
76
76
  pixeltable/functions/image.py,sha256=lC5PVvx0hXlINGcURLrLeTT7xUMXla6QUC1T9t4-A0Y,5440
77
- pixeltable/functions/openai.py,sha256=Q6imhdlyZRuWNgBq9msqXMT8up_0e9jSsZPfSJ5DgUY,7839
77
+ pixeltable/functions/openai.py,sha256=D0cDXe_zy1kUdKqM9T3qs7OBAUCrAINUy5P0DO0OSXc,7814
78
78
  pixeltable/functions/string.py,sha256=Ae_weygd9Aj98buLC4tPLRYGg3LGSJEpXaqr93TF4nw,645
79
79
  pixeltable/functions/together.py,sha256=2vHOoXMUIpeYwTYGTr3hDHePzy8zepvoeyORgV_9n34,4412
80
80
  pixeltable/functions/util.py,sha256=F2iiIL7UfhYdCVzdCa3efYqWbaeLKFrbycKnuPkG57M,650
81
81
  pixeltable/functions/video.py,sha256=yn52MimAVrSzUyAUtyxbd1RWveX_TyjwsomBuhK9V60,6516
82
82
  pixeltable/functions/whisper.py,sha256=s7C4eV5tCJed-4Joob5LojGFEHPgapmT8awFPVxBKgQ,2199
83
- pixeltable/globals.py,sha256=WeIQbN6peyJL3VbIBxtL21p7XKREpDmtZ_MuDEUmOu4,14158
83
+ pixeltable/globals.py,sha256=L_40LFK-wW5wJ8DtuLoeS2gCgm9rmwUjx5FLa5hMOmw,14828
84
84
  pixeltable/index/__init__.py,sha256=XBwetNQQwnz0fiKwonOKhyy_U32l_cjt77kNvEIdjWs,102
85
85
  pixeltable/index/base.py,sha256=YAQ5Dz1mfI0dfu9rxWHWroE8TjB90yKfPtXAzoADq38,1568
86
86
  pixeltable/index/btree.py,sha256=NE4GYhcJWYJhdKyeHI0sQBlFvUaIgGOF9KLyCZOfFjE,1822
87
- pixeltable/index/embedding_index.py,sha256=AYphEggN-0B4GNrm4nMmi46CEtrQw5tguyk67BK2sWo,7627
87
+ pixeltable/index/embedding_index.py,sha256=U1wAjcTYvw3uJf3QHIOzBV8FLOUn8IeaFsLzUb_QTmc,7829
88
88
  pixeltable/io/__init__.py,sha256=DdqOteR1Y-yRvFS0VojXHryBtIGzH8nAN-1MBj3LGRk,493
89
- pixeltable/io/external_store.py,sha256=ZtDkfHMBo73JMKJ-q3J5FMWztYog38APn8kg81nCg34,16434
90
- pixeltable/io/globals.py,sha256=lfaXosEu1e2xkWhwUCUJNhpnZxXlBdf6jPlf8cf4F50,4546
89
+ pixeltable/io/external_store.py,sha256=owha7bEmA1ZvpZvBLBS6LHi9uLq1rUIkrMTGarsbjOU,16422
90
+ pixeltable/io/globals.py,sha256=v-L3ZQrjyutP_DHGXanymGjSJugWJ3STNUkzgylihOU,4540
91
91
  pixeltable/io/hf_datasets.py,sha256=h5M1NkXOvEU8kaeT3AON1A18Vmhnc1lVo5a3TZ5AAic,8004
92
- pixeltable/io/label_studio.py,sha256=ZWXTuIFk4CheM2ON0VDyb_34L9BJUY7iUJLcPvrll7c,28782
92
+ pixeltable/io/label_studio.py,sha256=yKCXPDZUev04O5r3tP5vrPpXe5KP4deQfbLHewNfVXQ,28764
93
93
  pixeltable/io/pandas.py,sha256=cDHUDW2CGiBbsEJB9zE5vkXopTKxDdI-CZxNcp0OnIk,6478
94
94
  pixeltable/io/parquet.py,sha256=i4hvYHsARe2GnZHxNmI66Vf3tr1sIFLN6KGCJYvH3o8,8149
95
95
  pixeltable/iterators/__init__.py,sha256=sjldFckkT8aVRiKgEP6faeAK2NQBdzbmpwAeRhI1FkM,366
@@ -97,18 +97,19 @@ pixeltable/iterators/base.py,sha256=cnEh1tNN2JAxRzrLTg3dhun3N1oNQ8vifCm6ts3_UiE,
97
97
  pixeltable/iterators/document.py,sha256=netSCJatG8NcgbHZ69BvQVICdAorQlYi8OlcpqwLQD4,19436
98
98
  pixeltable/iterators/string.py,sha256=NG_fWc_GAITDfzl6MvrDOMrSoMcZdMZf6hPQztCSatE,1305
99
99
  pixeltable/iterators/video.py,sha256=xtxODL1AfZwTfHVzWekhTCLA8gwTJIvJFdxC0KecD9Q,3836
100
- pixeltable/metadata/__init__.py,sha256=uxufhyUkogiMhztO3OoS59Rqs5pWOHqFJqPO5mZfrVA,2172
100
+ pixeltable/metadata/__init__.py,sha256=R4K9KSnefmvSCxXbBKTLAHD3QuHXgQ3a0wTs-eg94Os,2172
101
101
  pixeltable/metadata/converters/convert_10.py,sha256=J1_r7LNNAWTdb042AwqFpJ4sEB-i4qhUdk5iOjcZk34,719
102
102
  pixeltable/metadata/converters/convert_12.py,sha256=Ci-qyZW1gqci-8wnjeOB5afdq7KTuN-hVSV9OqSPx8g,162
103
103
  pixeltable/metadata/converters/convert_13.py,sha256=yFR6lD3pOrZ46ZQBFKYvxiIYa7rRxh46Bsq7yiCBNak,1356
104
104
  pixeltable/metadata/converters/convert_14.py,sha256=o4Dwu5wujJYILN-2chg3xCSUsh4cnn0sImv6rc75rSM,388
105
105
  pixeltable/metadata/converters/convert_15.py,sha256=N-Lt3OdOrUprN-z1gFcxniZgAtZ7jzup_YUZzXX6EtY,1709
106
106
  pixeltable/metadata/converters/convert_16.py,sha256=SvcWOYgLwRw_gLTnLbCSI9f2cpdkXazYOmmtJUOOzv4,476
107
+ pixeltable/metadata/converters/convert_17.py,sha256=vJg4y2lg53WSj9OSntWsdUiCr6yRgMQm0eFbs_Geqjg,861
107
108
  pixeltable/metadata/converters/util.py,sha256=AcYs3yUICl93y8whf0pkeWZoCzE4JuUMafmcYMyJUCY,2618
108
109
  pixeltable/metadata/schema.py,sha256=WJZ1YPgS88rFElXbjYgDhcrI4VReR1I9VPOnTkoHvoI,8418
109
110
  pixeltable/plan.py,sha256=MXWgwQXD40GB57xQiq_wjXF3OL0XTEjjhQslMfFTt3w,32831
110
111
  pixeltable/store.py,sha256=UDn-UMYuL6dTUym3yFsVhv9hUtnP_QtzhDJzsFInApc,18853
111
- pixeltable/tool/create_test_db_dump.py,sha256=AYYHJKSDx7CMjNH6WUoOlUCICFZKRqQn7sSL3jKkDEw,10727
112
+ pixeltable/tool/create_test_db_dump.py,sha256=iaMfBEyGHSMhhOJDyR0M9Idj9HkNgeTjmYLVhScjMZA,10729
112
113
  pixeltable/tool/create_test_video.py,sha256=OLfccymYReIpzE8osZn4rQvLXxxiPC_l0vc06U74hVM,2899
113
114
  pixeltable/tool/embed_udf.py,sha256=llHUhjGnCMp7Wyz7eHgKZV2v6o2ZWSgLQKscESuHK_o,269
114
115
  pixeltable/type_system.py,sha256=oXnDVoP90ic6WSTF_DcgWDLx0MYKEU0ggGTesAKahic,29505
@@ -118,6 +119,7 @@ pixeltable/utils/coco.py,sha256=ISpFBhR4eO1jOcg_SPb0thVI4KdS6H0RyNQauZIA5A4,7287
118
119
  pixeltable/utils/code.py,sha256=AOw1u2r8_DQXpX-lxJhyHWARGrCRDXOJHFVgKOi54Uc,1231
119
120
  pixeltable/utils/documents.py,sha256=Q7e5U2Hk0go83MdKzD_MIiMscwbcFsLMgRw2IU_vQF4,2213
120
121
  pixeltable/utils/filecache.py,sha256=UoNONG2VaAc2IBB0e3sQdsvyOPOes2XSDc5_CsA4qek,7839
122
+ pixeltable/utils/formatter.py,sha256=2nAEXehP4FZQq2qzQcEJy97seRYubTuLBSrL_unRFLo,9239
121
123
  pixeltable/utils/help.py,sha256=cCnxJ4VP9MJ57iDqExmnDcM-JG3a1lw_q7g-D7bpSVI,252
122
124
  pixeltable/utils/http_server.py,sha256=WQ5ILMzlz4TlwI9j5YqAPgEZyhrN1GytMNDbLD9occk,2422
123
125
  pixeltable/utils/media_store.py,sha256=x71wnJDZDHcdd13VCfL4AkHQ6IJB41gNA-zBvXJwFos,3116
@@ -125,7 +127,7 @@ pixeltable/utils/pytorch.py,sha256=BR4tgfUWw-2rwWTOgzXj5qdMBpe1Arpp5SK4ax6jjpk,3
125
127
  pixeltable/utils/s3.py,sha256=rkanuhk9DWvSfmbOLQW1j1Iov4sl2KhxGGKN-AJ8LSE,432
126
128
  pixeltable/utils/sql.py,sha256=5n5_OmXAGtqFdL6z5XvgnU-vlx6Ba6f1WJrO1ZwUle8,765
127
129
  pixeltable/utils/transactional_directory.py,sha256=UGzCrGtLR3hEEf8sYGuWBzLVFAEQml3vdIavigWeTBM,1349
128
- pixeltable-0.2.10.dist-info/LICENSE,sha256=0UNMmwuqWPC0xDY1NWMm4uNJ2_MyA1pnTNRgQTvuBiQ,746
129
- pixeltable-0.2.10.dist-info/METADATA,sha256=mFo55wHTOiQCgUW30Lwk5aQzYglsO1Szcnq4IdSkjqU,9807
130
- pixeltable-0.2.10.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
131
- pixeltable-0.2.10.dist-info/RECORD,,
130
+ pixeltable-0.2.12.dist-info/LICENSE,sha256=0UNMmwuqWPC0xDY1NWMm4uNJ2_MyA1pnTNRgQTvuBiQ,746
131
+ pixeltable-0.2.12.dist-info/METADATA,sha256=oVeTMu4HQQFxqj4AWPpiZiNPs9O5IUzxlBBHazAInJ0,9820
132
+ pixeltable-0.2.12.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
133
+ pixeltable-0.2.12.dist-info/RECORD,,