corvic-engine 0.3.0rc95__tar.gz → 0.3.0rc97__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.
Files changed (212) hide show
  1. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/Cargo.lock +2 -2
  2. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/Cargo.toml +1 -1
  3. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/PKG-INFO +4 -4
  4. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/pyproject.toml +19 -19
  5. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_space.py +2 -2
  6. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/_schema.py +7 -0
  7. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/ops.py +27 -4
  8. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/_soft_delete.py +4 -1
  9. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/errors.py +14 -10
  10. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_from_value.py +3 -3
  11. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_to_value.py +1 -1
  12. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/client.py +2 -1
  13. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/staging.py +16 -3
  14. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/transfer/_orm_backed_proto.py +12 -5
  15. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/resource_pb2.py +52 -52
  16. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/LICENSE +0 -0
  17. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/README.md +0 -0
  18. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/Cargo.toml +0 -0
  19. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/buf/validate/validate_pb2.py +0 -0
  20. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/buf/validate/validate_pb2.pyi +0 -0
  21. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/buf/validate/validate_pb2_grpc.py +0 -0
  22. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/buf/validate/validate_pb2_grpc.pyi +0 -0
  23. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/context/__init__.py +0 -0
  24. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/context/py.typed +0 -0
  25. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/embed/__init__.py +0 -0
  26. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/embed/node2vec.py +0 -0
  27. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/embed/py.typed +0 -0
  28. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/embedding_metric/__init__.py +0 -0
  29. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/embedding_metric/embeddings.py +0 -0
  30. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/embedding_metric/py.typed +0 -0
  31. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/__init__.py +0 -0
  32. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_base_model.py +0 -0
  33. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_data_connector.py +0 -0
  34. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_defaults.py +0 -0
  35. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_errors.py +0 -0
  36. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_feature_type.py +0 -0
  37. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_feature_view.py +0 -0
  38. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_pipeline.py +0 -0
  39. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_proto_orm_convert.py +0 -0
  40. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_resource.py +0 -0
  41. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_room.py +0 -0
  42. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_source.py +0 -0
  43. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/emodel/py.typed +0 -0
  44. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/engine/__init__.py +0 -0
  45. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/engine/_native.pyi +0 -0
  46. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/engine/py.typed +0 -0
  47. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/eorm/__init__.py +0 -0
  48. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/__init__.py +0 -0
  49. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/_transformations.py +0 -0
  50. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/aggregation.py +0 -0
  51. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/encoders.py +0 -0
  52. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/errors.py +0 -0
  53. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/feature_types.py +0 -0
  54. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/py.typed +0 -0
  55. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/row_filters/__init__.py +0 -0
  56. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/row_filters/_jsonlogic.py +0 -0
  57. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/row_filters/_row_filters.py +0 -0
  58. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/sample_strategy.py +0 -0
  59. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/__init__.py +0 -0
  60. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/_proto_columns.py +0 -0
  61. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/func/__init__.py +0 -0
  62. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/func/utc_func.py +0 -0
  63. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/func/uuid_func.py +0 -0
  64. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/ids.py +0 -0
  65. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/keys.py +0 -0
  66. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/orm/py.typed +0 -0
  67. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/__init__.py +0 -0
  68. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_const.py +0 -0
  69. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_temporal.py +0 -0
  70. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_types.py +0 -0
  71. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/py.typed +0 -0
  72. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/proto_wrapper/__init__.py +0 -0
  73. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/proto_wrapper/_errors.py +0 -0
  74. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/proto_wrapper/_wrappers.py +0 -0
  75. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/proto_wrapper/py.typed +0 -0
  76. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/result/__init__.py +0 -0
  77. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/result/py.typed +0 -0
  78. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/sql/__init__.py +0 -0
  79. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/sql/parse_ops.py +0 -0
  80. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/sql/py.typed +0 -0
  81. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/__init__.py +0 -0
  82. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/_column_encoding.py +0 -0
  83. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/_dimension_reduction.py +0 -0
  84. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/_embedder.py +0 -0
  85. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/_image_embedder.py +0 -0
  86. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/_planner.py +0 -0
  87. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/_text_embedder.py +0 -0
  88. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/client.py +0 -0
  89. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/in_memory_executor.py +0 -0
  90. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/op_graph_executor.py +0 -0
  91. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/py.typed +0 -0
  92. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/staging.py +0 -0
  93. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system/storage.py +0 -0
  94. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/__init__.py +0 -0
  95. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/fs_blob_store.py +0 -0
  96. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/py.typed +0 -0
  97. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/rdbms_blob_store.py +0 -0
  98. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/table/__init__.py +0 -0
  99. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/table/py.typed +0 -0
  100. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/table/table.py +0 -0
  101. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/transfer/__init__.py +0 -0
  102. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/transfer/_common_transformations.py +0 -0
  103. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/transfer/py.typed +0 -0
  104. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/version/__init__.py +0 -0
  105. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/version/py.typed +0 -0
  106. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/well_known_types/__init__.py +0 -0
  107. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic/well_known_types/py.typed +0 -0
  108. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/__init__.py +0 -0
  109. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/__init__.py +0 -0
  110. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/__init__.py +0 -0
  111. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/__init__.py +0 -0
  112. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/graph_pb2.py +0 -0
  113. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/graph_pb2.pyi +0 -0
  114. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.py +0 -0
  115. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.pyi +0 -0
  116. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/__init__.py +0 -0
  117. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/__init__.py +0 -0
  118. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/models_pb2.py +0 -0
  119. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/models_pb2.pyi +0 -0
  120. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/models_pb2_grpc.py +0 -0
  121. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/models_pb2_grpc.pyi +0 -0
  122. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/__init__.py +0 -0
  123. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/__init__.py +0 -0
  124. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/experiment_pb2.py +0 -0
  125. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/experiment_pb2.pyi +0 -0
  126. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/experiment_pb2_grpc.py +0 -0
  127. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/experiment_pb2_grpc.pyi +0 -0
  128. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/space_pb2.py +0 -0
  129. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/space_pb2.pyi +0 -0
  130. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/space_pb2_grpc.py +0 -0
  131. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/space_pb2_grpc.pyi +0 -0
  132. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/__init__.py +0 -0
  133. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/feature_view_pb2.py +0 -0
  134. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/feature_view_pb2.pyi +0 -0
  135. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.py +0 -0
  136. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.pyi +0 -0
  137. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/space_pb2.py +0 -0
  138. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/space_pb2.pyi +0 -0
  139. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/space_pb2_grpc.py +0 -0
  140. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/space_pb2_grpc.pyi +0 -0
  141. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/__init__.py +0 -0
  142. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/__init__.py +0 -0
  143. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/service_pb2.py +0 -0
  144. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/service_pb2.pyi +0 -0
  145. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/service_pb2_grpc.py +0 -0
  146. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/service_pb2_grpc.pyi +0 -0
  147. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/__init__.py +0 -0
  148. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/pipeline_pb2.py +0 -0
  149. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/pipeline_pb2.pyi +0 -0
  150. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.py +0 -0
  151. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.pyi +0 -0
  152. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/quick_mode_pb2.py +0 -0
  153. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/quick_mode_pb2.pyi +0 -0
  154. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.py +0 -0
  155. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.pyi +0 -0
  156. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/resource_pb2.pyi +0 -0
  157. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/resource_pb2_grpc.py +0 -0
  158. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/resource_pb2_grpc.pyi +0 -0
  159. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/room_pb2.py +0 -0
  160. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/room_pb2.pyi +0 -0
  161. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/room_pb2_grpc.py +0 -0
  162. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/room_pb2_grpc.pyi +0 -0
  163. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/source_pb2.py +0 -0
  164. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/source_pb2.pyi +0 -0
  165. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/source_pb2_grpc.py +0 -0
  166. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/source_pb2_grpc.pyi +0 -0
  167. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/table_pb2.py +0 -0
  168. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/table_pb2.pyi +0 -0
  169. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/table_pb2_grpc.py +0 -0
  170. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/table_pb2_grpc.pyi +0 -0
  171. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/__init__.py +0 -0
  172. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/__init__.py +0 -0
  173. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/models_pb2.py +0 -0
  174. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/models_pb2.pyi +0 -0
  175. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/models_pb2_grpc.py +0 -0
  176. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/models_pb2_grpc.pyi +0 -0
  177. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/__init__.py +0 -0
  178. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/__init__.py +0 -0
  179. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/common_pb2.py +0 -0
  180. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/common_pb2.pyi +0 -0
  181. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/common_pb2_grpc.py +0 -0
  182. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/common_pb2_grpc.pyi +0 -0
  183. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/data_connector_pb2.py +0 -0
  184. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/data_connector_pb2.pyi +0 -0
  185. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/data_connector_pb2_grpc.py +0 -0
  186. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/data_connector_pb2_grpc.pyi +0 -0
  187. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/feature_view_pb2.py +0 -0
  188. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/feature_view_pb2.pyi +0 -0
  189. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.py +0 -0
  190. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.pyi +0 -0
  191. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/pipeline_pb2.py +0 -0
  192. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/pipeline_pb2.pyi +0 -0
  193. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.py +0 -0
  194. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.pyi +0 -0
  195. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/space_pb2.py +0 -0
  196. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/space_pb2.pyi +0 -0
  197. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/space_pb2_grpc.py +0 -0
  198. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/space_pb2_grpc.pyi +0 -0
  199. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/table_pb2.py +0 -0
  200. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/table_pb2.pyi +0 -0
  201. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/table_pb2_grpc.py +0 -0
  202. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/table_pb2_grpc.pyi +0 -0
  203. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/__init__.py +0 -0
  204. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/__init__.py +0 -0
  205. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/event_pb2.py +0 -0
  206. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/event_pb2.pyi +0 -0
  207. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/event_pb2_grpc.py +0 -0
  208. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/event_pb2_grpc.pyi +0 -0
  209. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/service_pb2.py +0 -0
  210. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/service_pb2.pyi +0 -0
  211. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/service_pb2_grpc.py +0 -0
  212. {corvic_engine-0.3.0rc95 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/service_pb2_grpc.pyi +0 -0
@@ -16,7 +16,7 @@ checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
16
16
 
17
17
  [[package]]
18
18
  name = "corvic-engine"
19
- version = "0.3.0-rc.95"
19
+ version = "0.3.0-rc.97"
20
20
  dependencies = [
21
21
  "numpy",
22
22
  "pyo3",
@@ -57,7 +57,7 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
57
57
 
58
58
  [[package]]
59
59
  name = "engine-walk"
60
- version = "0.3.0-rc.95"
60
+ version = "0.3.0-rc.97"
61
61
  dependencies = [
62
62
  "version_check",
63
63
  ]
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.0-rc.95"
6
+ version = "0.3.0-rc.97"
7
7
  edition = "2021"
8
8
  publish = false
9
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: corvic-engine
3
- Version: 0.3.0rc95
3
+ Version: 0.3.0rc97
4
4
  Classifier: Environment :: Console
5
5
  Classifier: License :: Other/Proprietary License
6
6
  Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -10,16 +10,16 @@ Classifier: Programming Language :: Python :: 3.12
10
10
  Classifier: Programming Language :: Python :: 3.13
11
11
  Classifier: Programming Language :: Rust
12
12
  Classifier: Topic :: Scientific/Engineering
13
- Requires-Dist: cachetools>=5
13
+ Requires-Dist: cachetools>=6
14
14
  Requires-Dist: duckdb>=1.0.0
15
15
  Requires-Dist: more-itertools>=10
16
16
  Requires-Dist: numpy>=1.26
17
17
  Requires-Dist: polars>=1.7.1
18
18
  Requires-Dist: protobuf>=4.25
19
19
  Requires-Dist: protovalidate>=0.3
20
- Requires-Dist: pyarrow>=17
20
+ Requires-Dist: pyarrow>=20
21
21
  Requires-Dist: sqlalchemy>=2
22
- Requires-Dist: sqlglot>=25.6.0,<26
22
+ Requires-Dist: sqlglot>=26,<27
23
23
  Requires-Dist: structlog>=24
24
24
  Requires-Dist: tqdm
25
25
  Requires-Dist: umap-learn>=0.5.5 ; extra == 'ml'
@@ -18,7 +18,7 @@ authors = [
18
18
  ]
19
19
  readme = "README.md"
20
20
  description = "Seamless embedding generation and retrieval."
21
- version = "0.3.0-rc.95" # sync this with tool.poetry.version below
21
+ version = "0.3.0-rc.97" # sync this with tool.poetry.version below
22
22
 
23
23
  # TODO(ddn): Pull dependencies from tool.poetry.dependencies. We use maturin as
24
24
  # the build system but poetry for the development environment.
@@ -29,16 +29,16 @@ version = "0.3.0-rc.95" # sync this with tool.poetry.version below
29
29
  # don't overimpose on users: either ">= x" or ">= 0.x" for semvar packages or
30
30
  # minor versions for notable semvar exceptions: protobuf, numpy
31
31
  dependencies = [
32
- "cachetools >= 5",
32
+ "cachetools >= 6",
33
33
  "duckdb >= 1.0.0",
34
34
  "more-itertools >= 10",
35
35
  "numpy >= 1.26",
36
36
  "polars >= 1.7.1",
37
37
  "protobuf >= 4.25",
38
38
  "protovalidate >= 0.3",
39
- "pyarrow >= 17",
39
+ "pyarrow >= 20",
40
40
  "sqlalchemy >= 2",
41
- "sqlglot >= 25.6.0, < 26",
41
+ "sqlglot >= 26, < 27",
42
42
  "structlog >= 24",
43
43
  "tqdm",
44
44
  ]
@@ -73,7 +73,7 @@ packages = [
73
73
  ]
74
74
  description = ""
75
75
  authors = []
76
- version = "0.3.0-rc.95"
76
+ version = "0.3.0-rc.97"
77
77
 
78
78
  [tool.poetry.scripts]
79
79
  check = "corvic_check.cli:main"
@@ -90,22 +90,24 @@ name = "pypi"
90
90
  priority = "primary"
91
91
 
92
92
  [tool.poetry.dependencies]
93
- cachetools = "^5.3.0"
93
+ cachetools = "^6.1.0"
94
94
  duckdb = "1.1.3"
95
95
  more-itertools = "^10.2.0"
96
+ # Numpy 2.0 is blocked by gensim
97
+ # https://github.com/piskvorky/gensim/issues/3560
96
98
  numpy = "^1.26.3"
97
99
  polars = "^1.25.2"
98
100
  # buf (which we use to generate protobuf code) doesn't yet have a plugin
99
101
  # that supports patch versions greater than 8.
100
102
  protobuf = "=4.25.8"
101
103
  protovalidate = "^0.7.1"
102
- pyarrow = "^17"
104
+ pyarrow = "^20"
103
105
  # Should match build matrix for any native code dependencies (namely pyarrow)
104
106
  python = ">=3.11,<3.13"
105
- sqlalchemy = "2.0.36"
107
+ sqlalchemy = "2.0.41"
106
108
  # Rust tokenizer for better performances
107
- sqlglot = { extras = ["rs"], version = "^25.8.1" }
108
- structlog = "^24.1.0"
109
+ sqlglot = { extras = ["rs"], version = "^26.33.0" }
110
+ structlog = "^25.4.0"
109
111
  tqdm = "^4.66.3"
110
112
 
111
113
  [tool.poetry.group.dev.dependencies]
@@ -118,12 +120,12 @@ coverage = "^7.3.1"
118
120
  grpcio = "1.62.1"
119
121
  import-linter = "^2.0"
120
122
  maturin = "^1.4.0"
121
- pdoc = "^14.5.1"
123
+ pdoc = "^15"
122
124
  pre-commit = "^4.0.0"
123
125
  psycopg = { extras = ["binary"], version = "^3.2" }
124
- pyright = "1.1.400"
126
+ pyright = "1.1.403"
125
127
  pytest = "^8.1.1"
126
- pytest-benchmark = "^4.0.0"
128
+ pytest-benchmark = "^5"
127
129
  pytest-fail-slow = "^0.6.0"
128
130
  pytest-socket = "^0.7.0"
129
131
  pytest-timeout = "^2.2.0"
@@ -132,21 +134,19 @@ hypothesis = "^6.135"
132
134
  yq = "^3.4.3" # includes xq for parsing xml test results
133
135
 
134
136
  # Required to generate stubs for pyarrow, but not used by corvic itself
135
- pyarrow-stubs = "^17"
136
- fsspec = "^2024"
137
- pandas = "^2"
137
+ pyarrow-stubs = "^20.0.0.20250627"
138
138
 
139
139
  [tool.poetry.group.docs.dependencies]
140
- sphinx-autodoc-typehints = "^2.4"
140
+ sphinx-autodoc-typehints = "^3.2"
141
141
  sphinx-rtd-theme = "^3.0"
142
142
  sphinx = "^8.0.2"
143
- pydata-sphinx-theme = "^0.15.2"
143
+ pydata-sphinx-theme = "^0.16.1"
144
144
 
145
145
  [tool.poetry.group.check-license]
146
146
  optional = true
147
147
 
148
148
  [tool.poetry.group.check-license.dependencies]
149
- pip-licenses = "^4.3.3"
149
+ pip-licenses-cli = "^1.2.0"
150
150
 
151
151
  [tool.poetry.group.test.dependencies]
152
152
  fastnode2vec = "^0.0.7"
@@ -10,8 +10,8 @@ from collections.abc import Iterable, Mapping, Sequence
10
10
  from typing import Final, Literal, Self, TypeAlias, cast
11
11
 
12
12
  import pyarrow as pa
13
- import sqlalchemy as sa
14
13
  from sqlalchemy import orm as sa_orm
14
+ from sqlalchemy.orm.interfaces import LoaderOption
15
15
 
16
16
  from corvic import eorm, op_graph, system
17
17
  from corvic.emodel._base_model import StandardModel
@@ -149,7 +149,7 @@ class Space(StandardModel[SpaceID, models_pb2.Space, eorm.Space]):
149
149
  return space_delete_orms(ids, session)
150
150
 
151
151
  @classmethod
152
- def orm_load_options(cls) -> list[sa.LoaderOption]:
152
+ def orm_load_options(cls) -> list[LoaderOption]:
153
153
  return [
154
154
  sa_orm.selectinload(eorm.Space.feature_view)
155
155
  .selectinload(eorm.FeatureView.feature_view_sources)
@@ -2,6 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import cast
6
+
5
7
  import polars as pl
6
8
  import pyarrow as pa
7
9
 
@@ -70,6 +72,11 @@ def _upgrade_to_polars_dtype(dtype: pa.DataType) -> pa.DataType:
70
72
  # polars does not support float16 unless explicitly enabled
71
73
  return pa.float32()
72
74
  if isinstance(dtype, pa.ListType | pa.LargeListType | pa.FixedSizeListType):
75
+ dtype = cast(
76
+ "pa.ListType[pa.DataType] | pa.LargeListType[pa.DataType] \
77
+ | pa.FixedSizeListType[pa.DataType]",
78
+ dtype,
79
+ )
73
80
  # modify large lists as well since its value datatype
74
81
  # may need to be updated
75
82
  return pa.large_list(
@@ -695,6 +695,11 @@ def _validate_embedding_column(
695
695
  )
696
696
  dtype = embedding_field.dtype
697
697
  if isinstance(dtype, pa.ListType | pa.LargeListType | pa.FixedSizeListType):
698
+ dtype = cast(
699
+ "pa.ListType[pa.DataType] | pa.LargeListType[pa.DataType] \
700
+ | pa.FixedSizeListType[pa.DataType]",
701
+ dtype,
702
+ )
698
703
  inner_dtype = dtype.value_field.type
699
704
  if not (
700
705
  pa.types.is_floating(inner_dtype)
@@ -1615,14 +1620,21 @@ class _Base(OneofProtoWrapper[table_pb2.TableComputeOp], ABC):
1615
1620
  ) -> Ok[OutputCsv] | InvalidArgumentError:
1616
1621
  # Some execution engines don't support nested dtypes
1617
1622
  for field in self.schema:
1623
+ dtype = field.dtype
1618
1624
  if isinstance(
1619
- field.dtype,
1625
+ dtype,
1620
1626
  pa.StructType | pa.ListType | pa.LargeListType | pa.FixedSizeListType,
1621
1627
  ):
1628
+ dtype = cast(
1629
+ "pa.StructType | pa.ListType[pa.DataType] \
1630
+ | pa.LargeListType[pa.DataType] \
1631
+ | pa.FixedSizeListType[pa.DataType]",
1632
+ dtype,
1633
+ )
1622
1634
  return InvalidArgumentError(
1623
1635
  "nested fields are not supported",
1624
1636
  name=field.name,
1625
- dtype=str(field.dtype),
1637
+ dtype=str(dtype),
1626
1638
  )
1627
1639
  return Ok(
1628
1640
  from_proto(
@@ -1653,6 +1665,11 @@ class _Base(OneofProtoWrapper[table_pb2.TableComputeOp], ABC):
1653
1665
  return InvalidArgumentError(
1654
1666
  "given column must be a list", column_name=list_column_name
1655
1667
  )
1668
+ column_type = cast(
1669
+ "pa.ListType[pa.DataType] | pa.LargeListType[pa.DataType] \
1670
+ | pa.FixedSizeListType[pa.DataType]",
1671
+ column_type,
1672
+ )
1656
1673
  elem_type = _list_elem_type(column_type)
1657
1674
  if target_list_length < 1:
1658
1675
  return InvalidArgumentError(
@@ -3196,13 +3213,19 @@ def _make_schema_for_unnest_list(op: UnnestList):
3196
3213
  def gen_fields() -> Iterable[Field]:
3197
3214
  for field in schema:
3198
3215
  if field.name == op.list_column_name:
3199
- if not isinstance(field.dtype, pa.LargeListType):
3216
+ dtype = field.dtype
3217
+ if not isinstance(dtype, pa.LargeListType):
3200
3218
  raise InvalidArgumentError(
3201
3219
  "unnest cannot be done on a non-list column"
3202
3220
  )
3203
3221
 
3222
+ dtype = cast(
3223
+ "pa.LargeListType[pa.DataType]",
3224
+ dtype,
3225
+ )
3226
+
3204
3227
  yield from (
3205
- Field(column_name, dtype=field.dtype.value_type, ftype=field.ftype)
3228
+ Field(column_name, dtype=dtype.value_type, ftype=field.ftype)
3206
3229
  for column_name in op.column_names
3207
3230
  )
3208
3231
  else:
@@ -7,6 +7,9 @@ from typing import Any, LiteralString
7
7
  import sqlalchemy as sa
8
8
  from sqlalchemy import event, exc
9
9
  from sqlalchemy import orm as sa_orm
10
+ from sqlalchemy.exc import (
11
+ DBAPIError,
12
+ )
10
13
  from sqlalchemy.ext import hybrid
11
14
  from sqlalchemy.ext.hybrid import hybrid_property
12
15
 
@@ -161,7 +164,7 @@ class Session(sa_orm.Session):
161
164
  traceback: TracebackType | None,
162
165
  ):
163
166
  super().__exit__(type_, value, traceback)
164
- if isinstance(value, sa.exc.DBAPIError):
167
+ if isinstance(value, DBAPIError):
165
168
  raise dbapi_error_to_result(value) from value
166
169
 
167
170
  def _track_soft_deleted(self, instance: object):
@@ -1,6 +1,14 @@
1
1
  """Errors specific to communicating with the database."""
2
2
 
3
- import sqlalchemy as sa
3
+ from sqlalchemy.exc import (
4
+ DBAPIError,
5
+ IntegrityError,
6
+ InterfaceError,
7
+ InternalError,
8
+ NotSupportedError,
9
+ OperationalError,
10
+ ProgrammingError,
11
+ )
4
12
 
5
13
  from corvic import result
6
14
 
@@ -20,24 +28,20 @@ class DeletedObjectError(result.Error):
20
28
  """
21
29
 
22
30
 
23
- def dbapi_error_to_result(err: sa.exc.DBAPIError):
31
+ def dbapi_error_to_result(err: DBAPIError):
24
32
  # based on https://docs.sqlalchemy.org/en/20/errors.html
25
33
  match err:
26
- case sa.exc.NotSupportedError():
34
+ case NotSupportedError():
27
35
  # raised in the unexpected case that we're doing something that the
28
36
  # database just doesn't support
29
37
  raise result.InternalError.from_(err) from err
30
- case (
31
- sa.exc.OperationalError()
32
- | sa.exc.InterfaceError()
33
- | sa.exc.InternalError()
34
- ):
38
+ case OperationalError() | InterfaceError() | InternalError():
35
39
  # These are commonly things that are outside of our control that might
36
40
  # succeed on retry, e.g., connections being dropped
37
41
  return result.UnavailableError.from_(err)
38
- case sa.exc.IntegrityError():
42
+ case IntegrityError():
39
43
  return result.InvalidArgumentError.from_(err)
40
- case sa.exc.ProgrammingError():
44
+ case ProgrammingError():
41
45
  if "could not serialize" in str(err):
42
46
  return result.UnavailableError.from_(err)
43
47
  case _:
@@ -3,7 +3,7 @@ import decimal
3
3
  from abc import abstractmethod
4
4
  from collections.abc import Callable
5
5
  from datetime import date
6
- from typing import Final, Literal, TypeAlias, cast, overload
6
+ from typing import Any, Final, Literal, TypeAlias, cast, overload
7
7
 
8
8
  import pyarrow as pa
9
9
  from google.protobuf import struct_pb2
@@ -584,7 +584,7 @@ def _visit_large_list(
584
584
  def _visit_dictionary(
585
585
  value: struct_pb2.Value, dtype: pa.DataType, error_handler: _ErrorHandler
586
586
  ) -> object:
587
- dtype = cast(pa.DictionaryType, dtype)
587
+ dtype = cast("pa.DictionaryType[Any, Any, Any]", dtype)
588
588
  return _visit(value, dtype.value_type, error_handler)
589
589
 
590
590
 
@@ -782,4 +782,4 @@ def from_value(
782
782
  except (pa.ArrowTypeError, pa.ArrowInvalid, OverflowError) as exc:
783
783
  if errors == "strict":
784
784
  return InvalidArgumentError(_extract_error_message(exc))
785
- return Ok(pa.NA)
785
+ return Ok(pa.NullScalar())
@@ -322,7 +322,7 @@ def _visit_dictionary(
322
322
  value: _PyValue,
323
323
  dtype: pa.DataType,
324
324
  ) -> struct_pb2.Value:
325
- dtype = cast(pa.DictionaryType, dtype)
325
+ dtype = cast("pa.DictionaryType[Any, Any, Any]", dtype)
326
326
  return _visit(value, dtype.value_type)
327
327
 
328
328
 
@@ -11,6 +11,7 @@ from typing import Protocol
11
11
 
12
12
  import duckdb
13
13
  import sqlalchemy as sa
14
+ from sqlalchemy import event
14
15
 
15
16
  import corvic.context
16
17
  import corvic.eorm
@@ -40,7 +41,7 @@ def _context_requester_org_is_superuser() -> Iterator[None]:
40
41
  yield
41
42
 
42
43
 
43
- @sa.event.listens_for(sa.Engine, "connect")
44
+ @event.listens_for(sa.Engine, "connect")
44
45
  def set_sqlite_pragma(dbapi_connection: sqlite3.Connection | None, _) -> None:
45
46
  """Tell sqlite to respect foreign key constraints.
46
47
 
@@ -3,7 +3,7 @@
3
3
  import functools
4
4
  import uuid
5
5
  from collections.abc import Callable, Iterable, Mapping
6
- from typing import Final
6
+ from typing import Final, cast
7
7
 
8
8
  import duckdb
9
9
  import pyarrow as pa
@@ -47,7 +47,9 @@ def _patch_schema_for_storage(
47
47
  patched_schema.append(_patch_list_field(field, old_field))
48
48
  else:
49
49
  patched_schema.append(field)
50
- return pa.schema(patched_schema, new_schema.metadata)
50
+ schema_metadata = new_schema.metadata
51
+ # dict[bytes, bytes] should be valid for a dict[bytes | str, bytes | str]
52
+ return pa.schema(patched_schema, schema_metadata) # pyright: ignore[reportArgumentType]
51
53
 
52
54
 
53
55
  def _wrap_list_type(
@@ -79,6 +81,17 @@ def _patch_list_field(
79
81
  )
80
82
  ):
81
83
  return new_field
84
+ new_field_type = cast(
85
+ "pa.ListType[pa.DataType] | pa.LargeListType[pa.DataType] \
86
+ | pa.FixedSizeListType[pa.DataType]",
87
+ new_field_type,
88
+ )
89
+ old_field_type = cast(
90
+ "pa.ListType[pa.DataType] | pa.LargeListType[pa.DataType] \
91
+ | pa.FixedSizeListType[pa.DataType]",
92
+ old_field_type,
93
+ )
94
+
82
95
  new_list_field = new_field_type.value_field
83
96
  old_list_type = old_field_type.value_field.type
84
97
 
@@ -449,7 +462,7 @@ class DuckDBStaging(StagingDB):
449
462
  for field in storage_schema:
450
463
  if pa.types.is_null(field.type):
451
464
  batch = batch.drop_columns(field.name)
452
- column = pa.nulls(size=len(batch)) # pyright: ignore[reportUnknownMemberType]
465
+ column = pa.nulls(size=len(batch))
453
466
  batch = batch.append_column(
454
467
  field.with_type(pa.null()),
455
468
  column,
@@ -10,6 +10,11 @@ import sqlalchemy as sa
10
10
  import sqlalchemy.orm as sa_orm
11
11
  import structlog
12
12
  from google.protobuf import timestamp_pb2
13
+ from sqlalchemy.exc import (
14
+ DBAPIError,
15
+ IntegrityError,
16
+ )
17
+ from sqlalchemy.ext.hybrid import hybrid_property
13
18
 
14
19
  from corvic import orm, system
15
20
  from corvic.result import InvalidArgumentError, NotFoundError, Ok, UnavailableError
@@ -23,12 +28,14 @@ _logger = structlog.get_logger()
23
28
 
24
29
 
25
30
  class OrmModel(Protocol):
26
- @sa.ext.hybrid.hybrid_property
31
+ @hybrid_property
27
32
  def created_at(self) -> datetime.datetime | None: ...
28
33
 
29
34
  @created_at.inplace.expression
30
35
  @classmethod
31
- def _created_at_expression(cls): ...
36
+ def _created_at_expression(
37
+ cls,
38
+ ) -> ...: ...
32
39
 
33
40
 
34
41
  class OrmHasIdModel(OrmModel, Protocol[OrmIdT]):
@@ -174,7 +181,7 @@ class OrmBackedProto(Generic[ProtoT, OrmT], HasProtoSelf[ProtoT]):
174
181
  self.proto_self, session
175
182
  ).unwrap_or_raise()
176
183
  session.commit()
177
- except sa.exc.DBAPIError as err:
184
+ except DBAPIError as err:
178
185
  return orm.dbapi_error_to_result(err)
179
186
  return Ok(
180
187
  self.__class__(
@@ -196,7 +203,7 @@ class OrmBackedProto(Generic[ProtoT, OrmT], HasProtoSelf[ProtoT]):
196
203
  _ = self.proto_to_orm(self.proto_self, session).unwrap_or_raise()
197
204
  session.flush()
198
205
  # TODO(thunt): Possibly separate out DatabaseError into a precondition error
199
- except sa.exc.DBAPIError as err:
206
+ except DBAPIError as err:
200
207
  return orm.dbapi_error_to_result(err)
201
208
  return Ok(None)
202
209
 
@@ -246,7 +253,7 @@ class HasIdOrmBackedProto(
246
253
  case Ok(None):
247
254
  pass
248
255
  session.commit()
249
- except sa.exc.IntegrityError as exc:
256
+ except IntegrityError as exc:
250
257
  return InvalidArgumentError.from_(exc)
251
258
 
252
259
  new_proto_self = copy.copy(self.proto_self)