pixeltable 0.2.25__tar.gz → 0.2.27__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 (156) hide show
  1. {pixeltable-0.2.25 → pixeltable-0.2.27}/PKG-INFO +26 -10
  2. {pixeltable-0.2.25 → pixeltable-0.2.27}/README.md +7 -6
  3. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/__version__.py +2 -2
  4. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/table.py +118 -44
  5. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/view.py +2 -2
  6. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/dataframe.py +240 -92
  7. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/env.py +8 -1
  8. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/__init__.py +1 -1
  9. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/exec_node.py +6 -7
  10. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/sql_node.py +91 -44
  11. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/__init__.py +1 -0
  12. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/arithmetic_expr.py +1 -1
  13. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/array_slice.py +1 -1
  14. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/column_property_ref.py +1 -1
  15. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/column_ref.py +29 -2
  16. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/comparison.py +1 -1
  17. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/compound_predicate.py +1 -1
  18. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/expr.py +11 -5
  19. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/expr_set.py +8 -0
  20. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/function_call.py +14 -11
  21. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/in_predicate.py +1 -1
  22. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/inline_expr.py +3 -3
  23. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/is_null.py +1 -1
  24. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/json_mapper.py +1 -1
  25. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/json_path.py +1 -1
  26. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/method_ref.py +1 -1
  27. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/rowid_ref.py +1 -1
  28. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/similarity_expr.py +1 -1
  29. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/sql_element_cache.py +4 -0
  30. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/type_cast.py +2 -2
  31. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/variable.py +3 -0
  32. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/expr_template_function.py +3 -0
  33. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/__init__.py +2 -2
  34. pixeltable-0.2.27/pixeltable/functions/gemini.py +85 -0
  35. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/ollama.py +4 -4
  36. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/globals.py +4 -1
  37. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/io/__init__.py +1 -1
  38. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/io/parquet.py +39 -19
  39. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/iterators/document.py +12 -0
  40. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/__init__.py +1 -1
  41. pixeltable-0.2.27/pixeltable/metadata/converters/convert_22.py +17 -0
  42. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/notes.py +1 -0
  43. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/plan.py +128 -50
  44. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/store.py +1 -1
  45. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/type_system.py +2 -1
  46. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/arrow.py +8 -3
  47. pixeltable-0.2.27/pixeltable/utils/description_helper.py +89 -0
  48. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/documents.py +14 -0
  49. {pixeltable-0.2.25 → pixeltable-0.2.27}/pyproject.toml +39 -6
  50. {pixeltable-0.2.25 → pixeltable-0.2.27}/LICENSE +0 -0
  51. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/__init__.py +0 -0
  52. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/__init__.py +0 -0
  53. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/catalog.py +0 -0
  54. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/column.py +0 -0
  55. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/dir.py +0 -0
  56. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/globals.py +0 -0
  57. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/insertable_table.py +0 -0
  58. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/named_function.py +0 -0
  59. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/path.py +0 -0
  60. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/path_dict.py +0 -0
  61. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/schema_object.py +0 -0
  62. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/table_version.py +0 -0
  63. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/catalog/table_version_path.py +0 -0
  64. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exceptions.py +0 -0
  65. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/aggregation_node.py +0 -0
  66. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/cache_prefetch_node.py +0 -0
  67. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/component_iteration_node.py +0 -0
  68. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/data_row_batch.py +0 -0
  69. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/exec_context.py +0 -0
  70. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/expr_eval_node.py +0 -0
  71. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/in_memory_data_node.py +0 -0
  72. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exec/row_update_node.py +0 -0
  73. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/data_row.py +0 -0
  74. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/expr_dict.py +0 -0
  75. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/globals.py +0 -0
  76. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/literal.py +0 -0
  77. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/object_ref.py +0 -0
  78. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/exprs/row_builder.py +0 -0
  79. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/ext/__init__.py +0 -0
  80. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/ext/functions/__init__.py +0 -0
  81. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/ext/functions/whisperx.py +0 -0
  82. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/ext/functions/yolox.py +0 -0
  83. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/__init__.py +0 -0
  84. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/aggregate_function.py +0 -0
  85. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/callable_function.py +0 -0
  86. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/function.py +0 -0
  87. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/function_registry.py +0 -0
  88. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/globals.py +0 -0
  89. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/query_template_function.py +0 -0
  90. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/signature.py +0 -0
  91. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/func/udf.py +0 -0
  92. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/anthropic.py +0 -0
  93. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/audio.py +0 -0
  94. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/fireworks.py +0 -0
  95. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/globals.py +0 -0
  96. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/huggingface.py +0 -0
  97. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/image.py +0 -0
  98. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/json.py +0 -0
  99. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/llama_cpp.py +0 -0
  100. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/mistralai.py +0 -0
  101. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/openai.py +0 -0
  102. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/replicate.py +0 -0
  103. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/string.py +0 -0
  104. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/timestamp.py +0 -0
  105. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/together.py +0 -0
  106. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/util.py +0 -0
  107. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/video.py +0 -0
  108. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/vision.py +0 -0
  109. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/functions/whisper.py +0 -0
  110. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/index/__init__.py +0 -0
  111. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/index/base.py +0 -0
  112. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/index/btree.py +0 -0
  113. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/index/embedding_index.py +0 -0
  114. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/io/external_store.py +0 -0
  115. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/io/fiftyone.py +0 -0
  116. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/io/globals.py +0 -0
  117. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/io/hf_datasets.py +0 -0
  118. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/io/label_studio.py +0 -0
  119. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/io/pandas.py +0 -0
  120. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/iterators/__init__.py +0 -0
  121. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/iterators/base.py +0 -0
  122. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/iterators/image.py +0 -0
  123. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/iterators/string.py +0 -0
  124. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/iterators/video.py +0 -0
  125. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_10.py +0 -0
  126. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_12.py +0 -0
  127. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_13.py +0 -0
  128. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_14.py +0 -0
  129. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_15.py +0 -0
  130. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_16.py +0 -0
  131. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_17.py +0 -0
  132. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_18.py +0 -0
  133. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_19.py +0 -0
  134. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_20.py +0 -0
  135. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/convert_21.py +0 -0
  136. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/converters/util.py +0 -0
  137. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/metadata/schema.py +0 -0
  138. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/py.typed +0 -0
  139. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/tool/create_test_db_dump.py +0 -0
  140. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/tool/create_test_video.py +0 -0
  141. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/tool/doc_plugins/griffe.py +0 -0
  142. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/tool/doc_plugins/mkdocstrings.py +0 -0
  143. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/tool/doc_plugins/templates/material/udf.html.jinja +0 -0
  144. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/tool/embed_udf.py +0 -0
  145. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/tool/mypy_plugin.py +0 -0
  146. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/__init__.py +0 -0
  147. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/coco.py +0 -0
  148. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/code.py +0 -0
  149. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/filecache.py +0 -0
  150. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/formatter.py +0 -0
  151. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/http_server.py +0 -0
  152. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/media_store.py +0 -0
  153. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/pytorch.py +0 -0
  154. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/s3.py +0 -0
  155. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/sql.py +0 -0
  156. {pixeltable-0.2.25 → pixeltable-0.2.27}/pixeltable/utils/transactional_directory.py +0 -0
@@ -1,15 +1,28 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pixeltable
3
- Version: 0.2.25
4
- Summary: Pixeltable: The Multimodal AI Data Plane
3
+ Version: 0.2.27
4
+ Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
5
+ Home-page: https://pixeltable.com/
6
+ License: Apache-2.0
7
+ Keywords: data-science,machine-learning,database,ai,computer-vision,chatbot,ml,artificial-intelligence,feature-engineering,multimodal,mlops,feature-store,vector-database,llm,genai
5
8
  Author: Pixeltable, Inc.
6
9
  Author-email: contact@pixeltable.com
7
10
  Requires-Python: >=3.9,<4.0
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: License :: OSI Approved :: Apache Software License
14
+ Classifier: Operating System :: MacOS
15
+ Classifier: Operating System :: Microsoft :: Windows
16
+ Classifier: Operating System :: POSIX :: Linux
8
17
  Classifier: Programming Language :: Python :: 3
9
18
  Classifier: Programming Language :: Python :: 3.9
10
19
  Classifier: Programming Language :: Python :: 3.10
11
20
  Classifier: Programming Language :: Python :: 3.11
12
21
  Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Topic :: Database
24
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
13
26
  Requires-Dist: av (>=10.0.0)
14
27
  Requires-Dist: beautifulsoup4 (>=4.0.0,<5.0.0)
15
28
  Requires-Dist: cloudpickle (>=2.2.1,<3.0.0)
@@ -22,9 +35,9 @@ Requires-Dist: numpy (>=1.25,<2.0)
22
35
  Requires-Dist: pandas (>=2.0,<3.0)
23
36
  Requires-Dist: pgvector (>=0.2.1,<0.3.0)
24
37
  Requires-Dist: pillow (>=9.3.0)
25
- Requires-Dist: pixeltable-pgserver (==0.2.7)
38
+ Requires-Dist: pixeltable-pgserver (==0.2.8)
26
39
  Requires-Dist: psutil (>=5.9.5,<6.0.0)
27
- Requires-Dist: psycopg[binary] (==3.1.18)
40
+ Requires-Dist: psycopg[binary] (>=3.1.18)
28
41
  Requires-Dist: puremagic (>=1.20)
29
42
  Requires-Dist: pymupdf (>=1.24.1,<2.0.0)
30
43
  Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
@@ -33,10 +46,12 @@ Requires-Dist: sqlalchemy (>=2.0.23,<3.0.0)
33
46
  Requires-Dist: tenacity (>=8.2,<9.0)
34
47
  Requires-Dist: toml (>=0.10)
35
48
  Requires-Dist: tqdm (>=4.64)
49
+ Project-URL: Documentation, https://docs.pixeltable.com/
50
+ Project-URL: Repository, https://github.com/pixeltable/pixeltable
36
51
  Description-Content-Type: text/markdown
37
52
 
38
53
  <div align="center">
39
- <img src="https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/source/data/pixeltable-logo-large.png"
54
+ <img src="https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/resources/pixeltable-logo-large.png"
40
55
  alt="Pixeltable" width="50%" />
41
56
  <br></br>
42
57
 
@@ -97,11 +112,12 @@ Learn how to create tables, populate them with data, and enhance them with built
97
112
 
98
113
  | Topic | Notebook | Topic | Notebook |
99
114
  |:----------|:-----------------|:-------------------------|:---------------------------------:|
100
- | 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> |
101
- | 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> |
102
- | Incremental Prompt Engineering | <a target="_blank" href="https://colab.research.google.com/github/mistralai/cookbook/blob/main/third_party/Pixeltable/incremental_prompt_engineering_and_model_comparison.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Github"/> | 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> |
103
- | Integrating with Label Studio | <a target="_blank" href="https://pixeltable.readme.io/docs/label-studio"> <img src="https://img.shields.io/badge/Documentation-013056" 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"/> |
104
- | Multimodal Application | <a target="_blank" href="https://huggingface.co/spaces/Pixeltable/Multimodal-Powerhouse"> <img src="https://img.shields.io/badge/Hugging Face-FF7D04" alt="Visit our documentation"/></a> | Document Indexing and RAG | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/rag-demo.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> |
115
+ | 10-Minute Tour of Pixeltable | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/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/notebooks/fundamentals/tables-and-data-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
116
+ | User-Defined Functions (UDFs) | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/feature-guides/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/notebooks/use-cases/object-detection-in-videos.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
117
+ | Incremental Prompt Engineering | <a target="_blank" href="https://colab.research.google.com/github/mistralai/cookbook/blob/main/third_party/Pixeltable/incremental_prompt_engineering_and_model_comparison.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Github"/> | Working with External Files | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/feature-guides/working-with-external-files.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
118
+ | Integrating with Label Studio | <a target="_blank" href="https://pixeltable.readme.io/docs/label-studio"> <img src="https://img.shields.io/badge/📚 Documentation-013056" alt="Visit our documentation"/></a> | Audio/Video Transcript Indexing | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/audio-transcriptions.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> |
119
+ | Multimodal Application | <a target="_blank" href="https://huggingface.co/spaces/Pixeltable/Multimodal-Powerhouse"> <img src="https://img.shields.io/badge/🤗-Gradio App-FF7D04" alt="Visit our Hugging Face Space"/></a> | Document Indexing and RAG | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/rag-demo.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> |
120
+ | Context-Aware Discord Bot | <a target="_blank" href="https://github.com/pixeltable/pixeltable/blob/main/docs/sample-apps/context-aware-discord-bot"> <img src="https://img.shields.io/badge/%F0%9F%92%AC-Discord Bot-%235865F2.svg" alt="Visit our documentation"/></a> | Image/Text Similarity Search | <a target="_blank" href="https://github.com/pixeltable/pixeltable/tree/main/docs/sample-apps/text-and-image-similarity-search-nextjs-fastapi"> <img src="https://img.shields.io/badge/🖥️-Next.js + FastAPI-black.svg" alt="Open In Colab"/> |
105
121
 
106
122
  ## 🧱 Code Samples
107
123
 
@@ -1,5 +1,5 @@
1
1
  <div align="center">
2
- <img src="https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/source/data/pixeltable-logo-large.png"
2
+ <img src="https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/resources/pixeltable-logo-large.png"
3
3
  alt="Pixeltable" width="50%" />
4
4
  <br></br>
5
5
 
@@ -60,11 +60,12 @@ Learn how to create tables, populate them with data, and enhance them with built
60
60
 
61
61
  | Topic | Notebook | Topic | Notebook |
62
62
  |:----------|:-----------------|:-------------------------|:---------------------------------:|
63
- | 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> |
64
- | 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> |
65
- | Incremental Prompt Engineering | <a target="_blank" href="https://colab.research.google.com/github/mistralai/cookbook/blob/main/third_party/Pixeltable/incremental_prompt_engineering_and_model_comparison.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Github"/> | 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> |
66
- | Integrating with Label Studio | <a target="_blank" href="https://pixeltable.readme.io/docs/label-studio"> <img src="https://img.shields.io/badge/Documentation-013056" 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"/> |
67
- | Multimodal Application | <a target="_blank" href="https://huggingface.co/spaces/Pixeltable/Multimodal-Powerhouse"> <img src="https://img.shields.io/badge/Hugging Face-FF7D04" alt="Visit our documentation"/></a> | Document Indexing and RAG | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/tutorials/rag-demo.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> |
63
+ | 10-Minute Tour of Pixeltable | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/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/notebooks/fundamentals/tables-and-data-operations.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
64
+ | User-Defined Functions (UDFs) | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/feature-guides/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/notebooks/use-cases/object-detection-in-videos.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
65
+ | Incremental Prompt Engineering | <a target="_blank" href="https://colab.research.google.com/github/mistralai/cookbook/blob/main/third_party/Pixeltable/incremental_prompt_engineering_and_model_comparison.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Github"/> | Working with External Files | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/feature-guides/working-with-external-files.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> |
66
+ | Integrating with Label Studio | <a target="_blank" href="https://pixeltable.readme.io/docs/label-studio"> <img src="https://img.shields.io/badge/📚 Documentation-013056" alt="Visit our documentation"/></a> | Audio/Video Transcript Indexing | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/audio-transcriptions.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> |
67
+ | Multimodal Application | <a target="_blank" href="https://huggingface.co/spaces/Pixeltable/Multimodal-Powerhouse"> <img src="https://img.shields.io/badge/🤗-Gradio App-FF7D04" alt="Visit our Hugging Face Space"/></a> | Document Indexing and RAG | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/rag-demo.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> |
68
+ | Context-Aware Discord Bot | <a target="_blank" href="https://github.com/pixeltable/pixeltable/blob/main/docs/sample-apps/context-aware-discord-bot"> <img src="https://img.shields.io/badge/%F0%9F%92%AC-Discord Bot-%235865F2.svg" alt="Visit our documentation"/></a> | Image/Text Similarity Search | <a target="_blank" href="https://github.com/pixeltable/pixeltable/tree/main/docs/sample-apps/text-and-image-similarity-search-nextjs-fastapi"> <img src="https://img.shields.io/badge/🖥️-Next.js + FastAPI-black.svg" alt="Open In Colab"/> |
68
69
 
69
70
  ## 🧱 Code Samples
70
71
 
@@ -1,3 +1,3 @@
1
1
  # These version placeholders will be replaced during build.
2
- __version__ = "0.2.25"
3
- __version_tuple__ = (0, 2, 25)
2
+ __version__ = "0.2.27"
3
+ __version_tuple__ = (0, 2, 27)
@@ -10,7 +10,6 @@ from typing import TYPE_CHECKING, Any, Callable, Iterable, Literal, Optional, Se
10
10
  from uuid import UUID
11
11
 
12
12
  import pandas as pd
13
- import pandas.io.formats.style
14
13
  import sqlalchemy as sql
15
14
 
16
15
  import pixeltable as pxt
@@ -21,17 +20,19 @@ import pixeltable.exprs as exprs
21
20
  import pixeltable.index as index
22
21
  import pixeltable.metadata.schema as schema
23
22
  import pixeltable.type_system as ts
24
- from pixeltable.utils.filecache import FileCache
25
23
 
24
+ from ..exprs import ColumnRef
25
+ from ..utils.description_helper import DescriptionHelper
26
+ from ..utils.filecache import FileCache
26
27
  from .column import Column
27
- from .globals import _ROWID_COLUMN_NAME, UpdateStatus, is_system_column_name, is_valid_identifier, MediaValidation
28
+ from .globals import _ROWID_COLUMN_NAME, MediaValidation, UpdateStatus, is_system_column_name, is_valid_identifier
28
29
  from .schema_object import SchemaObject
29
30
  from .table_version import TableVersion
30
31
  from .table_version_path import TableVersionPath
31
- from ..exprs import ColumnRef
32
32
 
33
33
  if TYPE_CHECKING:
34
34
  import torch.utils.data
35
+ import pixeltable.plan
35
36
 
36
37
  _logger = logging.getLogger('pixeltable')
37
38
 
@@ -46,7 +47,7 @@ class Table(SchemaObject):
46
47
  def __init__(self, id: UUID, dir_id: UUID, name: str, tbl_version_path: TableVersionPath):
47
48
  super().__init__(id, name, dir_id)
48
49
  self._is_dropped = False
49
- self._tbl_version_path = tbl_version_path
50
+ self.__tbl_version_path = tbl_version_path
50
51
  self.__query_scope = self.QueryScope(self)
51
52
 
52
53
  class QueryScope:
@@ -63,6 +64,7 @@ class Table(SchemaObject):
63
64
  raise AttributeError(f'Table {self.__table._name!r} has no query with that name: {name!r}')
64
65
 
65
66
  def _move(self, new_name: str, new_dir_id: UUID) -> None:
67
+ self._check_is_dropped()
66
68
  super()._move(new_name, new_dir_id)
67
69
  with env.Env.get().engine.begin() as conn:
68
70
  stmt = sql.text((
@@ -96,6 +98,7 @@ class Table(SchemaObject):
96
98
  }
97
99
  ```
98
100
  """
101
+ self._check_is_dropped()
99
102
  md = super().get_metadata()
100
103
  md['base'] = self._base._path if self._base is not None else None
101
104
  md['schema'] = self._schema
@@ -116,6 +119,12 @@ class Table(SchemaObject):
116
119
  """Return TableVersion for just this table."""
117
120
  return self._tbl_version_path.tbl_version
118
121
 
122
+ @property
123
+ def _tbl_version_path(self) -> TableVersionPath:
124
+ """Return TableVersionPath for just this table."""
125
+ self._check_is_dropped()
126
+ return self.__tbl_version_path
127
+
119
128
  def __hash__(self) -> int:
120
129
  return hash(self._tbl_version.id)
121
130
 
@@ -153,6 +162,7 @@ class Table(SchemaObject):
153
162
  Returns:
154
163
  A list of view paths.
155
164
  """
165
+ self._check_is_dropped()
156
166
  return [t._path for t in self._get_views(recursive=recursive)]
157
167
 
158
168
  def _get_views(self, *, recursive: bool = True) -> list['Table']:
@@ -166,7 +176,8 @@ class Table(SchemaObject):
166
176
  """Return a DataFrame for this table.
167
177
  """
168
178
  # local import: avoid circular imports
169
- return pxt.DataFrame(self._tbl_version_path)
179
+ from pixeltable.plan import FromClause
180
+ return pxt.DataFrame(FromClause(tbls=[self._tbl_version_path]))
170
181
 
171
182
  @property
172
183
  def queries(self) -> 'Table.QueryScope':
@@ -180,6 +191,13 @@ class Table(SchemaObject):
180
191
  """Return a [`DataFrame`][pixeltable.DataFrame] for this table."""
181
192
  return self._df().where(pred)
182
193
 
194
+ def join(
195
+ self, other: 'Table', *, on: Optional['exprs.Expr'] = None,
196
+ how: 'pixeltable.plan.JoinType.LiteralType' = 'inner'
197
+ ) -> 'pxt.DataFrame':
198
+ """Return a [`DataFrame`][pixeltable.DataFrame] for this table."""
199
+ return self._df().join(other, on=on, how=how)
200
+
183
201
  def order_by(self, *items: 'exprs.Expr', asc: bool = True) -> 'pxt.DataFrame':
184
202
  """Return a [`DataFrame`][pixeltable.DataFrame] for this table."""
185
203
  return self._df().order_by(*items, asc=asc)
@@ -200,7 +218,6 @@ class Table(SchemaObject):
200
218
  ) -> 'pxt.dataframe.DataFrameResultSet':
201
219
  """Return rows from this table.
202
220
  """
203
- self._check_is_dropped()
204
221
  return self._df().show(*args, **kwargs)
205
222
 
206
223
  def head(
@@ -246,6 +263,18 @@ class Table(SchemaObject):
246
263
  base_id = self._tbl_version_path.base.tbl_version.id
247
264
  return catalog.Catalog.get().tbls[base_id]
248
265
 
266
+ @property
267
+ def _bases(self) -> list['Table']:
268
+ """
269
+ The ancestor list of bases of this table, starting with its immediate base.
270
+ """
271
+ bases = []
272
+ base = self._base
273
+ while base is not None:
274
+ bases.append(base)
275
+ base = base._base
276
+ return bases
277
+
249
278
  @property
250
279
  def _comment(self) -> str:
251
280
  return self._tbl_version.comment
@@ -258,47 +287,98 @@ class Table(SchemaObject):
258
287
  def _media_validation(self) -> MediaValidation:
259
288
  return self._tbl_version.media_validation
260
289
 
261
- def _description(self, cols: Optional[Iterable[Column]] = None) -> pd.DataFrame:
262
- cols = self._tbl_version_path.columns()
263
- df = pd.DataFrame({
264
- 'Column Name': [c.name for c in cols],
265
- 'Type': [c.col_type._to_str(as_schema=True) for c in cols],
266
- 'Computed With': [c.value_expr.display_str(inline=False) if c.value_expr is not None else '' for c in cols],
267
- })
268
- return df
269
-
270
- def _description_html(self, cols: Optional[Iterable[Column]] = None) -> pandas.io.formats.style.Styler:
271
- pd_df = self._description(cols)
272
- # white-space: pre-wrap: print \n as newline
273
- # th: center-align headings
274
- return (
275
- pd_df.style.set_properties(None, **{'white-space': 'pre-wrap', 'text-align': 'left'})
276
- .set_table_styles([dict(selector='th', props=[('text-align', 'center')])])
277
- .hide(axis='index')
290
+ def __repr__(self) -> str:
291
+ return self._descriptors().to_string()
292
+
293
+ def _repr_html_(self) -> str:
294
+ return self._descriptors().to_html()
295
+
296
+ def _descriptors(self) -> DescriptionHelper:
297
+ """
298
+ Constructs a list of descriptors for this table that can be pretty-printed.
299
+ """
300
+ helper = DescriptionHelper()
301
+ helper.append(self._title_descriptor())
302
+ helper.append(self._col_descriptor())
303
+ idxs = self._index_descriptor()
304
+ if not idxs.empty:
305
+ helper.append(idxs)
306
+ stores = self._external_store_descriptor()
307
+ if not stores.empty:
308
+ helper.append(stores)
309
+ if self._comment:
310
+ helper.append(f'COMMENT: {self._comment}')
311
+ return helper
312
+
313
+ def _title_descriptor(self) -> str:
314
+ title: str
315
+ if self._base is None:
316
+ title = f'Table\n{self._path!r}'
317
+ else:
318
+ title = f'View\n{self._path!r}'
319
+ title += f'\n(of {self.__bases_to_desc()})'
320
+ return title
321
+
322
+ def _col_descriptor(self, columns: Optional[list[str]] = None) -> pd.DataFrame:
323
+ return pd.DataFrame(
324
+ {
325
+ 'Column Name': col.name,
326
+ 'Type': col.col_type._to_str(as_schema=True),
327
+ 'Computed With': col.value_expr.display_str(inline=False) if col.value_expr is not None else ''
328
+ }
329
+ for col in self.__tbl_version_path.columns()
330
+ if columns is None or col.name in columns
278
331
  )
279
332
 
333
+ def __bases_to_desc(self) -> str:
334
+ bases = self._bases
335
+ assert len(bases) >= 1
336
+ if len(bases) <= 2:
337
+ return ', '.join(repr(b._path) for b in bases)
338
+ else:
339
+ return f'{bases[0]._path!r}, ..., {bases[-1]._path!r}'
340
+
341
+ def _index_descriptor(self, columns: Optional[list[str]] = None) -> pd.DataFrame:
342
+ from pixeltable import index
343
+
344
+ pd_rows = []
345
+ for name, info in self._tbl_version.idxs_by_name.items():
346
+ if isinstance(info.idx, index.EmbeddingIndex) and (columns is None or info.col.name in columns):
347
+ display_embed = info.idx.string_embed if info.col.col_type.is_string_type() else info.idx.image_embed
348
+ if info.idx.string_embed is not None and info.idx.image_embed is not None:
349
+ embed_str = f'{display_embed} (+1)'
350
+ else:
351
+ embed_str = str(display_embed)
352
+ row = {
353
+ 'Index Name': name,
354
+ 'Column': info.col.name,
355
+ 'Metric': str(info.idx.metric.name.lower()),
356
+ 'Embedding': embed_str,
357
+ }
358
+ pd_rows.append(row)
359
+ return pd.DataFrame(pd_rows)
360
+
361
+ def _external_store_descriptor(self) -> pd.DataFrame:
362
+ pd_rows = []
363
+ for name, store in self._tbl_version.external_stores.items():
364
+ row = {
365
+ 'External Store': name,
366
+ 'Type': type(store).__name__,
367
+ }
368
+ pd_rows.append(row)
369
+ return pd.DataFrame(pd_rows)
370
+
280
371
  def describe(self) -> None:
281
372
  """
282
373
  Print the table schema.
283
374
  """
375
+ self._check_is_dropped()
284
376
  if getattr(builtins, '__IPYTHON__', False):
285
377
  from IPython.display import display
286
- display(self._description_html())
378
+ display(self._repr_html_())
287
379
  else:
288
380
  print(repr(self))
289
381
 
290
- # TODO: Display comments in _repr_html()
291
- def __repr__(self) -> str:
292
- description_str = self._description().to_string(index=False)
293
- if self._comment is None:
294
- comment = ''
295
- else:
296
- comment = f'{self._comment}\n'
297
- return f'{self._display_name()} \'{self._name}\'\n{comment}{description_str}'
298
-
299
- def _repr_html_(self) -> str:
300
- return self._description_html()._repr_html_() # type: ignore[attr-defined]
301
-
302
382
  def _drop(self) -> None:
303
383
  cat = catalog.Catalog.get()
304
384
  # verify all dependents are deleted by now
@@ -337,6 +417,7 @@ class Table(SchemaObject):
337
417
 
338
418
  For details, see the documentation for [`add_column()`][pixeltable.catalog.Table.add_column].
339
419
  """
420
+ self._check_is_dropped()
340
421
  if not isinstance(col_name, str):
341
422
  raise excs.Error(f'Column name must be a string, got {type(col_name)}')
342
423
  if not isinstance(spec, (ts.ColumnType, exprs.Expr, type, _GenericAlias)):
@@ -686,7 +767,6 @@ class Table(SchemaObject):
686
767
  >>> tbl = pxt.get_table('my_table')
687
768
  ... tbl.rename_column('col1', 'col2')
688
769
  """
689
- self._check_is_dropped()
690
770
  self._tbl_version.rename_column(old_name, new_name)
691
771
 
692
772
  def add_embedding_index(
@@ -748,7 +828,6 @@ class Table(SchemaObject):
748
828
  """
749
829
  if self._tbl_version_path.is_snapshot():
750
830
  raise excs.Error('Cannot add an index to a snapshot')
751
- self._check_is_dropped()
752
831
  col: Column
753
832
  if isinstance(column, str):
754
833
  self.__check_column_name_exists(column, include_bases=True)
@@ -872,7 +951,6 @@ class Table(SchemaObject):
872
951
  ) -> None:
873
952
  if self._tbl_version_path.is_snapshot():
874
953
  raise excs.Error('Cannot drop an index from a snapshot')
875
- self._check_is_dropped()
876
954
  assert (col is None) != (idx_name is None)
877
955
 
878
956
  if idx_name is not None:
@@ -1009,7 +1087,6 @@ class Table(SchemaObject):
1009
1087
 
1010
1088
  >>> tbl.update({'int_col': tbl.int_col + 1}, where=tbl.int_col == 0)
1011
1089
  """
1012
- self._check_is_dropped()
1013
1090
  status = self._tbl_version.update(value_spec, where, cascade)
1014
1091
  FileCache.get().emit_eviction_warnings()
1015
1092
  return status
@@ -1045,7 +1122,6 @@ class Table(SchemaObject):
1045
1122
  """
1046
1123
  if self._tbl_version_path.is_snapshot():
1047
1124
  raise excs.Error('Cannot update a snapshot')
1048
- self._check_is_dropped()
1049
1125
  rows = list(rows)
1050
1126
 
1051
1127
  row_updates: list[dict[Column, exprs.Expr]] = []
@@ -1100,7 +1176,6 @@ class Table(SchemaObject):
1100
1176
  """
1101
1177
  if self._tbl_version_path.is_snapshot():
1102
1178
  raise excs.Error('Cannot revert a snapshot')
1103
- self._check_is_dropped()
1104
1179
  self._tbl_version.revert()
1105
1180
 
1106
1181
  @overload
@@ -1150,7 +1225,6 @@ class Table(SchemaObject):
1150
1225
  """
1151
1226
  if self._tbl_version.is_snapshot:
1152
1227
  raise excs.Error(f'Table `{self._name}` is a snapshot, so it cannot be linked to an external store.')
1153
- self._check_is_dropped()
1154
1228
  if store.name in self.external_stores:
1155
1229
  raise excs.Error(f'Table `{self._name}` already has an external store with that name: {store.name}')
1156
1230
  _logger.info(f'Linking external store `{store.name}` to table `{self._name}`')
@@ -59,7 +59,7 @@ class View(Table):
59
59
 
60
60
  # verify that filter can be evaluated in the context of the base
61
61
  if predicate is not None:
62
- if not predicate.is_bound_by(base):
62
+ if not predicate.is_bound_by([base]):
63
63
  raise excs.Error(f'Filter cannot be computed in the context of the base {base.tbl_name()}')
64
64
  # create a copy that we can modify and store
65
65
  predicate = predicate.copy()
@@ -69,7 +69,7 @@ class View(Table):
69
69
  if not col.is_computed:
70
70
  continue
71
71
  # make sure that the value can be computed in the context of the base
72
- if col.value_expr is not None and not col.value_expr.is_bound_by(base):
72
+ if col.value_expr is not None and not col.value_expr.is_bound_by([base]):
73
73
  raise excs.Error(
74
74
  f'Column {col.name}: value expression cannot be computed in the context of the base {base.tbl_name()}')
75
75