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.
Files changed (529) hide show
  1. {featurebyte-0.2.2 → featurebyte-0.3.1}/PKG-INFO +19 -27
  2. {featurebyte-0.2.2 → featurebyte-0.3.1}/README.md +15 -18
  3. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/__init__.py +7 -92
  4. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/api_object.py +20 -120
  5. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/api_object_util.py +1 -12
  6. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/asat_aggregator.py +0 -3
  7. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/base_table.py +176 -6
  8. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/batch_feature_table.py +66 -0
  9. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/batch_request_table.py +66 -0
  10. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/catalog.py +28 -49
  11. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/catalog_get_by_id_mixin.py +5 -5
  12. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/change_view.py +46 -1
  13. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/credential.py +11 -1
  14. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/data_source.py +2 -0
  15. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/deployment.py +97 -5
  16. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/dimension_table.py +45 -2
  17. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/entity.py +24 -4
  18. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/event_table.py +67 -15
  19. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/event_view.py +18 -11
  20. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature.py +181 -83
  21. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_group.py +19 -2
  22. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_job.py +5 -0
  23. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_job_setting_analysis.py +44 -4
  24. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_list.py +369 -152
  25. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_store.py +35 -11
  26. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/groupby.py +98 -14
  27. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/historical_feature_table.py +66 -0
  28. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/item_table.py +54 -2
  29. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/lag.py +10 -1
  30. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/materialized_table.py +6 -6
  31. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/observation_table.py +66 -0
  32. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/periodic_task.py +1 -1
  33. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/relationship.py +51 -6
  34. featurebyte-0.3.1/featurebyte/api/savable_api_object.py +141 -0
  35. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/scd_table.py +47 -6
  36. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/source_table.py +106 -28
  37. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/table.py +1 -3
  38. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/view.py +188 -34
  39. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/allowed_classes.py +2 -0
  40. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/documentation_layout.py +34 -3
  41. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/extract_csv.py +15 -4
  42. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/gen_ref_pages_docs_builder.py +36 -14
  43. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/resource_extractor.py +33 -5
  44. featurebyte-0.3.1/featurebyte/common/formatting_util.py +196 -0
  45. featurebyte-0.3.1/featurebyte/common/progress.py +38 -0
  46. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/utils.py +0 -20
  47. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/validator.py +13 -0
  48. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/config.py +28 -4
  49. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/accessor/count_dict.py +8 -8
  50. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/accessor/datetime.py +15 -10
  51. featurebyte-0.3.1/featurebyte/core/accessor/feature_datetime.py +331 -0
  52. featurebyte-0.3.1/featurebyte/core/accessor/feature_string.py +288 -0
  53. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/accessor/string.py +12 -13
  54. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/series.py +20 -20
  55. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/timedelta.py +7 -0
  56. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/docker/featurebyte.yml +4 -3
  57. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/docker/manager.py +69 -54
  58. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/enum.py +15 -0
  59. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/exception.py +30 -0
  60. featurebyte-0.3.1/featurebyte/feature_utility.py +103 -0
  61. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/logging.py +20 -2
  62. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/middleware.py +21 -69
  63. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/service/data_warehouse.py +13 -13
  64. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/credential.py +81 -3
  65. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/feature.py +72 -96
  66. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/feature_list.py +71 -73
  67. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/relationship.py +1 -1
  68. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/persistent/mongo.py +2 -2
  69. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/graph.py +89 -1
  70. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/feature_job_setting.py +43 -14
  71. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/graph.py +7 -4
  72. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/table.py +2 -2
  73. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/base.py +137 -34
  74. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/cleaning_operation.py +68 -6
  75. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/count_dict.py +12 -10
  76. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/date.py +28 -22
  77. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/generic.py +178 -89
  78. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/input.py +6 -5
  79. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/sdk_code.py +130 -19
  80. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/nested.py +37 -34
  81. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/request.py +6 -5
  82. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/schema.py +33 -0
  83. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/adapter.py +20 -0
  84. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/asat.py +38 -21
  85. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/tile.py +36 -29
  86. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/feature_compute.py +53 -45
  87. featurebyte-0.3.1/featurebyte/query_graph/sql/feature_historical.py +794 -0
  88. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/specs.py +26 -2
  89. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/tile_compute.py +2 -54
  90. featurebyte-0.3.1/featurebyte/query_graph/transform/sdk_code.py +298 -0
  91. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/base.py +1 -1
  92. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature/api.py +12 -0
  93. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature/controller.py +36 -2
  94. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list/api.py +0 -20
  95. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list/controller.py +4 -52
  96. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list_namespace/api.py +7 -7
  97. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list_namespace/controller.py +63 -3
  98. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_namespace/controller.py +1 -1
  99. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/registry.py +2 -0
  100. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/relationship_info/api.py +9 -9
  101. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/relationship_info/controller.py +4 -4
  102. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/credential.py +1 -1
  103. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature.py +82 -4
  104. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_job_setting_analysis.py +49 -0
  105. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_list.py +15 -2
  106. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_list_namespace.py +9 -1
  107. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/info.py +28 -13
  108. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/relationship_info.py +2 -2
  109. featurebyte-0.3.1/featurebyte/schema/worker/task/batch_feature_create.py +19 -0
  110. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/deploy.py +64 -32
  111. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature.py +95 -42
  112. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_list.py +65 -15
  113. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_store_warehouse.py +115 -1
  114. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/info.py +38 -0
  115. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/preview.py +6 -11
  116. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/relationship_info.py +3 -3
  117. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/task_manager.py +14 -0
  118. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/version.py +4 -4
  119. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/base.py +8 -1
  120. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/base_spark.py +39 -3
  121. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/databricks.py +56 -11
  122. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/simple_storage.py +93 -13
  123. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/snowflake.py +3 -0
  124. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/featurebyte-hive-udf-1.0.3-SNAPSHOT-all.jar +0 -0
  125. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_common.py +5 -0
  126. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_generate.py +3 -11
  127. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_generate_entity_tracking.py +8 -7
  128. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_generate_schedule.py +6 -11
  129. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_monitor.py +9 -13
  130. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/manager.py +12 -11
  131. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/tile_cache.py +132 -68
  132. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/persistent.py +1 -5
  133. featurebyte-0.3.1/featurebyte/worker/task/batch_feature_create.py +123 -0
  134. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/mixin.py +1 -0
  135. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task_executor.py +41 -10
  136. {featurebyte-0.2.2 → featurebyte-0.3.1}/pyproject.toml +5 -5
  137. featurebyte-0.2.2/featurebyte/query_graph/sql/feature_historical.py +0 -448
  138. featurebyte-0.2.2/featurebyte/query_graph/transform/sdk_code.py +0 -144
  139. featurebyte-0.2.2/setup.py +0 -148
  140. {featurebyte-0.2.2 → featurebyte-0.3.1}/LICENSE +0 -0
  141. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/__main__.py +0 -0
  142. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/__init__.py +0 -0
  143. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/base_aggregator.py +0 -0
  144. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/catalog_decorator.py +0 -0
  145. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/dimension_view.py +0 -0
  146. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_namespace.py +0 -0
  147. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_util.py +0 -0
  148. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/feature_validation_util.py +0 -0
  149. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/item_view.py +0 -0
  150. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/request_column.py +0 -0
  151. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/scd_view.py +0 -0
  152. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/simple_aggregator.py +0 -0
  153. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/templates/__init__.py +0 -0
  154. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/templates/online_serving/__init__.py +0 -0
  155. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/templates/online_serving/python.tpl +0 -0
  156. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/templates/online_serving/shell.tpl +0 -0
  157. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/window_aggregator.py +0 -0
  158. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/api/window_validator.py +0 -0
  159. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/app.py +0 -0
  160. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/__init__.py +0 -0
  161. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/date_util.py +0 -0
  162. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/descriptor.py +0 -0
  163. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/dict_util.py +0 -0
  164. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/doc_util.py +0 -0
  165. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/autodoc_processor.py +0 -0
  166. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/constants.py +0 -0
  167. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/custom_nav.py +0 -0
  168. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/doc_types.py +0 -0
  169. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/formatters.py +0 -0
  170. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/markdown_extension/extension.py +0 -0
  171. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/pydantic_field_docs.py +0 -0
  172. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/resource_util.py +0 -0
  173. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/documentation/util.py +0 -0
  174. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/env_util.py +0 -0
  175. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/join_utils.py +0 -0
  176. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/model_util.py +0 -0
  177. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/path_util.py +0 -0
  178. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/singleton.py +0 -0
  179. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/tile_util.py +0 -0
  180. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/common/typing.py +0 -0
  181. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/conftest.py +0 -0
  182. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/__init__.py +0 -0
  183. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/accessor/__init__.py +0 -0
  184. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/frame.py +0 -0
  185. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/generic.py +0 -0
  186. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/mixin.py +0 -0
  187. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/core/util.py +0 -0
  188. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/__init__.py +0 -0
  189. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/__main__.py +0 -0
  190. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/app.py +0 -0
  191. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/creditcard.sql +0 -0
  192. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/doctest_grocery.sql +0 -0
  193. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/grocery.sql +0 -0
  194. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/datasets/healthcare.sql +0 -0
  195. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/docker/__init__.py +0 -0
  196. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/feature_manager/__init__.py +0 -0
  197. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/feature_manager/manager.py +0 -0
  198. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/feature_manager/model.py +0 -0
  199. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/feature_manager/sql_template.py +0 -0
  200. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/__init__.py +0 -0
  201. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/migration_data_service.py +0 -0
  202. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/model.py +0 -0
  203. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/run.py +0 -0
  204. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/service/__init__.py +0 -0
  205. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/migration/service/mixin.py +0 -0
  206. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/__init__.py +0 -0
  207. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/base.py +0 -0
  208. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/batch_feature_table.py +0 -0
  209. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/batch_request_table.py +0 -0
  210. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/catalog.py +0 -0
  211. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/context.py +0 -0
  212. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/deployment.py +0 -0
  213. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/dimension_table.py +0 -0
  214. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/entity.py +0 -0
  215. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/entity_validation.py +0 -0
  216. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/event_table.py +0 -0
  217. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/feature_job_setting_analysis.py +0 -0
  218. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/feature_store.py +0 -0
  219. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/historical_feature_table.py +0 -0
  220. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/item_table.py +0 -0
  221. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/materialized_table.py +0 -0
  222. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/observation_table.py +0 -0
  223. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/online_store.py +0 -0
  224. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/parent_serving.py +0 -0
  225. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/periodic_task.py +0 -0
  226. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/persistent.py +0 -0
  227. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/proxy_table.py +0 -0
  228. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/relationship_analysis.py +0 -0
  229. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/request_input.py +0 -0
  230. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/scd_table.py +0 -0
  231. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/semantic.py +0 -0
  232. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/task.py +0 -0
  233. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/models/tile.py +0 -0
  234. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/persistent/__init__.py +0 -0
  235. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/persistent/audit.py +0 -0
  236. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/persistent/base.py +0 -0
  237. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/__init__.py +0 -0
  238. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/algorithm.py +0 -0
  239. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/enum.py +0 -0
  240. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/graph_node/__init__.py +0 -0
  241. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/graph_node/base.py +0 -0
  242. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/__init__.py +0 -0
  243. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/column_info.py +0 -0
  244. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/common_table.py +0 -0
  245. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/model/critical_data_info.py +0 -0
  246. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/__init__.py +0 -0
  247. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/agg_func.py +0 -0
  248. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/binary.py +0 -0
  249. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/__init__.py +0 -0
  250. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/column.py +0 -0
  251. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/operation.py +0 -0
  252. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/metadata/templates/sdk_code.tpl +0 -0
  253. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/mixin.py +0 -0
  254. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/scalar.py +0 -0
  255. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/string.py +0 -0
  256. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/unary.py +0 -0
  257. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/node/validator.py +0 -0
  258. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/pruning_util.py +0 -0
  259. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/__init__.py +0 -0
  260. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/__init__.py +0 -0
  261. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/base.py +0 -0
  262. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/item.py +0 -0
  263. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/latest.py +0 -0
  264. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/lookup.py +0 -0
  265. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/request_table.py +0 -0
  266. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/aggregator/window.py +0 -0
  267. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/__init__.py +0 -0
  268. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/aggregate.py +0 -0
  269. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/base.py +0 -0
  270. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/binary.py +0 -0
  271. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/count_dict.py +0 -0
  272. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/datetime.py +0 -0
  273. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/generic.py +0 -0
  274. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/groupby.py +0 -0
  275. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/input.py +0 -0
  276. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/is_in.py +0 -0
  277. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/join.py +0 -0
  278. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/join_feature.py +0 -0
  279. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/literal.py +0 -0
  280. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/request.py +0 -0
  281. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/string.py +0 -0
  282. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/track_changes.py +0 -0
  283. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/unary.py +0 -0
  284. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/ast/util.py +0 -0
  285. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/builder.py +0 -0
  286. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/common.py +0 -0
  287. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/dataframe.py +0 -0
  288. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/expression.py +0 -0
  289. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/feature_preview.py +0 -0
  290. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/groupby_helper.py +0 -0
  291. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/interpreter/__init__.py +0 -0
  292. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/interpreter/base.py +0 -0
  293. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/interpreter/preview.py +0 -0
  294. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/interpreter/tile.py +0 -0
  295. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/materialisation.py +0 -0
  296. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/online_serving.py +0 -0
  297. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/online_serving_util.py +0 -0
  298. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/parent_serving.py +0 -0
  299. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/scd_helper.py +0 -0
  300. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/template.py +0 -0
  301. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/tile_util.py +0 -0
  302. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/sql/tiling.py +0 -0
  303. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/__init__.py +0 -0
  304. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/base.py +0 -0
  305. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/flattening.py +0 -0
  306. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/operation_structure.py +0 -0
  307. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/pruning.py +0 -0
  308. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/transform/reconstruction.py +0 -0
  309. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/query_graph/util.py +0 -0
  310. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/__init__.py +0 -0
  311. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/app_container.py +0 -0
  312. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/app_container_config.py +0 -0
  313. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_feature_table/__init__.py +0 -0
  314. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_feature_table/api.py +0 -0
  315. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_feature_table/controller.py +0 -0
  316. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_request_table/__init__.py +0 -0
  317. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_request_table/api.py +0 -0
  318. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/batch_request_table/controller.py +0 -0
  319. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/catalog/__init__.py +0 -0
  320. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/catalog/api.py +0 -0
  321. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/catalog/controller.py +0 -0
  322. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/__init__.py +0 -0
  323. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/base_materialized_table.py +0 -0
  324. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/base_table.py +0 -0
  325. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/schema.py +0 -0
  326. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/common/util.py +0 -0
  327. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/context/__init__.py +0 -0
  328. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/context/api.py +0 -0
  329. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/context/controller.py +0 -0
  330. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/credential/__init__.py +0 -0
  331. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/credential/api.py +0 -0
  332. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/credential/controller.py +0 -0
  333. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/deployment/__init__.py +0 -0
  334. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/deployment/api.py +0 -0
  335. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/deployment/controller.py +0 -0
  336. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/dimension_table/__init__.py +0 -0
  337. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/dimension_table/api.py +0 -0
  338. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/dimension_table/controller.py +0 -0
  339. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/entity/__init__.py +0 -0
  340. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/entity/api.py +0 -0
  341. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/entity/controller.py +0 -0
  342. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/event_table/__init__.py +0 -0
  343. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/event_table/api.py +0 -0
  344. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/event_table/controller.py +0 -0
  345. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature/__init__.py +0 -0
  346. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_job_setting_analysis/__init__.py +0 -0
  347. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_job_setting_analysis/api.py +0 -0
  348. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_job_setting_analysis/controller.py +0 -0
  349. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list/__init__.py +0 -0
  350. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_list_namespace/__init__.py +0 -0
  351. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_namespace/__init__.py +0 -0
  352. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_namespace/api.py +0 -0
  353. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_store/__init__.py +0 -0
  354. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_store/api.py +0 -0
  355. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/feature_store/controller.py +0 -0
  356. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/historical_feature_table/__init__.py +0 -0
  357. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/historical_feature_table/api.py +0 -0
  358. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/historical_feature_table/controller.py +0 -0
  359. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/item_table/__init__.py +0 -0
  360. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/item_table/api.py +0 -0
  361. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/item_table/controller.py +0 -0
  362. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/observation_table/__init__.py +0 -0
  363. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/observation_table/api.py +0 -0
  364. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/observation_table/controller.py +0 -0
  365. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/periodic_tasks/__init__.py +0 -0
  366. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/periodic_tasks/api.py +0 -0
  367. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/periodic_tasks/controller.py +0 -0
  368. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/relationship_info/__init__.py +0 -0
  369. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/scd_table/__init__.py +0 -0
  370. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/scd_table/api.py +0 -0
  371. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/scd_table/controller.py +0 -0
  372. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/semantic/__init__.py +0 -0
  373. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/semantic/api.py +0 -0
  374. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/semantic/controller.py +0 -0
  375. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/table/__init__.py +0 -0
  376. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/table/api.py +0 -0
  377. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/table/controller.py +0 -0
  378. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/task/__init__.py +0 -0
  379. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/task/api.py +0 -0
  380. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/task/controller.py +0 -0
  381. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/temp_data/__init__.py +0 -0
  382. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/temp_data/api.py +0 -0
  383. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/routes/temp_data/controller.py +0 -0
  384. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/__init__.py +0 -0
  385. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/batch_feature_table.py +0 -0
  386. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/batch_request_table.py +0 -0
  387. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/catalog.py +0 -0
  388. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/common/__init__.py +0 -0
  389. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/common/base.py +0 -0
  390. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/common/operation.py +0 -0
  391. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/context.py +0 -0
  392. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/deployment.py +0 -0
  393. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/dimension_table.py +0 -0
  394. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/entity.py +0 -0
  395. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/event_table.py +0 -0
  396. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_namespace.py +0 -0
  397. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/feature_store.py +0 -0
  398. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/historical_feature_table.py +0 -0
  399. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/item_table.py +0 -0
  400. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/materialized_table.py +0 -0
  401. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/observation_table.py +0 -0
  402. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/periodic_task.py +0 -0
  403. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/request_table.py +0 -0
  404. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/scd_table.py +0 -0
  405. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/semantic.py +0 -0
  406. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/table.py +0 -0
  407. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/task.py +0 -0
  408. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/__init__.py +0 -0
  409. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/progress.py +0 -0
  410. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/__init__.py +0 -0
  411. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/base.py +0 -0
  412. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/batch_feature_table.py +0 -0
  413. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/batch_request_table.py +0 -0
  414. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/deployment_create_update.py +0 -0
  415. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/feature_job_setting_analysis.py +0 -0
  416. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/historical_feature_table.py +0 -0
  417. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/materialized_table_delete.py +0 -0
  418. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/observation_table.py +0 -0
  419. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/test.py +0 -0
  420. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/schema/worker/task/tile.py +0 -0
  421. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/__init__.py +0 -0
  422. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/base_document.py +0 -0
  423. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/base_service.py +0 -0
  424. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/base_table_document.py +0 -0
  425. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/batch_feature_table.py +0 -0
  426. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/batch_request_table.py +0 -0
  427. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/catalog.py +0 -0
  428. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/context.py +0 -0
  429. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/credential.py +0 -0
  430. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/default_version_mode.py +0 -0
  431. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/deployment.py +0 -0
  432. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/dimension_table.py +0 -0
  433. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/entity.py +0 -0
  434. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/entity_validation.py +0 -0
  435. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/event_table.py +0 -0
  436. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_job_setting_analysis.py +0 -0
  437. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_list_namespace.py +0 -0
  438. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_list_status.py +0 -0
  439. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_namespace.py +0 -0
  440. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_readiness.py +0 -0
  441. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/feature_store.py +0 -0
  442. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/historical_feature_table.py +0 -0
  443. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/item_table.py +0 -0
  444. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/materialized_table.py +0 -0
  445. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/mixin.py +0 -0
  446. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/observation_table.py +0 -0
  447. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/online_enable.py +0 -0
  448. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/online_serving.py +0 -0
  449. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/parent_serving.py +0 -0
  450. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/periodic_task.py +0 -0
  451. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/relationship.py +0 -0
  452. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/scd_table.py +0 -0
  453. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/semantic.py +0 -0
  454. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/session_manager.py +0 -0
  455. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/session_validator.py +0 -0
  456. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/table.py +0 -0
  457. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/table_columns_info.py +0 -0
  458. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/table_status.py +0 -0
  459. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/user_service.py +0 -0
  460. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/validator/__init__.py +0 -0
  461. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/validator/materialized_table_delete.py +0 -0
  462. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/validator/production_ready_validator.py +0 -0
  463. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/view_construction.py +0 -0
  464. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/service/working_schema.py +0 -0
  465. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/__init__.py +0 -0
  466. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/enum.py +0 -0
  467. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/hive.py +0 -0
  468. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/manager.py +0 -0
  469. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/spark.py +0 -0
  470. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/session/sqlite.py +0 -0
  471. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/__init__.py +0 -0
  472. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/base.py +0 -0
  473. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/common.py +0 -0
  474. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/databricks/.gitignore +0 -0
  475. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_COSINE_SIMILARITY.sql +0 -0
  476. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_ENTROPY.sql +0 -0
  477. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_MOST_FREQUENT.sql +0 -0
  478. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_MOST_FREQUENT_KEY_VALUE.sql +0 -0
  479. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_MOST_FREQUENT_VALUE.sql +0 -0
  480. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_COUNT_DICT_NUM_UNIQUE.sql +0 -0
  481. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_GET_RANK.sql +0 -0
  482. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_GET_RELATIVE_FREQUENCY.sql +0 -0
  483. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_INDEX_TO_TIMESTAMP.sql +0 -0
  484. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_TIMESTAMP_TO_INDEX.sql +0 -0
  485. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/F_TIMEZONE_OFFSET_TO_SECOND.sql +0 -0
  486. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_ONLINE_STORE_MAPPING.sql +0 -0
  487. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_TILE_FEATURE_MAPPING.sql +0 -0
  488. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_TILE_JOB_MONITOR.sql +0 -0
  489. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_TILE_MONITOR_SUMMARY.sql +0 -0
  490. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/snowflake/T_TILE_REGISTRY.sql +0 -0
  491. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/.gitignore +0 -0
  492. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_ONLINE_STORE_MAPPING.sql +0 -0
  493. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_TILE_FEATURE_MAPPING.sql +0 -0
  494. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_TILE_JOB_MONITOR.sql +0 -0
  495. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_TILE_MONITOR_SUMMARY.sql +0 -0
  496. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/T_TILE_REGISTRY.sql +0 -0
  497. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/spark/__init__.py +0 -0
  498. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_registry.py +0 -0
  499. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/sql/tile_schedule_online_store.py +0 -0
  500. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/storage/__init__.py +0 -0
  501. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/storage/base.py +0 -0
  502. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/storage/local.py +0 -0
  503. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/storage/local_temp.py +0 -0
  504. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/__init__.py +0 -0
  505. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/scheduler.py +0 -0
  506. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/tile/sql_template.py +0 -0
  507. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/__init__.py +0 -0
  508. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/credential.py +0 -0
  509. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/messaging.py +0 -0
  510. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/snowflake/__init__.py +0 -0
  511. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/snowflake/sql.py +0 -0
  512. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/utils/storage.py +0 -0
  513. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/__init__.py +0 -0
  514. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/enum.py +0 -0
  515. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/process_store.py +0 -0
  516. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/progress.py +0 -0
  517. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/schedulers.py +0 -0
  518. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/start.py +0 -0
  519. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/__init__.py +0 -0
  520. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/base.py +0 -0
  521. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/batch_feature_table.py +0 -0
  522. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/batch_request_table.py +0 -0
  523. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/deployment_create_update.py +0 -0
  524. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/feature_job_setting_analysis.py +0 -0
  525. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/historical_feature_table.py +0 -0
  526. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/materialized_table_delete.py +0 -0
  527. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/observation_table.py +0 -0
  528. {featurebyte-0.2.2 → featurebyte-0.3.1}/featurebyte/worker/task/test_task.py +0 -0
  529. {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.2.2
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 (>=4.5.0,<5.0.0) ; python_version >= "3.8" and python_version < "4.0"
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
- invoices = catalog.get_view("INVOICES")
109
- # Customer average spend over past 5 weeks
110
- features = invoices.groupby(
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="avg",
115
- feature_names=["AvgSpend5w"],
107
+ method="sum",
108
+ feature_names=["CustomerTotalSpent_7d", "CustomerTotalSpent_28d"],
116
109
  fill_value=0,
117
- windows=["5w"]
110
+ windows=['7d', '28d']
118
111
  )
119
- # Save feature
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 over the past 4 weeks
311
- customer_inventory_28d = items_view.groupby(
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=["CustomerInventory_28d"],
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 over the past 4 weeks
324
- state_inventory_28d = items_view.groupby(
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=["StateInventory_28d"],
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
- customer_inventory_28d["CustomerInventory_28d"].cd.cosine_similarity(
336
- state_inventory_28d["StateInventory_28d"]
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
- invoices = catalog.get_view("INVOICES")
37
- # Customer average spend over past 5 weeks
38
- features = invoices.groupby(
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="avg",
43
- feature_names=["AvgSpend5w"],
40
+ method="sum",
41
+ feature_names=["CustomerTotalSpent_7d", "CustomerTotalSpent_28d"],
44
42
  fill_value=0,
45
- windows=["5w"]
43
+ windows=['7d', '28d']
46
44
  )
47
- # Save feature
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 over the past 4 weeks
239
- customer_inventory_28d = items_view.groupby(
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=["CustomerInventory_28d"],
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 over the past 4 weeks
252
- state_inventory_28d = items_view.groupby(
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=["StateInventory_28d"],
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
- customer_inventory_28d["CustomerInventory_28d"].cd.cosine_similarity(
264
- state_inventory_28d["StateInventory_28d"]
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 PrettyDict, ProgressThread
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
- pass
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
- return PrettyDict(response.json())
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, Dict, Optional
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: