corvic-engine 0.3.0rc96__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.
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/Cargo.lock +2 -2
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/Cargo.toml +1 -1
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/PKG-INFO +4 -4
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/pyproject.toml +19 -19
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_proto_orm_convert.py +1 -5
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_resource.py +0 -15
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_space.py +2 -2
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/eorm/__init__.py +0 -6
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/_schema.py +7 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/ops.py +27 -4
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/_soft_delete.py +4 -1
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/errors.py +14 -10
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_from_value.py +3 -3
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_to_value.py +1 -1
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/client.py +2 -1
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/staging.py +16 -3
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/transfer/_orm_backed_proto.py +12 -5
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/resource_pb2.py +52 -54
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/resource_pb2.pyi +2 -19
- corvic_engine-0.3.0rc97/python/corvic_generated/model/v1alpha/models_pb2.py +53 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/models_pb2.pyi +2 -4
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/data_connector_pb2.py +3 -7
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/data_connector_pb2.pyi +0 -21
- corvic_engine-0.3.0rc96/python/corvic_generated/model/v1alpha/models_pb2.py +0 -53
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/LICENSE +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/README.md +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/Cargo.toml +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/buf/validate/validate_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/buf/validate/validate_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/buf/validate/validate_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/buf/validate/validate_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/context/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/context/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/embed/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/embed/node2vec.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/embed/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/embedding_metric/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/embedding_metric/embeddings.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/embedding_metric/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_base_model.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_data_connector.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_defaults.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_errors.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_feature_type.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_feature_view.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_pipeline.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_room.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_source.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/engine/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/engine/_native.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/engine/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/_transformations.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/aggregation.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/encoders.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/errors.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/feature_types.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/row_filters/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/row_filters/_jsonlogic.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/row_filters/_row_filters.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/op_graph/sample_strategy.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/_proto_columns.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/func/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/func/utc_func.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/func/uuid_func.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/ids.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/keys.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/orm/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_const.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_temporal.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/_types.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/pa_scalar/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/proto_wrapper/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/proto_wrapper/_errors.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/proto_wrapper/_wrappers.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/proto_wrapper/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/result/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/result/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/sql/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/sql/parse_ops.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/sql/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/_column_encoding.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/_dimension_reduction.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/_embedder.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/_image_embedder.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/_planner.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/_text_embedder.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/client.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/in_memory_executor.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/op_graph_executor.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/staging.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system/storage.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/fs_blob_store.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/system_sqlite/rdbms_blob_store.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/table/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/table/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/table/table.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/transfer/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/transfer/_common_transformations.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/transfer/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/version/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/version/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/well_known_types/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/well_known_types/py.typed +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/graph_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/graph_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/models_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/models_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/models_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/embedding/v1/models_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/experiment_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/experiment_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/experiment_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/experiment_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/space_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/space_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/space_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v1/space_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/feature_view_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/feature_view_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/space_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/space_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/space_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/feature/v2/space_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/service_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/service_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/service_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v1/service_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/pipeline_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/pipeline_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/quick_mode_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/quick_mode_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/resource_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/resource_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/room_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/room_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/room_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/room_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/source_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/source_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/source_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/source_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/table_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/table_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/table_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/ingest/v2/table_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/models_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/model/v1alpha/models_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/common_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/common_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/common_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/common_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/data_connector_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/data_connector_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/feature_view_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/feature_view_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/pipeline_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/pipeline_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/space_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/space_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/space_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/space_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/table_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/table_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/table_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/orm/v1/table_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/__init__.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/event_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/event_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/event_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/event_pb2_grpc.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/service_pb2.py +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/service_pb2.pyi +0 -0
- {corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic_generated/status/v1/service_pb2_grpc.py +0 -0
- {corvic_engine-0.3.0rc96 → 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.
|
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.
|
60
|
+
version = "0.3.0-rc.97"
|
61
61
|
dependencies = [
|
62
62
|
"version_check",
|
63
63
|
]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: corvic-engine
|
3
|
-
Version: 0.3.
|
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>=
|
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>=
|
20
|
+
Requires-Dist: pyarrow>=20
|
21
21
|
Requires-Dist: sqlalchemy>=2
|
22
|
-
Requires-Dist: sqlglot>=
|
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.
|
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.96" # 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 >=
|
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 >=
|
39
|
+
"pyarrow >= 20",
|
40
40
|
"sqlalchemy >= 2",
|
41
|
-
"sqlglot >=
|
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.
|
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 = "^
|
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 = "^
|
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.
|
107
|
+
sqlalchemy = "2.0.41"
|
106
108
|
# Rust tokenizer for better performances
|
107
|
-
sqlglot = { extras = ["rs"], version = "^
|
108
|
-
structlog = "^
|
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 = "^
|
123
|
+
pdoc = "^15"
|
122
124
|
pre-commit = "^4.0.0"
|
123
125
|
psycopg = { extras = ["binary"], version = "^3.2" }
|
124
|
-
pyright = "1.1.
|
126
|
+
pyright = "1.1.403"
|
125
127
|
pytest = "^8.1.1"
|
126
|
-
pytest-benchmark = "^
|
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 = "^
|
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
|
140
|
+
sphinx-autodoc-typehints = "^3.2"
|
141
141
|
sphinx-rtd-theme = "^3.0"
|
142
142
|
sphinx = "^8.0.2"
|
143
|
-
pydata-sphinx-theme = "^0.
|
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 = "^
|
149
|
+
pip-licenses-cli = "^1.2.0"
|
150
150
|
|
151
151
|
[tool.poetry.group.test.dependencies]
|
152
152
|
fastnode2vec = "^0.0.7"
|
{corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/emodel/_proto_orm_convert.py
RENAMED
@@ -9,7 +9,7 @@ from google.protobuf import timestamp_pb2
|
|
9
9
|
from corvic import eorm, orm, transfer
|
10
10
|
from corvic.result import InternalError, InvalidArgumentError, Ok
|
11
11
|
from corvic_generated.model.v1alpha import models_pb2
|
12
|
-
from corvic_generated.orm.v1 import
|
12
|
+
from corvic_generated.orm.v1 import feature_view_pb2
|
13
13
|
|
14
14
|
|
15
15
|
class _ModelBelongsToOrgProto(transfer.ProtoModel, Protocol):
|
@@ -104,9 +104,6 @@ def resource_orm_to_proto(resource_orm: eorm.Resource) -> models_pb2.Resource:
|
|
104
104
|
md5=resource_orm.md5,
|
105
105
|
size=resource_orm.size,
|
106
106
|
etag=resource_orm.etag,
|
107
|
-
origin_type=resource_orm.origin_info.type
|
108
|
-
if resource_orm.origin_info
|
109
|
-
else data_connector_pb2.DATA_CONNECTION_TYPE_UNSPECIFIED,
|
110
107
|
original_modified_at_time=timestamp_orm_to_proto(
|
111
108
|
resource_orm.original_modified_at_time
|
112
109
|
),
|
@@ -331,7 +328,6 @@ def resource_proto_to_orm(
|
|
331
328
|
url=proto_obj.url,
|
332
329
|
size=proto_obj.size,
|
333
330
|
etag=proto_obj.etag,
|
334
|
-
origin_info=data_connector_pb2.DataConnectionInfo(type=proto_obj.origin_type),
|
335
331
|
original_modified_at_time=proto_obj.original_modified_at_time.ToDatetime(
|
336
332
|
datetime.UTC
|
337
333
|
),
|
@@ -24,7 +24,6 @@ from corvic.emodel._proto_orm_convert import (
|
|
24
24
|
)
|
25
25
|
from corvic.result import InternalError, InvalidArgumentError, NotFoundError, Ok
|
26
26
|
from corvic_generated.model.v1alpha import models_pb2
|
27
|
-
from corvic_generated.orm.v1 import data_connector_pb2
|
28
27
|
from corvic_generated.status.v1 import event_pb2
|
29
28
|
|
30
29
|
SourceID: TypeAlias = eorm.SourceID
|
@@ -102,10 +101,6 @@ class Resource(StandardModel[ResourceID, models_pb2.Resource, eorm.Resource]):
|
|
102
101
|
def etag(self) -> str:
|
103
102
|
return self.proto_self.etag
|
104
103
|
|
105
|
-
@property
|
106
|
-
def origin_type(self) -> data_connector_pb2.DataConnectionType:
|
107
|
-
return self.proto_self.origin_type
|
108
|
-
|
109
104
|
@property
|
110
105
|
def original_modified_at_time(self) -> datetime.datetime | None:
|
111
106
|
return self.proto_self.original_modified_at_time.ToDatetime(datetime.UTC)
|
@@ -141,16 +136,6 @@ class Resource(StandardModel[ResourceID, models_pb2.Resource, eorm.Resource]):
|
|
141
136
|
client=self.client,
|
142
137
|
)
|
143
138
|
|
144
|
-
def with_origin_type(
|
145
|
-
self, origin_type: data_connector_pb2.DataConnectionType
|
146
|
-
) -> Resource:
|
147
|
-
proto_self = copy.copy(self.proto_self)
|
148
|
-
proto_self.origin_type = origin_type
|
149
|
-
return Resource(
|
150
|
-
proto_self=proto_self,
|
151
|
-
client=self.client,
|
152
|
-
)
|
153
|
-
|
154
139
|
def with_original_modified_at_time(
|
155
140
|
self, original_modified_at_time: datetime.datetime
|
156
141
|
) -> Resource:
|
@@ -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[
|
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)
|
@@ -79,9 +79,6 @@ orm.Base.registry.update_type_annotation_map(
|
|
79
79
|
data_connector_pb2.DataConnectorParameters: orm.ProtoMessageDecorator(
|
80
80
|
data_connector_pb2.DataConnectorParameters()
|
81
81
|
),
|
82
|
-
data_connector_pb2.DataConnectionInfo: orm.ProtoMessageDecorator(
|
83
|
-
data_connector_pb2.DataConnectionInfo()
|
84
|
-
),
|
85
82
|
# ID types
|
86
83
|
RoomID: orm.IntIDDecorator(RoomID()),
|
87
84
|
ResourceID: orm.IntIDDecorator(ResourceID()),
|
@@ -186,9 +183,6 @@ class Resource(orm.BelongsToOrgMixin, BelongsToRoomMixin, orm.Base, kw_only=True
|
|
186
183
|
server_default=None,
|
187
184
|
default=None,
|
188
185
|
)
|
189
|
-
origin_info: sa_orm.Mapped[data_connector_pb2.DataConnectionInfo | None] = (
|
190
|
-
sa_orm.mapped_column(default=None, nullable=True)
|
191
|
-
)
|
192
186
|
id: sa_orm.Mapped[ResourceID | None] = orm.primary_key_identity_column()
|
193
187
|
latest_event: sa_orm.Mapped[event_pb2.Event | None] = sa_orm.mapped_column(
|
194
188
|
default=None, nullable=True
|
@@ -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
|
-
|
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(
|
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
|
-
|
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=
|
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,
|
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
|
-
|
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:
|
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
|
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
|
42
|
+
case IntegrityError():
|
39
43
|
return result.InvalidArgumentError.from_(err)
|
40
|
-
case
|
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.
|
785
|
+
return Ok(pa.NullScalar())
|
@@ -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
|
-
@
|
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
|
-
|
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))
|
465
|
+
column = pa.nulls(size=len(batch))
|
453
466
|
batch = batch.append_column(
|
454
467
|
field.with_type(pa.null()),
|
455
468
|
column,
|
{corvic_engine-0.3.0rc96 → corvic_engine-0.3.0rc97}/python/corvic/transfer/_orm_backed_proto.py
RENAMED
@@ -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
|
-
@
|
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(
|
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
|
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
|
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
|
256
|
+
except IntegrityError as exc:
|
250
257
|
return InvalidArgumentError.from_(exc)
|
251
258
|
|
252
259
|
new_proto_self = copy.copy(self.proto_self)
|