featurebyte 0.2.2__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.
- {featurebyte-0.2.2 → featurebyte-0.3.1}/PKG-INFO +19 -27
- {featurebyte-0.2.2 → featurebyte-0.3.1}/README.md +15 -18
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/__init__.py +7 -92
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/api_object.py +20 -120
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/api_object_util.py +1 -12
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/asat_aggregator.py +0 -3
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/base_table.py +176 -6
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/batch_feature_table.py +66 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/batch_request_table.py +66 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/catalog.py +28 -49
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/catalog_get_by_id_mixin.py +5 -5
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/change_view.py +46 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/credential.py +11 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/data_source.py +2 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/deployment.py +97 -5
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/dimension_table.py +45 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/entity.py +24 -4
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/event_table.py +67 -15
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/event_view.py +18 -11
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature.py +181 -83
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_group.py +19 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_job.py +5 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_job_setting_analysis.py +44 -4
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_list.py +369 -152
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_store.py +35 -11
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/groupby.py +98 -14
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/historical_feature_table.py +66 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/item_table.py +54 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/lag.py +10 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/materialized_table.py +6 -6
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/observation_table.py +66 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/periodic_task.py +1 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/relationship.py +51 -6
- featurebyte-0.3.1/featurebyte/api/savable_api_object.py +141 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/scd_table.py +47 -6
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/source_table.py +106 -28
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/table.py +1 -3
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/view.py +188 -34
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/allowed_classes.py +2 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/documentation_layout.py +34 -3
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/extract_csv.py +15 -4
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/gen_ref_pages_docs_builder.py +36 -14
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/resource_extractor.py +33 -5
- featurebyte-0.3.1/featurebyte/common/formatting_util.py +196 -0
- featurebyte-0.3.1/featurebyte/common/progress.py +38 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/utils.py +0 -20
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/validator.py +13 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/config.py +28 -4
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/accessor/count_dict.py +8 -8
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/accessor/datetime.py +15 -10
- featurebyte-0.3.1/featurebyte/core/accessor/feature_datetime.py +331 -0
- featurebyte-0.3.1/featurebyte/core/accessor/feature_string.py +288 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/accessor/string.py +12 -13
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/series.py +20 -20
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/timedelta.py +7 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/docker/featurebyte.yml +4 -3
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/docker/manager.py +69 -54
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/enum.py +15 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/exception.py +30 -0
- featurebyte-0.3.1/featurebyte/feature_utility.py +103 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/logging.py +20 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/middleware.py +21 -69
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/service/data_warehouse.py +13 -13
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/credential.py +81 -3
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/feature.py +72 -96
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/feature_list.py +71 -73
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/relationship.py +1 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/persistent/mongo.py +2 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/graph.py +89 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/feature_job_setting.py +43 -14
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/graph.py +7 -4
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/table.py +2 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/base.py +137 -34
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/cleaning_operation.py +68 -6
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/count_dict.py +12 -10
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/date.py +28 -22
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/generic.py +178 -89
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/input.py +6 -5
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/sdk_code.py +130 -19
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/nested.py +37 -34
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/request.py +6 -5
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/schema.py +33 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/adapter.py +20 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/asat.py +38 -21
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/tile.py +36 -29
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/feature_compute.py +53 -45
- featurebyte-0.3.1/featurebyte/query_graph/sql/feature_historical.py +794 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/specs.py +26 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/tile_compute.py +2 -54
- featurebyte-0.3.1/featurebyte/query_graph/transform/sdk_code.py +298 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/base.py +1 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature/api.py +12 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature/controller.py +36 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list/api.py +0 -20
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list/controller.py +4 -52
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list_namespace/api.py +7 -7
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list_namespace/controller.py +63 -3
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_namespace/controller.py +1 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/registry.py +2 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/relationship_info/api.py +9 -9
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/relationship_info/controller.py +4 -4
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/credential.py +1 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature.py +82 -4
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_job_setting_analysis.py +49 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_list.py +15 -2
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_list_namespace.py +9 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/info.py +28 -13
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/relationship_info.py +2 -2
- featurebyte-0.3.1/featurebyte/schema/worker/task/batch_feature_create.py +19 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/deploy.py +64 -32
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature.py +95 -42
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_list.py +65 -15
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_store_warehouse.py +115 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/info.py +38 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/preview.py +6 -11
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/relationship_info.py +3 -3
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/task_manager.py +14 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/version.py +4 -4
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/base.py +8 -1
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/base_spark.py +39 -3
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/databricks.py +56 -11
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/simple_storage.py +93 -13
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/snowflake.py +3 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/featurebyte-hive-udf-1.0.3-SNAPSHOT-all.jar +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_common.py +5 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_generate.py +3 -11
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_generate_entity_tracking.py +8 -7
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_generate_schedule.py +6 -11
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_monitor.py +9 -13
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/manager.py +12 -11
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/tile_cache.py +132 -68
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/persistent.py +1 -5
- featurebyte-0.3.1/featurebyte/worker/task/batch_feature_create.py +123 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/mixin.py +1 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task_executor.py +41 -10
- {featurebyte-0.2.2 → featurebyte-0.3.1}/pyproject.toml +5 -5
- featurebyte-0.2.2/featurebyte/query_graph/sql/feature_historical.py +0 -448
- featurebyte-0.2.2/featurebyte/query_graph/transform/sdk_code.py +0 -144
- featurebyte-0.2.2/setup.py +0 -148
- {featurebyte-0.2.2 → featurebyte-0.3.1}/LICENSE +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/__main__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/base_aggregator.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/catalog_decorator.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/dimension_view.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_namespace.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_validation_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/item_view.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/request_column.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/scd_view.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/simple_aggregator.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/templates/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/templates/online_serving/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/templates/online_serving/python.tpl +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/templates/online_serving/shell.tpl +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/window_aggregator.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/window_validator.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/app.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/date_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/descriptor.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/dict_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/doc_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/autodoc_processor.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/constants.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/custom_nav.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/doc_types.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/formatters.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/markdown_extension/extension.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/pydantic_field_docs.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/resource_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/env_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/join_utils.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/model_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/path_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/singleton.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/tile_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/typing.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/conftest.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/accessor/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/frame.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/generic.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/mixin.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/__main__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/app.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/creditcard.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/doctest_grocery.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/grocery.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/healthcare.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/docker/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/feature_manager/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/feature_manager/manager.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/feature_manager/model.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/feature_manager/sql_template.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/migration_data_service.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/model.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/run.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/service/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/service/mixin.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/batch_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/batch_request_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/catalog.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/context.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/deployment.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/dimension_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/entity.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/entity_validation.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/event_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/feature_job_setting_analysis.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/feature_store.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/historical_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/item_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/materialized_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/observation_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/online_store.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/parent_serving.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/periodic_task.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/persistent.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/proxy_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/relationship_analysis.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/request_input.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/scd_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/semantic.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/task.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/tile.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/persistent/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/persistent/audit.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/persistent/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/algorithm.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/enum.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/graph_node/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/graph_node/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/column_info.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/common_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/critical_data_info.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/agg_func.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/binary.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/column.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/operation.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/templates/sdk_code.tpl +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/mixin.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/scalar.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/string.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/unary.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/validator.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/pruning_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/item.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/latest.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/lookup.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/request_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/window.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/aggregate.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/binary.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/count_dict.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/datetime.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/generic.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/groupby.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/input.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/is_in.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/join.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/join_feature.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/literal.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/request.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/string.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/track_changes.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/unary.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/builder.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/common.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/dataframe.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/expression.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/feature_preview.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/groupby_helper.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/interpreter/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/interpreter/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/interpreter/preview.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/interpreter/tile.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/materialisation.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/online_serving.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/online_serving_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/parent_serving.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/scd_helper.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/template.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/tile_util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/tiling.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/flattening.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/operation_structure.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/pruning.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/reconstruction.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/app_container.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/app_container_config.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_feature_table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_feature_table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_feature_table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_request_table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_request_table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_request_table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/catalog/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/catalog/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/catalog/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/base_materialized_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/base_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/schema.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/util.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/context/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/context/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/context/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/credential/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/credential/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/credential/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/deployment/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/deployment/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/deployment/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/dimension_table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/dimension_table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/dimension_table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/entity/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/entity/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/entity/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/event_table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/event_table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/event_table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_job_setting_analysis/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_job_setting_analysis/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_job_setting_analysis/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list_namespace/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_namespace/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_namespace/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_store/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_store/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_store/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/historical_feature_table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/historical_feature_table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/historical_feature_table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/item_table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/item_table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/item_table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/observation_table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/observation_table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/observation_table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/periodic_tasks/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/periodic_tasks/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/periodic_tasks/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/relationship_info/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/scd_table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/scd_table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/scd_table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/semantic/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/semantic/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/semantic/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/table/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/table/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/table/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/task/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/task/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/task/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/temp_data/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/temp_data/api.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/temp_data/controller.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/batch_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/batch_request_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/catalog.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/common/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/common/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/common/operation.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/context.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/deployment.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/dimension_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/entity.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/event_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_namespace.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_store.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/historical_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/item_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/materialized_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/observation_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/periodic_task.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/request_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/scd_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/semantic.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/task.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/progress.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/batch_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/batch_request_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/deployment_create_update.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/feature_job_setting_analysis.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/historical_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/materialized_table_delete.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/observation_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/test.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/tile.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/base_document.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/base_service.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/base_table_document.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/batch_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/batch_request_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/catalog.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/context.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/credential.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/default_version_mode.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/deployment.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/dimension_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/entity.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/entity_validation.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/event_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_job_setting_analysis.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_list_namespace.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_list_status.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_namespace.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_readiness.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_store.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/historical_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/item_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/materialized_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/mixin.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/observation_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/online_enable.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/online_serving.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/parent_serving.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/periodic_task.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/relationship.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/scd_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/semantic.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/session_manager.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/session_validator.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/table_columns_info.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/table_status.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/user_service.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/validator/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/validator/materialized_table_delete.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/validator/production_ready_validator.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/view_construction.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/working_schema.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/enum.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/hive.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/manager.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/spark.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/sqlite.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/common.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/databricks/.gitignore +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_COSINE_SIMILARITY.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_ENTROPY.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_MOST_FREQUENT.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_MOST_FREQUENT_KEY_VALUE.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_MOST_FREQUENT_VALUE.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_NUM_UNIQUE.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_GET_RANK.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_GET_RELATIVE_FREQUENCY.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_INDEX_TO_TIMESTAMP.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_TIMESTAMP_TO_INDEX.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_TIMEZONE_OFFSET_TO_SECOND.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_ONLINE_STORE_MAPPING.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_TILE_FEATURE_MAPPING.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_TILE_JOB_MONITOR.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_TILE_MONITOR_SUMMARY.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_TILE_REGISTRY.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/.gitignore +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_ONLINE_STORE_MAPPING.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_TILE_FEATURE_MAPPING.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_TILE_JOB_MONITOR.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_TILE_MONITOR_SUMMARY.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_TILE_REGISTRY.sql +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_registry.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_schedule_online_store.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/storage/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/storage/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/storage/local.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/storage/local_temp.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/scheduler.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/sql_template.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/credential.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/messaging.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/snowflake/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/snowflake/sql.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/storage.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/enum.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/process_store.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/progress.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/schedulers.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/start.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/__init__.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/base.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/batch_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/batch_request_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/deployment_create_update.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/feature_job_setting_analysis.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/historical_feature_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/materialized_table_delete.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/observation_table.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/test_task.py +0 -0
- {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/tile_task.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: featurebyte
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Python Library for FeatureOps
|
|
5
5
|
Home-page: https://featurebyte.com
|
|
6
6
|
License: Elastic License 2.0
|
|
@@ -16,11 +16,6 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.9
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
-
Classifier: Programming Language :: Python :: 3
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
24
19
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
20
|
Provides-Extra: server
|
|
26
21
|
Requires-Dist: PyYAML (>=6.0,<7.0)
|
|
@@ -40,7 +35,7 @@ Requires-Dist: fastapi (>=0.95.1,<0.96.0) ; extra == "server"
|
|
|
40
35
|
Requires-Dist: featurebyte-freeware (>=0.2.14,<0.3.0) ; extra == "server"
|
|
41
36
|
Requires-Dist: gevent (>=22.10.2,<23.0.0) ; extra == "server"
|
|
42
37
|
Requires-Dist: humanize (>=4.4.0,<5.0.0)
|
|
43
|
-
Requires-Dist: importlib_metadata
|
|
38
|
+
Requires-Dist: importlib_metadata ; python_version >= "3.8" and python_version < "4.0"
|
|
44
39
|
Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
|
|
45
40
|
Requires-Dist: lazy-object-proxy (>=1.7.1,<2.0.0)
|
|
46
41
|
Requires-Dist: motor (>=3.0.0,<4.0.0) ; extra == "server"
|
|
@@ -57,8 +52,8 @@ Requires-Dist: redis (>=5.0.0b1,<6.0.0) ; extra == "server"
|
|
|
57
52
|
Requires-Dist: requests (>=2.27.1,<3.0.0)
|
|
58
53
|
Requires-Dist: rich (>=13.3.4,<14.0.0)
|
|
59
54
|
Requires-Dist: sasl (>=0.3.1,<0.4.0) ; extra == "server"
|
|
60
|
-
Requires-Dist: smart-open (>=6.3.0,<7.0.0) ; extra == "server"
|
|
61
|
-
Requires-Dist: snowflake-connector-python (>=3.0.3,<4.0.0) ; extra == "server"
|
|
55
|
+
Requires-Dist: smart-open[azure,gcs] (>=6.3.0,<7.0.0) ; extra == "server"
|
|
56
|
+
Requires-Dist: snowflake-connector-python (>=3.0.3,<4.0.0,!=3.0.4) ; extra == "server"
|
|
62
57
|
Requires-Dist: sqlglot (>=10.1.3,<10.4)
|
|
63
58
|
Requires-Dist: thrift-sasl (>=0.4.3,<0.5.0) ; extra == "server"
|
|
64
59
|
Requires-Dist: typeguard (>=2.13.3,<3.0.0)
|
|
@@ -105,19 +100,16 @@ Feature Engineering and management doesn’t have to be complicated. Take charge
|
|
|
105
100
|
|
|
106
101
|
``` python
|
|
107
102
|
# Get view from catalog
|
|
108
|
-
|
|
109
|
-
#
|
|
110
|
-
|
|
111
|
-
"CustomerId"
|
|
112
|
-
).aggregate_over(
|
|
103
|
+
invoice_view = catalog.get_view("GROCERYINVOICE")
|
|
104
|
+
# Declare features of total spent by customer in the past 7 and 28 days
|
|
105
|
+
customer_purchases = invoice_view.groupby("GroceryCustomerGuid").aggregate_over(
|
|
113
106
|
"Amount",
|
|
114
|
-
method="
|
|
115
|
-
feature_names=["
|
|
107
|
+
method="sum",
|
|
108
|
+
feature_names=["CustomerTotalSpent_7d", "CustomerTotalSpent_28d"],
|
|
116
109
|
fill_value=0,
|
|
117
|
-
windows=[
|
|
110
|
+
windows=['7d', '28d']
|
|
118
111
|
)
|
|
119
|
-
|
|
120
|
-
features["AvgSpend5w"].save()
|
|
112
|
+
customer_purchases.save()
|
|
121
113
|
```
|
|
122
114
|
|
|
123
115
|
### Experiment
|
|
@@ -307,33 +299,33 @@ items_view = catalog.get_view("INVOICEITEMS")
|
|
|
307
299
|
product_view = catalog.get_view("GROCERYPRODUCT")
|
|
308
300
|
# Join product view to items view
|
|
309
301
|
items_view = items_view.join(product_view)
|
|
310
|
-
# Get Customer purchases across product group
|
|
311
|
-
|
|
302
|
+
# Get Customer purchases across product group in the past 4 weeks
|
|
303
|
+
customer_basket_28d = items_view.groupby(
|
|
312
304
|
by_keys = "GroceryCustomerGuid", category=”ProductGroup”
|
|
313
305
|
).aggregate_over(
|
|
314
306
|
"TotalCost",
|
|
315
307
|
method=fb.AggFunc.SUM,
|
|
316
|
-
feature_names=["
|
|
308
|
+
feature_names=["CustomerBasket_28d"],
|
|
317
309
|
windows=['28d']
|
|
318
310
|
)
|
|
319
311
|
# Get customer view and join it to items view
|
|
320
312
|
customer_view = catalog.get_view("GROCERYCUSTOMER")
|
|
321
313
|
items_view = items_view.join(customer_view)
|
|
322
314
|
# Get Purchases of Customers living in the same state
|
|
323
|
-
# across product group
|
|
324
|
-
|
|
315
|
+
# across product group in the past 4 weeks
|
|
316
|
+
state_basket_28d = items_view.groupby(
|
|
325
317
|
by_keys="State", category="ProductGroup"
|
|
326
318
|
).aggregate_over(
|
|
327
319
|
"TotalCost",
|
|
328
320
|
method=fb.AggFunc.SUM,
|
|
329
|
-
feature_names=["
|
|
321
|
+
feature_names=["StateBasket_28d"],
|
|
330
322
|
windows=['28d']
|
|
331
323
|
)
|
|
332
324
|
# Create a feature that measures the similarity of a customer purchases
|
|
333
325
|
# and purchases of customers living in the same state
|
|
334
326
|
customer_state_similarity_28d = \
|
|
335
|
-
|
|
336
|
-
|
|
327
|
+
customer_basket_28d["CustomerBasket_28d"].cd.cosine_similarity(
|
|
328
|
+
state_basket_28d["StateBasket_28d"]
|
|
337
329
|
)
|
|
338
330
|
# save the new feature
|
|
339
331
|
customer_state_similarity_28d.name = \
|
|
@@ -33,19 +33,16 @@ Feature Engineering and management doesn’t have to be complicated. Take charge
|
|
|
33
33
|
|
|
34
34
|
``` python
|
|
35
35
|
# Get view from catalog
|
|
36
|
-
|
|
37
|
-
#
|
|
38
|
-
|
|
39
|
-
"CustomerId"
|
|
40
|
-
).aggregate_over(
|
|
36
|
+
invoice_view = catalog.get_view("GROCERYINVOICE")
|
|
37
|
+
# Declare features of total spent by customer in the past 7 and 28 days
|
|
38
|
+
customer_purchases = invoice_view.groupby("GroceryCustomerGuid").aggregate_over(
|
|
41
39
|
"Amount",
|
|
42
|
-
method="
|
|
43
|
-
feature_names=["
|
|
40
|
+
method="sum",
|
|
41
|
+
feature_names=["CustomerTotalSpent_7d", "CustomerTotalSpent_28d"],
|
|
44
42
|
fill_value=0,
|
|
45
|
-
windows=[
|
|
43
|
+
windows=['7d', '28d']
|
|
46
44
|
)
|
|
47
|
-
|
|
48
|
-
features["AvgSpend5w"].save()
|
|
45
|
+
customer_purchases.save()
|
|
49
46
|
```
|
|
50
47
|
|
|
51
48
|
### Experiment
|
|
@@ -235,33 +232,33 @@ items_view = catalog.get_view("INVOICEITEMS")
|
|
|
235
232
|
product_view = catalog.get_view("GROCERYPRODUCT")
|
|
236
233
|
# Join product view to items view
|
|
237
234
|
items_view = items_view.join(product_view)
|
|
238
|
-
# Get Customer purchases across product group
|
|
239
|
-
|
|
235
|
+
# Get Customer purchases across product group in the past 4 weeks
|
|
236
|
+
customer_basket_28d = items_view.groupby(
|
|
240
237
|
by_keys = "GroceryCustomerGuid", category=”ProductGroup”
|
|
241
238
|
).aggregate_over(
|
|
242
239
|
"TotalCost",
|
|
243
240
|
method=fb.AggFunc.SUM,
|
|
244
|
-
feature_names=["
|
|
241
|
+
feature_names=["CustomerBasket_28d"],
|
|
245
242
|
windows=['28d']
|
|
246
243
|
)
|
|
247
244
|
# Get customer view and join it to items view
|
|
248
245
|
customer_view = catalog.get_view("GROCERYCUSTOMER")
|
|
249
246
|
items_view = items_view.join(customer_view)
|
|
250
247
|
# Get Purchases of Customers living in the same state
|
|
251
|
-
# across product group
|
|
252
|
-
|
|
248
|
+
# across product group in the past 4 weeks
|
|
249
|
+
state_basket_28d = items_view.groupby(
|
|
253
250
|
by_keys="State", category="ProductGroup"
|
|
254
251
|
).aggregate_over(
|
|
255
252
|
"TotalCost",
|
|
256
253
|
method=fb.AggFunc.SUM,
|
|
257
|
-
feature_names=["
|
|
254
|
+
feature_names=["StateBasket_28d"],
|
|
258
255
|
windows=['28d']
|
|
259
256
|
)
|
|
260
257
|
# Create a feature that measures the similarity of a customer purchases
|
|
261
258
|
# and purchases of customers living in the same state
|
|
262
259
|
customer_state_similarity_28d = \
|
|
263
|
-
|
|
264
|
-
|
|
260
|
+
customer_basket_28d["CustomerBasket_28d"].cd.cosine_similarity(
|
|
261
|
+
state_basket_28d["StateBasket_28d"]
|
|
265
262
|
)
|
|
266
263
|
# save the new feature
|
|
267
264
|
customer_state_similarity_28d.name = \
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"""Python Library for FeatureOps"""
|
|
2
2
|
from typing import Any, List, Optional
|
|
3
3
|
|
|
4
|
-
import inspect
|
|
5
4
|
import sys
|
|
6
5
|
from http import HTTPStatus
|
|
7
6
|
|
|
@@ -51,9 +50,12 @@ from featurebyte.exception import (
|
|
|
51
50
|
InvalidSettingsError,
|
|
52
51
|
RecordRetrievalException,
|
|
53
52
|
)
|
|
53
|
+
from featurebyte.feature_utility import list_unsaved_features
|
|
54
54
|
from featurebyte.logging import get_logger
|
|
55
55
|
from featurebyte.models.credential import (
|
|
56
56
|
AccessTokenCredential,
|
|
57
|
+
AzureBlobStorageCredential,
|
|
58
|
+
GCSStorageCredential,
|
|
57
59
|
S3StorageCredential,
|
|
58
60
|
UsernamePasswordCredential,
|
|
59
61
|
)
|
|
@@ -365,97 +367,6 @@ def list_deployments(
|
|
|
365
367
|
return output_df.drop(columns=["id"])
|
|
366
368
|
|
|
367
369
|
|
|
368
|
-
def list_unsaved_features() -> pd.DataFrame:
|
|
369
|
-
"""
|
|
370
|
-
List all unsaved features in the current session.
|
|
371
|
-
|
|
372
|
-
Returns
|
|
373
|
-
-------
|
|
374
|
-
pd.DataFrame
|
|
375
|
-
List of unsaved features
|
|
376
|
-
|
|
377
|
-
Examples
|
|
378
|
-
--------
|
|
379
|
-
>>> customer_gender = catalog.get_view("GROCERYCUSTOMER")["Gender"].as_feature(
|
|
380
|
-
... feature_name="Customer Gender"
|
|
381
|
-
... )
|
|
382
|
-
>>> fb.list_unsaved_features()[["variable_name", "name", "catalog", "active_catalog"]]
|
|
383
|
-
variable_name name catalog active_catalog
|
|
384
|
-
0 customer_gender Customer Gender grocery True
|
|
385
|
-
"""
|
|
386
|
-
processed_variables = set()
|
|
387
|
-
unsaved_features = []
|
|
388
|
-
client = Configurations().get_client()
|
|
389
|
-
|
|
390
|
-
def _is_saved(feature: Feature) -> bool:
|
|
391
|
-
"""
|
|
392
|
-
Check if a feature is saved.
|
|
393
|
-
|
|
394
|
-
Parameters
|
|
395
|
-
----------
|
|
396
|
-
feature: Feature
|
|
397
|
-
Feature to check
|
|
398
|
-
|
|
399
|
-
Returns
|
|
400
|
-
-------
|
|
401
|
-
bool
|
|
402
|
-
"""
|
|
403
|
-
response = client.get(
|
|
404
|
-
url=f"/feature/{feature.id}", headers={"active-catalog-id": str(feature.catalog_id)}
|
|
405
|
-
)
|
|
406
|
-
if response.status_code == HTTPStatus.OK:
|
|
407
|
-
return True
|
|
408
|
-
return False
|
|
409
|
-
|
|
410
|
-
# get list of frame info from the current call stack
|
|
411
|
-
call_stack = inspect.stack()
|
|
412
|
-
# skip the first frame, which is the current function, to get the caller's frame
|
|
413
|
-
caller_frame_info = call_stack[1]
|
|
414
|
-
# check caller's local variables first, then global variables for unsaved features
|
|
415
|
-
caller_variables = [caller_frame_info.frame.f_locals, caller_frame_info.frame.f_globals]
|
|
416
|
-
for variables in caller_variables:
|
|
417
|
-
for var_name, var_obj in variables.items():
|
|
418
|
-
# global variable may be overriden by local variable
|
|
419
|
-
if var_name in processed_variables:
|
|
420
|
-
continue
|
|
421
|
-
if isinstance(var_obj, Feature) and not _is_saved(var_obj):
|
|
422
|
-
unsaved_features.append(
|
|
423
|
-
{
|
|
424
|
-
"object_id": str(var_obj.id),
|
|
425
|
-
"variable_name": var_name,
|
|
426
|
-
"name": var_obj.name,
|
|
427
|
-
"catalog_id": var_obj.catalog_id,
|
|
428
|
-
}
|
|
429
|
-
)
|
|
430
|
-
elif isinstance(var_obj, BaseFeatureGroup):
|
|
431
|
-
for name, feature in var_obj.feature_objects.items():
|
|
432
|
-
if not _is_saved(feature):
|
|
433
|
-
unsaved_features.append(
|
|
434
|
-
{
|
|
435
|
-
"object_id": str(feature.id),
|
|
436
|
-
"variable_name": f'{var_name}["{name}"]',
|
|
437
|
-
"name": feature.name,
|
|
438
|
-
"catalog_id": feature.catalog_id,
|
|
439
|
-
}
|
|
440
|
-
)
|
|
441
|
-
processed_variables.add(var_name)
|
|
442
|
-
|
|
443
|
-
if unsaved_features:
|
|
444
|
-
catalogs = Catalog.list(include_id=True)
|
|
445
|
-
return (
|
|
446
|
-
pd.DataFrame(unsaved_features)
|
|
447
|
-
.merge(
|
|
448
|
-
catalogs.rename({"name": "catalog", "active": "active_catalog"}, axis=1),
|
|
449
|
-
left_on="catalog_id",
|
|
450
|
-
right_on="id",
|
|
451
|
-
how="left",
|
|
452
|
-
)[["object_id", "variable_name", "name", "catalog", "active_catalog"]]
|
|
453
|
-
.sort_values("object_id")
|
|
454
|
-
.reset_index(drop=True)
|
|
455
|
-
)
|
|
456
|
-
return pd.DataFrame(columns=["object_id", "variable_name", "name", "catalog", "active_catalog"])
|
|
457
|
-
|
|
458
|
-
|
|
459
370
|
__all__ = [
|
|
460
371
|
# API objects
|
|
461
372
|
"BatchFeatureTable",
|
|
@@ -491,8 +402,10 @@ __all__ = [
|
|
|
491
402
|
"Table",
|
|
492
403
|
"TableFeatureJobSetting",
|
|
493
404
|
# credentials
|
|
405
|
+
"AzureBlobStorageCredential",
|
|
494
406
|
"AccessTokenCredential",
|
|
495
407
|
"Credential",
|
|
408
|
+
"GCSStorageCredential",
|
|
496
409
|
"S3StorageCredential",
|
|
497
410
|
"UsernamePasswordCredential",
|
|
498
411
|
# enums
|
|
@@ -518,6 +431,8 @@ __all__ = [
|
|
|
518
431
|
"start",
|
|
519
432
|
"stop",
|
|
520
433
|
"playground",
|
|
434
|
+
# utility
|
|
435
|
+
"list_unsaved_features",
|
|
521
436
|
]
|
|
522
437
|
|
|
523
438
|
|
|
@@ -21,15 +21,14 @@ from pandas import DataFrame
|
|
|
21
21
|
from requests.models import Response
|
|
22
22
|
from typeguard import typechecked
|
|
23
23
|
|
|
24
|
-
from featurebyte.api.api_object_util import
|
|
24
|
+
from featurebyte.api.api_object_util import ProgressThread
|
|
25
25
|
from featurebyte.common.env_util import get_alive_bar_additional_params
|
|
26
|
+
from featurebyte.common.formatting_util import InfoDict
|
|
26
27
|
from featurebyte.common.utils import construct_repr_string
|
|
27
28
|
from featurebyte.config import Configurations
|
|
28
29
|
from featurebyte.exception import (
|
|
29
30
|
DuplicatedRecordException,
|
|
30
|
-
ObjectHasBeenSavedError,
|
|
31
31
|
RecordCreationException,
|
|
32
|
-
RecordDeletionException,
|
|
33
32
|
RecordRetrievalException,
|
|
34
33
|
RecordUpdateException,
|
|
35
34
|
)
|
|
@@ -114,13 +113,26 @@ class ApiObject(FeatureByteBaseDocumentModel):
|
|
|
114
113
|
# global api object cache shared by all the ApiObject class & its child classes
|
|
115
114
|
_cache: Any = TTLCache(maxsize=1024, ttl=1)
|
|
116
115
|
|
|
116
|
+
def _repr_html_(self) -> str:
|
|
117
|
+
"""
|
|
118
|
+
HTML representation of the object
|
|
119
|
+
|
|
120
|
+
Returns
|
|
121
|
+
-------
|
|
122
|
+
str
|
|
123
|
+
"""
|
|
124
|
+
try:
|
|
125
|
+
return InfoDict(self.info()).to_html()
|
|
126
|
+
except (RecordCreationException, RecordRetrievalException):
|
|
127
|
+
# object has not been saved yet
|
|
128
|
+
return repr(self)
|
|
129
|
+
|
|
117
130
|
def __repr__(self) -> str:
|
|
118
|
-
info_repr = ""
|
|
119
131
|
try:
|
|
120
132
|
info_repr = repr(self.info())
|
|
121
133
|
except (RecordCreationException, RecordRetrievalException):
|
|
122
134
|
# object has not been saved yet
|
|
123
|
-
|
|
135
|
+
info_repr = super().__repr__()
|
|
124
136
|
|
|
125
137
|
return construct_repr_string(self, info_repr)
|
|
126
138
|
|
|
@@ -720,7 +732,9 @@ class ApiObject(FeatureByteBaseDocumentModel):
|
|
|
720
732
|
client = Configurations().get_client()
|
|
721
733
|
response = client.get(url=f"{self._route}/{self.id}/info", params={"verbose": verbose})
|
|
722
734
|
if response.status_code == HTTPStatus.OK:
|
|
723
|
-
|
|
735
|
+
info = response.json()
|
|
736
|
+
info["class_name"] = self.__class__.__name__
|
|
737
|
+
return InfoDict(info)
|
|
724
738
|
raise RecordRetrievalException(response, "Failed to retrieve object info.")
|
|
725
739
|
|
|
726
740
|
@classmethod
|
|
@@ -869,117 +883,3 @@ class ApiObject(FeatureByteBaseDocumentModel):
|
|
|
869
883
|
self._poll_async_task(task_response=update_response, delay=delay, retrieve_result=False)
|
|
870
884
|
# call get to update the object cache as retrieve result is False
|
|
871
885
|
self.get_by_id(self.id)
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
class SavableApiObject(ApiObject):
|
|
875
|
-
"""
|
|
876
|
-
ApiObject contains common methods used to interact with API routes
|
|
877
|
-
"""
|
|
878
|
-
|
|
879
|
-
def _get_create_payload(self) -> dict[str, Any]:
|
|
880
|
-
"""
|
|
881
|
-
Construct payload used for post route
|
|
882
|
-
|
|
883
|
-
Returns
|
|
884
|
-
-------
|
|
885
|
-
dict[str, Any]
|
|
886
|
-
"""
|
|
887
|
-
return self.json_dict(exclude_none=True)
|
|
888
|
-
|
|
889
|
-
def _pre_save_operations(self, conflict_resolution: ConflictResolution) -> None:
|
|
890
|
-
"""
|
|
891
|
-
Operations to be executed before saving the api object
|
|
892
|
-
|
|
893
|
-
Parameters
|
|
894
|
-
----------
|
|
895
|
-
conflict_resolution: ConflictResolution
|
|
896
|
-
"raise" raises error when then counters conflict error (default)
|
|
897
|
-
"retrieve" handle conflict error by retrieving object with the same name
|
|
898
|
-
"""
|
|
899
|
-
_ = conflict_resolution
|
|
900
|
-
|
|
901
|
-
@typechecked
|
|
902
|
-
def save(self, conflict_resolution: ConflictResolution = "raise") -> None:
|
|
903
|
-
"""
|
|
904
|
-
Save an object to the persistent data store.
|
|
905
|
-
|
|
906
|
-
A conflict could be triggered when the object being saved has violated a uniqueness check at the persistent
|
|
907
|
-
data store. For example, the same object ID could have been used by another record that is already stored.
|
|
908
|
-
|
|
909
|
-
In these scenarios, we can either raise an error or retrieve the object with the same name, depending on the
|
|
910
|
-
conflict resolution parameter passed in. The default behavior is to raise an error.
|
|
911
|
-
|
|
912
|
-
Parameters
|
|
913
|
-
----------
|
|
914
|
-
conflict_resolution: ConflictResolution
|
|
915
|
-
"raise" will raise an error when we encounter a conflict error.
|
|
916
|
-
"retrieve" will handle the conflict error by retrieving the object with the same name.
|
|
917
|
-
|
|
918
|
-
Raises
|
|
919
|
-
------
|
|
920
|
-
ObjectHasBeenSavedError
|
|
921
|
-
If the object has been saved before.
|
|
922
|
-
DuplicatedRecordException
|
|
923
|
-
When a record with the same key exists at the persistent data store.
|
|
924
|
-
RecordCreationException
|
|
925
|
-
When we fail to save the new object (general failure).
|
|
926
|
-
|
|
927
|
-
Examples
|
|
928
|
-
--------
|
|
929
|
-
Note that the examples below are not exhaustive.
|
|
930
|
-
|
|
931
|
-
Save a new Entity object.
|
|
932
|
-
|
|
933
|
-
>>> entity = fb.Entity(name="grocerycustomer_example", serving_names=["GROCERYCUSTOMERGUID"]) # doctest: +SKIP
|
|
934
|
-
>>> entity.save() # doctest: +SKIP
|
|
935
|
-
None
|
|
936
|
-
|
|
937
|
-
Calling save again returns an error.
|
|
938
|
-
|
|
939
|
-
>>> entity = fb.Entity(name="grocerycustomer", serving_names=["GROCERYCUSTOMERGUID"]) # doctest: +SKIP
|
|
940
|
-
>>> entity.save() # doctest: +SKIP
|
|
941
|
-
>>> entity.save() # doctest: +SKIP
|
|
942
|
-
Entity (id: <entity.id>) has been saved before.
|
|
943
|
-
"""
|
|
944
|
-
if self.saved and conflict_resolution == "raise":
|
|
945
|
-
raise ObjectHasBeenSavedError(
|
|
946
|
-
f'{type(self).__name__} (id: "{self.id}") has been saved before.'
|
|
947
|
-
)
|
|
948
|
-
|
|
949
|
-
self._pre_save_operations(conflict_resolution=conflict_resolution)
|
|
950
|
-
client = Configurations().get_client()
|
|
951
|
-
response = client.post(url=self._route, json=self._get_create_payload())
|
|
952
|
-
retrieve_object = False
|
|
953
|
-
if response.status_code != HTTPStatus.CREATED:
|
|
954
|
-
if response.status_code == HTTPStatus.CONFLICT:
|
|
955
|
-
if conflict_resolution == "retrieve":
|
|
956
|
-
retrieve_object = True
|
|
957
|
-
else:
|
|
958
|
-
raise DuplicatedRecordException(response=response)
|
|
959
|
-
if not retrieve_object:
|
|
960
|
-
raise RecordCreationException(response=response)
|
|
961
|
-
|
|
962
|
-
if retrieve_object:
|
|
963
|
-
assert self.name is not None
|
|
964
|
-
object_dict = self._get_object_dict_by_name(name=self.name)
|
|
965
|
-
else:
|
|
966
|
-
object_dict = response.json()
|
|
967
|
-
|
|
968
|
-
self._update_cache(object_dict) # update api object cache store
|
|
969
|
-
type(self).__init__(
|
|
970
|
-
self,
|
|
971
|
-
**object_dict,
|
|
972
|
-
**self._get_init_params_from_object(),
|
|
973
|
-
)
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
class DeletableApiObject(ApiObject):
|
|
977
|
-
"""
|
|
978
|
-
DeleteMixin contains common methods used to delete an object
|
|
979
|
-
"""
|
|
980
|
-
|
|
981
|
-
def _delete(self) -> None:
|
|
982
|
-
client = Configurations().get_client()
|
|
983
|
-
response = client.delete(url=f"{self._route}/{self.id}")
|
|
984
|
-
if response.status_code != HTTPStatus.OK:
|
|
985
|
-
raise RecordDeletionException(response, "Failed to delete the specified object.")
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"""
|
|
2
2
|
API Object Util
|
|
3
3
|
"""
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
import ctypes
|
|
7
7
|
import threading
|
|
8
8
|
|
|
9
|
-
from rich.pretty import pretty_repr
|
|
10
|
-
|
|
11
9
|
from featurebyte.config import Configurations
|
|
12
10
|
from featurebyte.exception import RecordRetrievalException
|
|
13
11
|
from featurebyte.logging import get_logger
|
|
@@ -84,15 +82,6 @@ class ProgressThread(threading.Thread):
|
|
|
84
82
|
logger.warning("Exception raise failure")
|
|
85
83
|
|
|
86
84
|
|
|
87
|
-
class PrettyDict(Dict[str, Any]):
|
|
88
|
-
"""
|
|
89
|
-
Dict with prettified representation
|
|
90
|
-
"""
|
|
91
|
-
|
|
92
|
-
def __repr__(self) -> str:
|
|
93
|
-
return pretty_repr(dict(self), expand_all=True, indent_size=2)
|
|
94
|
-
|
|
95
|
-
|
|
96
85
|
class NameAttributeUpdatableMixin:
|
|
97
86
|
"""
|
|
98
87
|
This mixin is used to handle the case when name of the api object is updatable.
|
|
@@ -140,9 +140,6 @@ class AsAtAggregator(BaseAggregator):
|
|
|
140
140
|
if feature_name is None:
|
|
141
141
|
raise ValueError("feature_name is required")
|
|
142
142
|
|
|
143
|
-
if self.category is not None:
|
|
144
|
-
raise ValueError("category is not supported for aggregate_asat")
|
|
145
|
-
|
|
146
143
|
view = cast(SCDView, self.view)
|
|
147
144
|
for key in self.keys:
|
|
148
145
|
if key == view.natural_key_column:
|