pixeltable 0.2.15__tar.gz → 0.2.17__tar.gz

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.

Files changed (143) hide show
  1. {pixeltable-0.2.15 → pixeltable-0.2.17}/PKG-INFO +10 -10
  2. {pixeltable-0.2.15 → pixeltable-0.2.17}/README.md +7 -7
  3. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/__version__.py +2 -2
  4. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/column.py +3 -0
  5. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/dir.py +1 -1
  6. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/globals.py +15 -6
  7. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/insertable_table.py +23 -8
  8. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/named_function.py +1 -1
  9. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/path_dict.py +4 -4
  10. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/schema_object.py +30 -18
  11. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/table.py +84 -99
  12. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/table_version.py +35 -24
  13. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/table_version_path.py +2 -2
  14. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/view.py +15 -8
  15. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/dataframe.py +56 -56
  16. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/env.py +7 -5
  17. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/__init__.py +3 -3
  18. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/aggregation_node.py +3 -3
  19. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/expr_eval_node.py +3 -3
  20. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/in_memory_data_node.py +4 -4
  21. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/sql_node.py +4 -1
  22. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/array_slice.py +3 -4
  23. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/column_ref.py +20 -4
  24. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/comparison.py +11 -6
  25. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/data_row.py +3 -0
  26. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/expr.py +51 -23
  27. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/function_call.py +8 -1
  28. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/inline_array.py +2 -2
  29. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/json_path.py +36 -20
  30. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/row_builder.py +4 -4
  31. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/rowid_ref.py +1 -1
  32. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/__init__.py +1 -2
  33. pixeltable-0.2.17/pixeltable/functions/anthropic.py +97 -0
  34. pixeltable-0.2.17/pixeltable/functions/audio.py +32 -0
  35. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/fireworks.py +1 -1
  36. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/huggingface.py +4 -4
  37. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/image.py +1 -1
  38. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/together.py +1 -1
  39. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/video.py +5 -1
  40. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/vision.py +2 -6
  41. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/globals.py +57 -28
  42. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/io/external_store.py +4 -4
  43. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/io/globals.py +12 -13
  44. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/io/label_studio.py +6 -6
  45. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/io/pandas.py +27 -12
  46. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/io/parquet.py +14 -14
  47. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/iterators/document.py +7 -7
  48. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/plan.py +58 -29
  49. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/store.py +32 -31
  50. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/tool/create_test_db_dump.py +12 -6
  51. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/type_system.py +89 -97
  52. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/pytorch.py +12 -10
  53. {pixeltable-0.2.15 → pixeltable-0.2.17}/pyproject.toml +19 -8
  54. {pixeltable-0.2.15 → pixeltable-0.2.17}/LICENSE +0 -0
  55. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/__init__.py +0 -0
  56. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/__init__.py +0 -0
  57. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/catalog.py +0 -0
  58. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/catalog/path.py +0 -0
  59. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exceptions.py +0 -0
  60. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/cache_prefetch_node.py +0 -0
  61. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/component_iteration_node.py +0 -0
  62. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/data_row_batch.py +0 -0
  63. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/exec_context.py +0 -0
  64. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/exec_node.py +0 -0
  65. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/media_validation_node.py +0 -0
  66. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exec/row_update_node.py +0 -0
  67. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/__init__.py +0 -0
  68. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/arithmetic_expr.py +0 -0
  69. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/column_property_ref.py +0 -0
  70. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/compound_predicate.py +0 -0
  71. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/expr_set.py +0 -0
  72. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/globals.py +0 -0
  73. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/in_predicate.py +0 -0
  74. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/inline_dict.py +0 -0
  75. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/is_null.py +0 -0
  76. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/json_mapper.py +0 -0
  77. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/literal.py +0 -0
  78. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/method_ref.py +0 -0
  79. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/object_ref.py +0 -0
  80. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/similarity_expr.py +0 -0
  81. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/type_cast.py +0 -0
  82. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/exprs/variable.py +0 -0
  83. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/ext/__init__.py +0 -0
  84. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/ext/functions/__init__.py +0 -0
  85. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/ext/functions/whisperx.py +0 -0
  86. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/ext/functions/yolox.py +0 -0
  87. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/__init__.py +0 -0
  88. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/aggregate_function.py +0 -0
  89. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/callable_function.py +0 -0
  90. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/expr_template_function.py +0 -0
  91. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/function.py +0 -0
  92. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/function_registry.py +0 -0
  93. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/globals.py +0 -0
  94. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/query_template_function.py +0 -0
  95. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/signature.py +0 -0
  96. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/func/udf.py +0 -0
  97. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/globals.py +0 -0
  98. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/json.py +0 -0
  99. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/openai.py +0 -0
  100. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/string.py +0 -0
  101. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/timestamp.py +0 -0
  102. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/util.py +0 -0
  103. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/functions/whisper.py +0 -0
  104. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/index/__init__.py +0 -0
  105. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/index/base.py +0 -0
  106. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/index/btree.py +0 -0
  107. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/index/embedding_index.py +0 -0
  108. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/io/__init__.py +0 -0
  109. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/io/hf_datasets.py +0 -0
  110. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/iterators/__init__.py +0 -0
  111. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/iterators/base.py +0 -0
  112. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/iterators/string.py +0 -0
  113. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/iterators/video.py +0 -0
  114. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/__init__.py +0 -0
  115. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/convert_10.py +0 -0
  116. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/convert_12.py +0 -0
  117. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/convert_13.py +0 -0
  118. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/convert_14.py +0 -0
  119. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/convert_15.py +0 -0
  120. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/convert_16.py +0 -0
  121. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/convert_17.py +0 -0
  122. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/convert_18.py +0 -0
  123. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/converters/util.py +0 -0
  124. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/notes.py +0 -0
  125. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/metadata/schema.py +0 -0
  126. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/tool/create_test_video.py +0 -0
  127. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/tool/doc_plugins/griffe.py +0 -0
  128. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/tool/doc_plugins/mkdocstrings.py +0 -0
  129. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/tool/doc_plugins/templates/material/udf.html.jinja +0 -0
  130. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/tool/embed_udf.py +0 -0
  131. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/__init__.py +0 -0
  132. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/arrow.py +0 -0
  133. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/coco.py +0 -0
  134. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/code.py +0 -0
  135. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/documents.py +0 -0
  136. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/filecache.py +0 -0
  137. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/formatter.py +0 -0
  138. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/help.py +0 -0
  139. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/http_server.py +0 -0
  140. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/media_store.py +0 -0
  141. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/s3.py +0 -0
  142. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/sql.py +0 -0
  143. {pixeltable-0.2.15 → pixeltable-0.2.17}/pixeltable/utils/transactional_directory.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pixeltable
3
- Version: 0.2.15
3
+ Version: 0.2.17
4
4
  Summary: Pixeltable: The Multimodal AI Data Plane
5
5
  Author: Pixeltable, Inc.
6
6
  Author-email: contact@pixeltable.com
@@ -23,9 +23,9 @@ Requires-Dist: opencv-python-headless (>=4.7.0.68,<5.0.0.0)
23
23
  Requires-Dist: pandas (>=2.0,<3.0)
24
24
  Requires-Dist: pgvector (>=0.2.1,<0.3.0)
25
25
  Requires-Dist: pillow (>=9.3.0)
26
- Requires-Dist: pixeltable-pgserver (==0.2.4)
26
+ Requires-Dist: pixeltable-pgserver (==0.2.7)
27
27
  Requires-Dist: psutil (>=5.9.5,<6.0.0)
28
- Requires-Dist: psycopg2-binary (>=2.9.5,<3.0.0)
28
+ Requires-Dist: psycopg[binary] (==3.1.18)
29
29
  Requires-Dist: pymupdf (>=1.24.1,<2.0.0)
30
30
  Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
31
31
  Requires-Dist: requests (>=2.31.0,<3.0.0)
@@ -36,7 +36,7 @@ Requires-Dist: tqdm (>=4.64)
36
36
  Description-Content-Type: text/markdown
37
37
 
38
38
  <div align="center">
39
- <img src="https://raw.githubusercontent.com/pixeltable/pixeltable/master/docs/release/pixeltable-banner.png" alt="Pixeltable" width="45%" />
39
+ <img src="https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/release/pixeltable-banner.png" alt="Pixeltable" width="45%" />
40
40
 
41
41
  # Unifying Data, Models, and Orchestration for AI Products
42
42
 
@@ -46,7 +46,7 @@ Description-Content-Type: text/markdown
46
46
  [![pytest status](https://github.com/pixeltable/pixeltable/actions/workflows/pytest.yml/badge.svg)](https://github.com/pixeltable/pixeltable/actions)
47
47
  [![PyPI Package](https://img.shields.io/pypi/v/pixeltable?color=darkorange)](https://pypi.org/project/pixeltable/)
48
48
 
49
- [Installation](https://pixeltable.github.io/pixeltable/getting-started/) | [Documentation](https://pixeltable.readme.io/) | [API Reference](https://pixeltable.github.io/pixeltable/) | [Code Samples](https://pixeltable.readme.io/recipes) | [Examples](https://github.com/pixeltable/pixeltable/tree/master/docs/release/tutorials)
49
+ [Installation](https://pixeltable.github.io/pixeltable/getting-started/) | [Documentation](https://pixeltable.readme.io/) | [API Reference](https://pixeltable.github.io/pixeltable/) | [Code Samples](https://pixeltable.readme.io/recipes) | [Examples](https://github.com/pixeltable/pixeltable/tree/release/docs/release/tutorials)
50
50
  </div>
51
51
 
52
52
  Pixeltable is a Python library that lets ML Engineers and Data Scientists focus on exploration, modeling, and app development without dealing with the customary data plumbing.
@@ -68,10 +68,10 @@ Learn how to create tables, populate them with data, and enhance them with built
68
68
 
69
69
  | Topic | Notebook | Topic | Notebook |
70
70
  |:----------|:-----------------|:-------------------------|:---------------------------------:|
71
- | 10-Minute Tour of Pixeltable | <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> | Tables and Data Operations | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/fundamentals/tables-and-data-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
72
- | 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> | 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>
73
- | 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"/> | Working with External Files | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/howto/working-with-external-files.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
74
- | Integrating with Label Studio | <a target="_blank" href="https://pixeltable.readme.io/docs/label-studio"> <img src="https://img.shields.io/badge/Docs-Label Studio-blue" alt="Visit our documentation"/></a> | Audio/Video Transcript Indexing | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/tutorials/audio-transcriptions.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
71
+ | 10-Minute Tour of Pixeltable | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/pixeltable-basics.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Tables and Data Operations | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/fundamentals/tables-and-data-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
72
+ | User-Defined Functions (UDFs) | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/howto/udfs-in-pixeltable.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Object Detection Models | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/object-detection-in-videos.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
73
+ | Experimenting with Chunking (RAG) | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/rag-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> | Working with External Files | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/howto/working-with-external-files.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
74
+ | Integrating with Label Studio | <a target="_blank" href="https://pixeltable.readme.io/docs/label-studio"> <img src="https://img.shields.io/badge/Docs-Label Studio-blue" alt="Visit our documentation"/></a> | Audio/Video Transcript Indexing | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/audio-transcriptions.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
75
75
 
76
76
  ## 🧱 Code Samples
77
77
 
@@ -186,7 +186,7 @@ Pixeltable unifies data storage, versioning, and indexing with orchestration and
186
186
  - **It integrates with any existing Python code or libraries**
187
187
  - Bring your ever-changing code and workloads
188
188
  - You choose the models, tools, and AI practices (e.g., your embedding model for a vector index); Pixeltable orchestrates the data
189
-
189
+
190
190
  ### What is Pixeltable not providing?
191
191
 
192
192
  - Pixeltable is not a low-code, prescriptive AI solution. We empower you to use the best frameworks and techniques for your specific needs.
@@ -1,5 +1,5 @@
1
1
  <div align="center">
2
- <img src="https://raw.githubusercontent.com/pixeltable/pixeltable/master/docs/release/pixeltable-banner.png" alt="Pixeltable" width="45%" />
2
+ <img src="https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/release/pixeltable-banner.png" alt="Pixeltable" width="45%" />
3
3
 
4
4
  # Unifying Data, Models, and Orchestration for AI Products
5
5
 
@@ -9,7 +9,7 @@
9
9
  [![pytest status](https://github.com/pixeltable/pixeltable/actions/workflows/pytest.yml/badge.svg)](https://github.com/pixeltable/pixeltable/actions)
10
10
  [![PyPI Package](https://img.shields.io/pypi/v/pixeltable?color=darkorange)](https://pypi.org/project/pixeltable/)
11
11
 
12
- [Installation](https://pixeltable.github.io/pixeltable/getting-started/) | [Documentation](https://pixeltable.readme.io/) | [API Reference](https://pixeltable.github.io/pixeltable/) | [Code Samples](https://pixeltable.readme.io/recipes) | [Examples](https://github.com/pixeltable/pixeltable/tree/master/docs/release/tutorials)
12
+ [Installation](https://pixeltable.github.io/pixeltable/getting-started/) | [Documentation](https://pixeltable.readme.io/) | [API Reference](https://pixeltable.github.io/pixeltable/) | [Code Samples](https://pixeltable.readme.io/recipes) | [Examples](https://github.com/pixeltable/pixeltable/tree/release/docs/release/tutorials)
13
13
  </div>
14
14
 
15
15
  Pixeltable is a Python library that lets ML Engineers and Data Scientists focus on exploration, modeling, and app development without dealing with the customary data plumbing.
@@ -31,10 +31,10 @@ Learn how to create tables, populate them with data, and enhance them with built
31
31
 
32
32
  | Topic | Notebook | Topic | Notebook |
33
33
  |:----------|:-----------------|:-------------------------|:---------------------------------:|
34
- | 10-Minute Tour of Pixeltable | <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> | Tables and Data Operations | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/fundamentals/tables-and-data-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
35
- | 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> | 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>
36
- | 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"/> | Working with External Files | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/howto/working-with-external-files.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
37
- | Integrating with Label Studio | <a target="_blank" href="https://pixeltable.readme.io/docs/label-studio"> <img src="https://img.shields.io/badge/Docs-Label Studio-blue" alt="Visit our documentation"/></a> | Audio/Video Transcript Indexing | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/release/tutorials/audio-transcriptions.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
34
+ | 10-Minute Tour of Pixeltable | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/pixeltable-basics.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Tables and Data Operations | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/fundamentals/tables-and-data-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
35
+ | User-Defined Functions (UDFs) | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/howto/udfs-in-pixeltable.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Object Detection Models | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/object-detection-in-videos.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
36
+ | Experimenting with Chunking (RAG) | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/rag-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> | Working with External Files | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/howto/working-with-external-files.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
37
+ | Integrating with Label Studio | <a target="_blank" href="https://pixeltable.readme.io/docs/label-studio"> <img src="https://img.shields.io/badge/Docs-Label Studio-blue" alt="Visit our documentation"/></a> | Audio/Video Transcript Indexing | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/audio-transcriptions.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
38
38
 
39
39
  ## 🧱 Code Samples
40
40
 
@@ -149,7 +149,7 @@ Pixeltable unifies data storage, versioning, and indexing with orchestration and
149
149
  - **It integrates with any existing Python code or libraries**
150
150
  - Bring your ever-changing code and workloads
151
151
  - You choose the models, tools, and AI practices (e.g., your embedding model for a vector index); Pixeltable orchestrates the data
152
-
152
+
153
153
  ### What is Pixeltable not providing?
154
154
 
155
155
  - Pixeltable is not a low-code, prescriptive AI solution. We empower you to use the best frameworks and techniques for your specific needs.
@@ -1,3 +1,3 @@
1
1
  # These version placeholders will be replaced during build.
2
- __version__ = "0.2.15"
3
- __version_tuple__ = (0, 2, 15)
2
+ __version__ = "0.2.17"
3
+ __version_tuple__ = (0, 2, 17)
@@ -196,6 +196,9 @@ class Column:
196
196
  def __str__(self) -> str:
197
197
  return f'{self.name}: {self.col_type}'
198
198
 
199
+ def __repr__(self) -> str:
200
+ return f'Column({self.id!r}, {self.name!r}, tbl={self.tbl.name!r})'
201
+
199
202
  def __hash__(self) -> int:
200
203
  # TODO(aaron-siegel): This and __eq__ do not capture the table version. We need to rethink the Column
201
204
  # abstraction (perhaps separating out the version-dependent properties into a different abstraction).
@@ -18,7 +18,7 @@ class Dir(SchemaObject):
18
18
  super().__init__(id, name, parent_id)
19
19
 
20
20
  @classmethod
21
- def display_name(cls) -> str:
21
+ def _display_name(cls) -> str:
22
22
  return 'directory'
23
23
 
24
24
  def _move(self, new_name: str, new_dir_id: UUID) -> None:
@@ -1,14 +1,18 @@
1
- from typing import List
2
1
  import dataclasses
2
+ import itertools
3
3
  import logging
4
-
4
+ from typing import Optional
5
5
 
6
6
  _logger = logging.getLogger('pixeltable')
7
7
 
8
8
  # name of the position column in a component view
9
- POS_COLUMN_NAME = 'pos'
9
+ _POS_COLUMN_NAME = 'pos'
10
10
  _ROWID_COLUMN_NAME = '_rowid'
11
11
 
12
+ # Set of symbols that are predefined in the `InsertableTable` class (and are therefore not allowed as column names).
13
+ # This will be populated lazily to avoid circular imports.
14
+ _PREDEF_SYMBOLS: Optional[set[str]] = None
15
+
12
16
 
13
17
  @dataclasses.dataclass
14
18
  class UpdateStatus:
@@ -16,8 +20,8 @@ class UpdateStatus:
16
20
  # TODO: disambiguate what this means: # of slots computed or # of columns computed?
17
21
  num_computed_values: int = 0
18
22
  num_excs: int = 0
19
- updated_cols: List[str] = dataclasses.field(default_factory=list)
20
- cols_with_excs: List[str] = dataclasses.field(default_factory=list)
23
+ updated_cols: list[str] = dataclasses.field(default_factory=list)
24
+ cols_with_excs: list[str] = dataclasses.field(default_factory=list)
21
25
 
22
26
  def __iadd__(self, other: 'UpdateStatus') -> 'UpdateStatus':
23
27
  self.num_rows += other.num_rows
@@ -40,4 +44,9 @@ def is_valid_path(path: str, empty_is_valid : bool) -> bool:
40
44
  return True
41
45
 
42
46
  def is_system_column_name(name: str) -> bool:
43
- return name == POS_COLUMN_NAME
47
+ from pixeltable.catalog import InsertableTable, View
48
+
49
+ global _PREDEF_SYMBOLS
50
+ if _PREDEF_SYMBOLS is None:
51
+ _PREDEF_SYMBOLS = set(itertools.chain(dir(InsertableTable), dir(View)))
52
+ return name == _POS_COLUMN_NAME or name in _PREDEF_SYMBOLS
@@ -1,15 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Optional, List, Any, Dict, overload, Iterable
4
+ from typing import Any, Dict, Iterable, List, Optional, overload
5
5
  from uuid import UUID
6
6
 
7
7
  import sqlalchemy.orm as orm
8
8
 
9
- import pixeltable
9
+ import pixeltable as pxt
10
10
  import pixeltable.type_system as ts
11
11
  from pixeltable import exceptions as excs
12
12
  from pixeltable.env import Env
13
+
13
14
  from .catalog import Catalog
14
15
  from .globals import UpdateStatus
15
16
  from .table import Table
@@ -27,13 +28,13 @@ class InsertableTable(Table):
27
28
  super().__init__(tbl_version.id, dir_id, tbl_version.name, tbl_version_path)
28
29
 
29
30
  @classmethod
30
- def display_name(cls) -> str:
31
+ def _display_name(cls) -> str:
31
32
  return 'table'
32
33
 
33
34
  # MODULE-LOCAL, NOT PUBLIC
34
35
  @classmethod
35
- def create(
36
- cls, dir_id: UUID, name: str, schema: Dict[str, ts.ColumnType], primary_key: List[str],
36
+ def _create(
37
+ cls, dir_id: UUID, name: str, schema: dict[str, ts.ColumnType], df: Optional[pxt.DataFrame], primary_key: List[str],
37
38
  num_retained_versions: int, comment: str
38
39
  ) -> InsertableTable:
39
40
  columns = cls._create_columns(schema)
@@ -50,6 +51,14 @@ class InsertableTable(Table):
50
51
  with orm.Session(Env.get().engine, future=True) as session:
51
52
  _, tbl_version = TableVersion.create(session, dir_id, name, columns, num_retained_versions, comment)
52
53
  tbl = cls(dir_id, tbl_version)
54
+ # TODO We need to commit before doing the insertion, in order to avoid a primary key (version) collision
55
+ # when the table metadata gets updated. Once we have a notion of user-defined transactions in
56
+ # Pixeltable, we can wrap the create/insert in a transaction to avoid this.
57
+ session.commit()
58
+ if df is not None:
59
+ # A DataFrame was provided, so insert its contents into the table
60
+ # (using the same DB session as the table creation)
61
+ tbl_version.insert(None, df, conn=session.connection(), fail_on_exception=True)
53
62
  session.commit()
54
63
  cat = Catalog.get()
55
64
  cat.tbl_dependents[tbl._id] = []
@@ -59,6 +68,12 @@ class InsertableTable(Table):
59
68
  print(f'Created table `{name}`.')
60
69
  return tbl
61
70
 
71
+ def get_metadata(self) -> dict[str, Any]:
72
+ md = super().get_metadata()
73
+ md['is_view'] = False
74
+ md['is_snapshot'] = False
75
+ return md
76
+
62
77
  @overload
63
78
  def insert(
64
79
  self, rows: Iterable[Dict[str, Any]], /, *, print_stats: bool = False, fail_on_exception: bool = True
@@ -86,7 +101,7 @@ class InsertableTable(Table):
86
101
  if not isinstance(row, dict):
87
102
  raise excs.Error('rows must be a list of dictionaries')
88
103
  self._validate_input_rows(rows)
89
- result = self._tbl_version.insert(rows, print_stats=print_stats, fail_on_exception=fail_on_exception)
104
+ result = self._tbl_version.insert(rows, None, print_stats=print_stats, fail_on_exception=fail_on_exception)
90
105
 
91
106
  if result.num_excs == 0:
92
107
  cols_with_excs_str = ''
@@ -104,7 +119,7 @@ class InsertableTable(Table):
104
119
 
105
120
  def _validate_input_rows(self, rows: List[Dict[str, Any]]) -> None:
106
121
  """Verify that the input rows match the table schema"""
107
- valid_col_names = set(self.column_names())
122
+ valid_col_names = set(self._schema.keys())
108
123
  reqd_col_names = set(self._tbl_version_path.tbl_version.get_required_col_names())
109
124
  computed_col_names = set(self._tbl_version_path.tbl_version.get_computed_col_names())
110
125
  for row in rows:
@@ -129,7 +144,7 @@ class InsertableTable(Table):
129
144
  msg = str(e)
130
145
  raise excs.Error(f'Error in column {col.name}: {msg[0].lower() + msg[1:]}\nRow: {row}')
131
146
 
132
- def delete(self, where: Optional['pixeltable.exprs.Expr'] = None) -> UpdateStatus:
147
+ def delete(self, where: Optional['pxt.exprs.Expr'] = None) -> UpdateStatus:
133
148
  """Delete rows in this table.
134
149
 
135
150
  Args:
@@ -22,7 +22,7 @@ class NamedFunction(SchemaObject):
22
22
  super().__init__(id, name, dir_id)
23
23
 
24
24
  @classmethod
25
- def display_name(cls) -> str:
25
+ def _display_name(cls) -> str:
26
26
  return 'function'
27
27
 
28
28
  def _move(self, new_name: str, new_dir_id: UUID) -> None:
@@ -114,20 +114,20 @@ class PathDict:
114
114
  schema_obj = self._resolve_path(path)
115
115
  if not isinstance(schema_obj, expected):
116
116
  raise excs.Error(
117
- f'{str(path)} needs to be a {expected.display_name()} but is a {type(schema_obj).display_name()}')
117
+ f'{str(path)} needs to be a {expected._display_name()} but is a {type(schema_obj)._display_name()}')
118
118
  if expected is None:
119
119
  parent_obj = self._resolve_path(path.parent)
120
120
  if not isinstance(parent_obj, Dir):
121
121
  raise excs.Error(
122
- f'{str(path.parent)} is a {type(parent_obj).display_name()}, not a {Dir.display_name()}')
122
+ f'{str(path.parent)} is a {type(parent_obj)._display_name()}, not a {Dir._display_name()}')
123
123
  if path.name in self.dir_contents[parent_obj._id]:
124
124
  obj = self.dir_contents[parent_obj._id][path.name]
125
- raise excs.Error(f"{type(obj).display_name()} '{str(path)}' already exists")
125
+ raise excs.Error(f"{type(obj)._display_name()} '{str(path)}' already exists")
126
126
 
127
127
  def get_children(self, parent: Path, child_type: Optional[Type[SchemaObject]], recursive: bool) -> List[Path]:
128
128
  dir = self._resolve_path(parent)
129
129
  if not isinstance(dir, Dir):
130
- raise excs.Error(f'{str(parent)} is a {type(dir).display_name()}, not a directory')
130
+ raise excs.Error(f'{str(parent)} is a {type(dir)._display_name()}, not a directory')
131
131
  matches = [
132
132
  obj for obj in self.dir_contents[dir._id].values() if child_type is None or isinstance(obj, child_type)
133
133
  ]
@@ -1,5 +1,5 @@
1
1
  from abc import abstractmethod
2
- from typing import TYPE_CHECKING, Optional
2
+ from typing import TYPE_CHECKING, Any, Optional
3
3
  from uuid import UUID
4
4
 
5
5
  if TYPE_CHECKING:
@@ -13,20 +13,24 @@ class SchemaObject:
13
13
  """
14
14
  def __init__(self, obj_id: UUID, name: str, dir_id: Optional[UUID]):
15
15
  # make these private so they don't collide with column names (id and name are fairly common)
16
- self._id = obj_id
17
- self._name = name
18
- self._dir_id = dir_id
16
+ self.__id = obj_id
17
+ self.__name = name
18
+ self.__dir_id = dir_id
19
19
 
20
- def _get_id(self) -> UUID:
21
- return self._id
20
+ @property
21
+ def _id(self) -> UUID:
22
+ return self.__id
23
+
24
+ @property
25
+ def _name(self) -> str:
26
+ return self.__name
22
27
 
23
28
  @property
24
- def name(self) -> str:
25
- """Returns the name of this schema object."""
26
- return self._name
29
+ def _dir_id(self) -> Optional[UUID]:
30
+ return self.__dir_id
27
31
 
28
32
  @property
29
- def parent(self) -> Optional['catalog.Dir']:
33
+ def _parent(self) -> Optional['catalog.Dir']:
30
34
  """Returns the parent directory of this schema object."""
31
35
  from pixeltable import catalog
32
36
  if self._dir_id is None:
@@ -36,19 +40,27 @@ class SchemaObject:
36
40
  return dir
37
41
 
38
42
  @property
39
- def path(self) -> str:
43
+ def _path(self) -> str:
40
44
  """Returns the path to this schema object."""
41
- parent = self.parent
42
- if parent is None or parent.parent is None:
45
+ parent = self._parent
46
+ if parent is None or parent._parent is None:
43
47
  # Either this is the root directory, with empty path, or its parent is the
44
48
  # root directory. Either way, we return just the name.
45
- return self.name
49
+ return self._name
46
50
  else:
47
- return f'{parent.path}.{self.name}'
51
+ return f'{parent._path}.{self._name}'
52
+
53
+ def get_metadata(self) -> dict[str, Any]:
54
+ """Returns metadata associated with this schema object."""
55
+ return {
56
+ 'name': self._name,
57
+ 'path': self._path,
58
+ 'parent': self._parent._path if self._parent is not None else None,
59
+ }
48
60
 
49
61
  @classmethod
50
62
  @abstractmethod
51
- def display_name(cls) -> str:
63
+ def _display_name(cls) -> str:
52
64
  """
53
65
  Return name displayed in error messages.
54
66
  """
@@ -56,5 +68,5 @@ class SchemaObject:
56
68
 
57
69
  def _move(self, new_name: str, new_dir_id: UUID) -> None:
58
70
  """Subclasses need to override this to make the change persistent"""
59
- self._name = new_name
60
- self._dir_id = new_dir_id
71
+ self.__name = new_name
72
+ self.__dir_id = new_dir_id