pixeltable 0.2.30__tar.gz → 0.3.1__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 (162) hide show
  1. {pixeltable-0.2.30 → pixeltable-0.3.1}/PKG-INFO +5 -11
  2. {pixeltable-0.2.30 → pixeltable-0.3.1}/README.md +2 -10
  3. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/__init__.py +1 -1
  4. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/__version__.py +2 -2
  5. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/table.py +212 -173
  6. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/table_version.py +2 -1
  7. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/view.py +3 -5
  8. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/dataframe.py +52 -39
  9. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/env.py +94 -5
  10. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/__init__.py +1 -1
  11. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/aggregation_node.py +3 -3
  12. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/cache_prefetch_node.py +13 -7
  13. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/component_iteration_node.py +3 -9
  14. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/data_row_batch.py +17 -5
  15. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/exec_node.py +32 -12
  16. pixeltable-0.3.1/pixeltable/exec/expr_eval/__init__.py +1 -0
  17. pixeltable-0.3.1/pixeltable/exec/expr_eval/evaluators.py +245 -0
  18. pixeltable-0.3.1/pixeltable/exec/expr_eval/expr_eval_node.py +404 -0
  19. pixeltable-0.3.1/pixeltable/exec/expr_eval/globals.py +114 -0
  20. pixeltable-0.3.1/pixeltable/exec/expr_eval/row_buffer.py +76 -0
  21. pixeltable-0.3.1/pixeltable/exec/expr_eval/schedulers.py +232 -0
  22. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/in_memory_data_node.py +2 -2
  23. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/row_update_node.py +14 -14
  24. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/sql_node.py +2 -2
  25. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/column_ref.py +5 -1
  26. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/data_row.py +50 -40
  27. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/expr.py +57 -12
  28. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/function_call.py +54 -19
  29. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/inline_expr.py +12 -21
  30. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/literal.py +25 -8
  31. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/row_builder.py +23 -0
  32. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/similarity_expr.py +4 -4
  33. pixeltable-0.3.1/pixeltable/func/__init__.py +9 -0
  34. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/aggregate_function.py +4 -0
  35. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/callable_function.py +54 -6
  36. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/expr_template_function.py +5 -1
  37. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/function.py +54 -13
  38. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/query_template_function.py +56 -10
  39. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/tools.py +51 -14
  40. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/udf.py +7 -1
  41. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/__init__.py +1 -1
  42. pixeltable-0.3.1/pixeltable/functions/anthropic.py +228 -0
  43. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/gemini.py +2 -6
  44. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/huggingface.py +10 -28
  45. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/openai.py +225 -28
  46. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/globals.py +8 -5
  47. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/index/embedding_index.py +90 -38
  48. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/io/label_studio.py +1 -1
  49. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/__init__.py +1 -1
  50. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_24.py +11 -2
  51. pixeltable-0.3.1/pixeltable/metadata/converters/convert_25.py +19 -0
  52. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/notes.py +1 -0
  53. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/plan.py +24 -9
  54. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/store.py +6 -0
  55. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/type_system.py +4 -7
  56. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/arrow.py +3 -3
  57. {pixeltable-0.2.30 → pixeltable-0.3.1}/pyproject.toml +7 -4
  58. pixeltable-0.2.30/pixeltable/exec/expr_eval_node.py +0 -232
  59. pixeltable-0.2.30/pixeltable/func/__init__.py +0 -9
  60. pixeltable-0.2.30/pixeltable/functions/anthropic.py +0 -141
  61. {pixeltable-0.2.30 → pixeltable-0.3.1}/LICENSE +0 -0
  62. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/__init__.py +0 -0
  63. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/catalog.py +0 -0
  64. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/column.py +0 -0
  65. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/dir.py +0 -0
  66. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/globals.py +0 -0
  67. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/insertable_table.py +0 -0
  68. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/named_function.py +0 -0
  69. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/path.py +0 -0
  70. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/path_dict.py +0 -0
  71. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/schema_object.py +0 -0
  72. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/catalog/table_version_path.py +0 -0
  73. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exceptions.py +0 -0
  74. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exec/exec_context.py +0 -0
  75. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/__init__.py +0 -0
  76. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/arithmetic_expr.py +0 -0
  77. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/array_slice.py +0 -0
  78. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/column_property_ref.py +0 -0
  79. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/comparison.py +0 -0
  80. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/compound_predicate.py +0 -0
  81. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/expr_dict.py +0 -0
  82. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/expr_set.py +0 -0
  83. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/globals.py +0 -0
  84. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/in_predicate.py +0 -0
  85. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/is_null.py +0 -0
  86. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/json_mapper.py +0 -0
  87. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/json_path.py +0 -0
  88. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/method_ref.py +0 -0
  89. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/object_ref.py +0 -0
  90. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/rowid_ref.py +0 -0
  91. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/sql_element_cache.py +0 -0
  92. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/type_cast.py +0 -0
  93. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/exprs/variable.py +0 -0
  94. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/ext/__init__.py +0 -0
  95. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/ext/functions/__init__.py +0 -0
  96. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/ext/functions/whisperx.py +0 -0
  97. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/ext/functions/yolox.py +0 -0
  98. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/function_registry.py +0 -0
  99. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/globals.py +0 -0
  100. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/func/signature.py +0 -0
  101. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/audio.py +0 -0
  102. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/fireworks.py +0 -0
  103. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/globals.py +0 -0
  104. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/image.py +0 -0
  105. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/json.py +0 -0
  106. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/llama_cpp.py +0 -0
  107. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/math.py +0 -0
  108. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/mistralai.py +0 -0
  109. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/ollama.py +0 -0
  110. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/replicate.py +0 -0
  111. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/string.py +0 -0
  112. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/timestamp.py +0 -0
  113. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/together.py +0 -0
  114. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/util.py +0 -0
  115. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/video.py +0 -0
  116. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/vision.py +0 -0
  117. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/functions/whisper.py +0 -0
  118. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/index/__init__.py +0 -0
  119. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/index/base.py +0 -0
  120. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/index/btree.py +0 -0
  121. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/io/__init__.py +0 -0
  122. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/io/external_store.py +0 -0
  123. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/io/fiftyone.py +0 -0
  124. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/io/globals.py +0 -0
  125. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/io/hf_datasets.py +0 -0
  126. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/io/pandas.py +0 -0
  127. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/io/parquet.py +0 -0
  128. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/iterators/__init__.py +0 -0
  129. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/iterators/base.py +0 -0
  130. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/iterators/document.py +0 -0
  131. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/iterators/image.py +0 -0
  132. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/iterators/string.py +0 -0
  133. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/iterators/video.py +0 -0
  134. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_10.py +0 -0
  135. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_12.py +0 -0
  136. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_13.py +0 -0
  137. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_14.py +0 -0
  138. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_15.py +0 -0
  139. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_16.py +0 -0
  140. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_17.py +0 -0
  141. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_18.py +0 -0
  142. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_19.py +0 -0
  143. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_20.py +0 -0
  144. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_21.py +0 -0
  145. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_22.py +0 -0
  146. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/convert_23.py +0 -0
  147. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/converters/util.py +0 -0
  148. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/metadata/schema.py +0 -0
  149. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/py.typed +0 -0
  150. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/__init__.py +0 -0
  151. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/coco.py +0 -0
  152. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/code.py +0 -0
  153. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/description_helper.py +0 -0
  154. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/documents.py +0 -0
  155. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/filecache.py +0 -0
  156. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/formatter.py +0 -0
  157. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/http_server.py +0 -0
  158. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/media_store.py +0 -0
  159. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/pytorch.py +0 -0
  160. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/s3.py +0 -0
  161. {pixeltable-0.2.30 → pixeltable-0.3.1}/pixeltable/utils/sql.py +0 -0
  162. {pixeltable-0.2.30 → pixeltable-0.3.1}/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.30
3
+ Version: 0.3.1
4
4
  Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
5
5
  Home-page: https://pixeltable.com/
6
6
  License: Apache-2.0
@@ -27,11 +27,13 @@ Requires-Dist: av (>=10.0.0)
27
27
  Requires-Dist: beautifulsoup4 (>=4.0.0,<5.0.0)
28
28
  Requires-Dist: cloudpickle (>=2.2.1,<3.0.0)
29
29
  Requires-Dist: ftfy (>=6.2.0,<7.0.0)
30
+ Requires-Dist: httpx (>=0.27)
30
31
  Requires-Dist: jinja2 (>=3.1.3,<4.0.0)
31
32
  Requires-Dist: jmespath (>=1.0.1,<2.0.0)
32
33
  Requires-Dist: jsonschema (>=4.1.0)
33
34
  Requires-Dist: lxml (>=5.0)
34
35
  Requires-Dist: more-itertools (>=10.2,<11.0)
36
+ Requires-Dist: nest_asyncio (>=1.5)
35
37
  Requires-Dist: numpy (>=1.25,<2.0)
36
38
  Requires-Dist: pandas (>=2.0,<3.0)
37
39
  Requires-Dist: pgvector (>=0.2.1,<0.3.0)
@@ -255,7 +257,7 @@ Learn how to interact with inference services such as [Together AI](https://pixe
255
257
 
256
258
  ```python
257
259
  import pixeltable as pxt
258
- from pixeltable.functions.huggingface import clip_image, clip_text
260
+ from pixeltable.functions.huggingface import clip
259
261
  from pixeltable.iterators import FrameIterator
260
262
  import PIL.Image
261
263
 
@@ -266,16 +268,8 @@ video_table.insert([{'video': '/video.mp4'}])
266
268
  frames_view = pxt.create_view(
267
269
  'frames', video_table, iterator=FrameIterator.create(video=video_table.video))
268
270
 
269
- @pxt.expr_udf
270
- def embed_image(img: PIL.Image.Image):
271
- return clip_image(img, model_id='openai/clip-vit-base-patch32')
272
-
273
- @pxt.expr_udf
274
- def str_embed(s: str):
275
- return clip_text(s, model_id='openai/clip-vit-base-patch32')
276
-
277
271
  # Create an index on the 'frame' column that allows text and image search
278
- frames_view.add_embedding_index('frame', string_embed=str_embed, image_embed=embed_image)
272
+ frames_view.add_embedding_index('frame', embed=clip.using('openai/clip-vit-base-patch32'))
279
273
 
280
274
  # Now we will retrieve images based on a sample image
281
275
  sample_image = '/image.jpeg'
@@ -201,7 +201,7 @@ Learn how to interact with inference services such as [Together AI](https://pixe
201
201
 
202
202
  ```python
203
203
  import pixeltable as pxt
204
- from pixeltable.functions.huggingface import clip_image, clip_text
204
+ from pixeltable.functions.huggingface import clip
205
205
  from pixeltable.iterators import FrameIterator
206
206
  import PIL.Image
207
207
 
@@ -212,16 +212,8 @@ video_table.insert([{'video': '/video.mp4'}])
212
212
  frames_view = pxt.create_view(
213
213
  'frames', video_table, iterator=FrameIterator.create(video=video_table.video))
214
214
 
215
- @pxt.expr_udf
216
- def embed_image(img: PIL.Image.Image):
217
- return clip_image(img, model_id='openai/clip-vit-base-patch32')
218
-
219
- @pxt.expr_udf
220
- def str_embed(s: str):
221
- return clip_text(s, model_id='openai/clip-vit-base-patch32')
222
-
223
215
  # Create an index on the 'frame' column that allows text and image search
224
- frames_view.add_embedding_index('frame', string_embed=str_embed, image_embed=embed_image)
216
+ frames_view.add_embedding_index('frame', embed=clip.using('openai/clip-vit-base-patch32'))
225
217
 
226
218
  # Now we will retrieve images based on a sample image
227
219
  sample_image = '/image.jpeg'
@@ -2,7 +2,7 @@ from .catalog import Column, InsertableTable, Table, UpdateStatus, View
2
2
  from .dataframe import DataFrame
3
3
  from .exceptions import Error
4
4
  from .exprs import RELATIVE_PATH_ROOT
5
- from .func import Aggregator, Function, expr_udf, uda, udf
5
+ from .func import Aggregator, Function, expr_udf, query, uda, udf
6
6
  from .globals import (array, configure_logging, create_dir, create_snapshot, create_table, create_view, drop_dir,
7
7
  drop_table, get_table, init, list_dirs, list_functions, list_tables, move, tool, tools)
8
8
  from .type_system import (Array, ArrayType, Audio, AudioType, Bool, BoolType, ColumnType, Document, DocumentType, Float,
@@ -1,3 +1,3 @@
1
1
  # These version placeholders will be replaced during build.
2
- __version__ = "0.2.30"
3
- __version_tuple__ = (0, 2, 30)
2
+ __version__ = "0.3.1"
3
+ __version_tuple__ = (0, 3, 1)