corvic-engine 0.3.0rc56__tar.gz → 0.3.0rc57__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 (250) hide show
  1. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/Cargo.lock +2 -2
  2. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/Cargo.toml +1 -1
  3. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/PKG-INFO +1 -1
  4. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/pyproject.toml +2 -2
  5. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_space.py +11 -4
  6. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/_schema.py +2 -4
  7. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/ops.py +30 -12
  8. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/in_memory_executor.py +42 -12
  9. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/table/table.py +9 -3
  10. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/LICENSE +0 -0
  11. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/README.md +0 -0
  12. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/Cargo.toml +0 -0
  13. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/expression_pb2.py +0 -0
  14. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/expression_pb2.pyi +0 -0
  15. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/expression_pb2_grpc.py +0 -0
  16. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/expression_pb2_grpc.pyi +0 -0
  17. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/priv/private_pb2.py +0 -0
  18. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/priv/private_pb2.pyi +0 -0
  19. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/priv/private_pb2_grpc.py +0 -0
  20. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/priv/private_pb2_grpc.pyi +0 -0
  21. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/validate_pb2.py +0 -0
  22. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/validate_pb2.pyi +0 -0
  23. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/validate_pb2_grpc.py +0 -0
  24. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/buf/validate/validate_pb2_grpc.pyi +0 -0
  25. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/context/__init__.py +0 -0
  26. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/context/py.typed +0 -0
  27. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/embed/__init__.py +0 -0
  28. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/embed/node2vec.py +0 -0
  29. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/embed/py.typed +0 -0
  30. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/embedding_metric/__init__.py +0 -0
  31. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/embedding_metric/embeddings.py +0 -0
  32. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/embedding_metric/py.typed +0 -0
  33. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/engine/__init__.py +0 -0
  34. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/engine/_native.pyi +0 -0
  35. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/engine/py.typed +0 -0
  36. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/__init__.py +0 -0
  37. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_agent.py +0 -0
  38. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_base_model.py +0 -0
  39. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_completion_model.py +0 -0
  40. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_defaults.py +0 -0
  41. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_errors.py +0 -0
  42. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_feature_type.py +0 -0
  43. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_feature_view.py +0 -0
  44. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_pipeline.py +0 -0
  45. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_proto_orm_convert.py +0 -0
  46. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_resource.py +0 -0
  47. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_room.py +0 -0
  48. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/_source.py +0 -0
  49. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/model/py.typed +0 -0
  50. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/__init__.py +0 -0
  51. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/_transformations.py +0 -0
  52. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/aggregation.py +0 -0
  53. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/encoders.py +0 -0
  54. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/errors.py +0 -0
  55. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/feature_types.py +0 -0
  56. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/py.typed +0 -0
  57. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/row_filters/__init__.py +0 -0
  58. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/row_filters/_jsonlogic.py +0 -0
  59. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/row_filters/_row_filters.py +0 -0
  60. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/op_graph/sample_strategy.py +0 -0
  61. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/__init__.py +0 -0
  62. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/_proto_columns.py +0 -0
  63. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/base.py +0 -0
  64. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/errors.py +0 -0
  65. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/func/__init__.py +0 -0
  66. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/func/utc_func.py +0 -0
  67. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/func/uuid_func.py +0 -0
  68. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/ids.py +0 -0
  69. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/keys.py +0 -0
  70. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/mixins.py +0 -0
  71. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/orm/py.typed +0 -0
  72. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/pa_scalar/__init__.py +0 -0
  73. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/pa_scalar/_const.py +0 -0
  74. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/pa_scalar/_from_value.py +0 -0
  75. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/pa_scalar/_temporal.py +0 -0
  76. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/pa_scalar/_to_value.py +0 -0
  77. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/pa_scalar/_types.py +0 -0
  78. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/pa_scalar/py.typed +0 -0
  79. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/proto_wrapper/__init__.py +0 -0
  80. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/proto_wrapper/_errors.py +0 -0
  81. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/proto_wrapper/_wrappers.py +0 -0
  82. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/proto_wrapper/py.typed +0 -0
  83. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/result/__init__.py +0 -0
  84. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/result/py.typed +0 -0
  85. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/sql/__init__.py +0 -0
  86. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/sql/parse_ops.py +0 -0
  87. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/sql/py.typed +0 -0
  88. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/__init__.py +0 -0
  89. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/_dimension_reduction.py +0 -0
  90. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/_embedder.py +0 -0
  91. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/_image_embedder.py +0 -0
  92. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/_planner.py +0 -0
  93. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/_text_embedder.py +0 -0
  94. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/client.py +0 -0
  95. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/op_graph_executor.py +0 -0
  96. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/py.typed +0 -0
  97. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/staging.py +0 -0
  98. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system/storage.py +0 -0
  99. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system_sqlite/__init__.py +0 -0
  100. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system_sqlite/client.py +0 -0
  101. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system_sqlite/fs_blob_store.py +0 -0
  102. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system_sqlite/py.typed +0 -0
  103. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system_sqlite/rdbms_blob_store.py +0 -0
  104. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/system_sqlite/staging.py +0 -0
  105. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/table/__init__.py +0 -0
  106. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/table/py.typed +0 -0
  107. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/version/__init__.py +0 -0
  108. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/version/py.typed +0 -0
  109. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/well_known_types/__init__.py +0 -0
  110. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic/well_known_types/py.typed +0 -0
  111. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/__init__.py +0 -0
  112. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/algorithm/__init__.py +0 -0
  113. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/algorithm/graph/__init__.py +0 -0
  114. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/algorithm/graph/v1/__init__.py +0 -0
  115. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/algorithm/graph/v1/graph_pb2.py +0 -0
  116. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/algorithm/graph/v1/graph_pb2.pyi +0 -0
  117. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.py +0 -0
  118. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/algorithm/graph/v1/graph_pb2_grpc.pyi +0 -0
  119. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/chat/__init__.py +0 -0
  120. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/chat/v1/__init__.py +0 -0
  121. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/chat/v1/service_pb2.py +0 -0
  122. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/chat/v1/service_pb2.pyi +0 -0
  123. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/chat/v1/service_pb2_grpc.py +0 -0
  124. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/chat/v1/service_pb2_grpc.pyi +0 -0
  125. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/completion/__init__.py +0 -0
  126. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/completion/v1/__init__.py +0 -0
  127. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/completion/v1/service_pb2.py +0 -0
  128. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/completion/v1/service_pb2.pyi +0 -0
  129. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/completion/v1/service_pb2_grpc.py +0 -0
  130. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/completion/v1/service_pb2_grpc.pyi +0 -0
  131. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/config/__init__.py +0 -0
  132. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/config/v1/__init__.py +0 -0
  133. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/config/v1/settings_pb2.py +0 -0
  134. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/config/v1/settings_pb2.pyi +0 -0
  135. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/config/v1/settings_pb2_grpc.py +0 -0
  136. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/config/v1/settings_pb2_grpc.pyi +0 -0
  137. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/embedding/__init__.py +0 -0
  138. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/embedding/v1/__init__.py +0 -0
  139. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/embedding/v1/models_pb2.py +0 -0
  140. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/embedding/v1/models_pb2.pyi +0 -0
  141. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/embedding/v1/models_pb2_grpc.py +0 -0
  142. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/embedding/v1/models_pb2_grpc.pyi +0 -0
  143. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/__init__.py +0 -0
  144. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/__init__.py +0 -0
  145. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/experiment_pb2.py +0 -0
  146. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/experiment_pb2.pyi +0 -0
  147. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/experiment_pb2_grpc.py +0 -0
  148. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/experiment_pb2_grpc.pyi +0 -0
  149. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/space_pb2.py +0 -0
  150. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/space_pb2.pyi +0 -0
  151. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/space_pb2_grpc.py +0 -0
  152. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v1/space_pb2_grpc.pyi +0 -0
  153. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/__init__.py +0 -0
  154. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/feature_view_pb2.py +0 -0
  155. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/feature_view_pb2.pyi +0 -0
  156. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.py +0 -0
  157. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/feature_view_pb2_grpc.pyi +0 -0
  158. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/space_pb2.py +0 -0
  159. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/space_pb2.pyi +0 -0
  160. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/space_pb2_grpc.py +0 -0
  161. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/feature/v2/space_pb2_grpc.pyi +0 -0
  162. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/__init__.py +0 -0
  163. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v1/__init__.py +0 -0
  164. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v1/service_pb2.py +0 -0
  165. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v1/service_pb2.pyi +0 -0
  166. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v1/service_pb2_grpc.py +0 -0
  167. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v1/service_pb2_grpc.pyi +0 -0
  168. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/__init__.py +0 -0
  169. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/pipeline_pb2.py +0 -0
  170. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/pipeline_pb2.pyi +0 -0
  171. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.py +0 -0
  172. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/pipeline_pb2_grpc.pyi +0 -0
  173. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/quick_mode_pb2.py +0 -0
  174. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/quick_mode_pb2.pyi +0 -0
  175. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.py +0 -0
  176. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/quick_mode_pb2_grpc.pyi +0 -0
  177. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/resource_pb2.py +0 -0
  178. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/resource_pb2.pyi +0 -0
  179. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/resource_pb2_grpc.py +0 -0
  180. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/resource_pb2_grpc.pyi +0 -0
  181. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/room_pb2.py +0 -0
  182. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/room_pb2.pyi +0 -0
  183. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/room_pb2_grpc.py +0 -0
  184. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/room_pb2_grpc.pyi +0 -0
  185. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/source_pb2.py +0 -0
  186. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/source_pb2.pyi +0 -0
  187. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/source_pb2_grpc.py +0 -0
  188. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/source_pb2_grpc.pyi +0 -0
  189. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/table_pb2.py +0 -0
  190. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/table_pb2.pyi +0 -0
  191. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/table_pb2_grpc.py +0 -0
  192. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/ingest/v2/table_pb2_grpc.pyi +0 -0
  193. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/model/__init__.py +0 -0
  194. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/model/v1alpha/__init__.py +0 -0
  195. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/model/v1alpha/models_pb2.py +0 -0
  196. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/model/v1alpha/models_pb2.pyi +0 -0
  197. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/model/v1alpha/models_pb2_grpc.py +0 -0
  198. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/model/v1alpha/models_pb2_grpc.pyi +0 -0
  199. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/__init__.py +0 -0
  200. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/__init__.py +0 -0
  201. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/agent_pb2.py +0 -0
  202. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/agent_pb2.pyi +0 -0
  203. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/agent_pb2_grpc.py +0 -0
  204. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/agent_pb2_grpc.pyi +0 -0
  205. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/common_pb2.py +0 -0
  206. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/common_pb2.pyi +0 -0
  207. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/common_pb2_grpc.py +0 -0
  208. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/common_pb2_grpc.pyi +0 -0
  209. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/completion_model_pb2.py +0 -0
  210. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/completion_model_pb2.pyi +0 -0
  211. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.py +0 -0
  212. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/completion_model_pb2_grpc.pyi +0 -0
  213. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/feature_view_pb2.py +0 -0
  214. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/feature_view_pb2.pyi +0 -0
  215. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.py +0 -0
  216. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/feature_view_pb2_grpc.pyi +0 -0
  217. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/pipeline_pb2.py +0 -0
  218. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/pipeline_pb2.pyi +0 -0
  219. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.py +0 -0
  220. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/pipeline_pb2_grpc.pyi +0 -0
  221. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/space_pb2.py +0 -0
  222. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/space_pb2.pyi +0 -0
  223. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/space_pb2_grpc.py +0 -0
  224. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/space_pb2_grpc.pyi +0 -0
  225. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/table_pb2.py +0 -0
  226. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/table_pb2.pyi +0 -0
  227. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/table_pb2_grpc.py +0 -0
  228. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/orm/v1/table_pb2_grpc.pyi +0 -0
  229. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/platform/__init__.py +0 -0
  230. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/platform/v1/__init__.py +0 -0
  231. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/platform/v1/platform_pb2.py +0 -0
  232. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/platform/v1/platform_pb2.pyi +0 -0
  233. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/platform/v1/platform_pb2_grpc.py +0 -0
  234. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/platform/v1/platform_pb2_grpc.pyi +0 -0
  235. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/query/__init__.py +0 -0
  236. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/query/v1/__init__.py +0 -0
  237. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/query/v1/query_pb2.py +0 -0
  238. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/query/v1/query_pb2.pyi +0 -0
  239. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/query/v1/query_pb2_grpc.py +0 -0
  240. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/query/v1/query_pb2_grpc.pyi +0 -0
  241. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/__init__.py +0 -0
  242. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/__init__.py +0 -0
  243. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/event_pb2.py +0 -0
  244. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/event_pb2.pyi +0 -0
  245. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/event_pb2_grpc.py +0 -0
  246. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/event_pb2_grpc.pyi +0 -0
  247. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/service_pb2.py +0 -0
  248. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/service_pb2.pyi +0 -0
  249. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/service_pb2_grpc.py +0 -0
  250. {corvic_engine-0.3.0rc56 → corvic_engine-0.3.0rc57}/python/corvic_generated/status/v1/service_pb2_grpc.pyi +0 -0
@@ -22,7 +22,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
22
22
 
23
23
  [[package]]
24
24
  name = "corvic-engine"
25
- version = "0.3.0-rc.56"
25
+ version = "0.3.0-rc.57"
26
26
  dependencies = [
27
27
  "numpy",
28
28
  "pyo3",
@@ -63,7 +63,7 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
63
63
 
64
64
  [[package]]
65
65
  name = "engine-walk"
66
- version = "0.3.0-rc.56"
66
+ version = "0.3.0-rc.57"
67
67
  dependencies = [
68
68
  "version_check",
69
69
  ]
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.0-rc.56"
6
+ version = "0.3.0-rc.57"
7
7
  edition = "2021"
8
8
  publish = false
9
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: corvic-engine
3
- Version: 0.3.0rc56
3
+ Version: 0.3.0rc57
4
4
  Classifier: Environment :: Console
5
5
  Classifier: License :: Other/Proprietary License
6
6
  Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -20,7 +20,7 @@ authors = [
20
20
  ]
21
21
  readme = "README.md"
22
22
  description = "Seamless embedding generation and retrieval."
23
- version = "0.3.0-rc.56" # sync this with tool.poetry.version below
23
+ version = "0.3.0-rc.57" # sync this with tool.poetry.version below
24
24
 
25
25
  # TODO(ddn): Pull dependencies from tool.poetry.dependencies. We use maturin as
26
26
  # the build system but poetry for the development environment.
@@ -74,7 +74,7 @@ packages = [
74
74
  ]
75
75
  description = ""
76
76
  authors = []
77
- version = "0.3.0-rc.56"
77
+ version = "0.3.0-rc.57"
78
78
 
79
79
  [tool.poetry.scripts]
80
80
  check = "corvic_check.cli:main"
@@ -836,13 +836,20 @@ class TabularSpace(Space):
836
836
  pa.string(),
837
837
  )
838
838
 
839
- op = (
840
- op.concat_list(
839
+ if len(embedding_column_tmp_names):
840
+ op = op.concat_list(
841
841
  column_names=embedding_column_tmp_names,
842
842
  concat_list_column_name=embedding_column_tmp_name,
843
+ ).and_then(reduce_dimension)
844
+ else:
845
+ op = op.add_literal_column(
846
+ column_name=embedding_column_tmp_name,
847
+ literal=[],
848
+ dtype=pa.large_list(pa.float32()),
849
+ ftype=op_graph.feature_type.embedding(),
843
850
  )
844
- .and_then(reduce_dimension)
845
- .and_then(select_columns)
851
+ op = (
852
+ op.and_then(select_columns)
846
853
  .and_then(update_feature_types)
847
854
  .and_then(rename_columns)
848
855
  .and_then(add_literal_column)
@@ -2,8 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from collections.abc import Sequence
6
-
7
5
  import polars as pl
8
6
  import pyarrow as pa
9
7
 
@@ -14,7 +12,7 @@ from corvic.op_graph.feature_types import FeatureType
14
12
 
15
13
  def _infer_possible_feature_types(
16
14
  data_type: pa.DataType,
17
- ) -> Sequence[FeatureType]:
15
+ ) -> list[FeatureType]:
18
16
  if pa.types.is_integer(data_type):
19
17
  # TODO(thunt): Add multi-categorical in future versions
20
18
  return [
@@ -168,6 +166,6 @@ class Field:
168
166
  def rename(self, new_name: str) -> Field:
169
167
  return Field(new_name, self.dtype, self.ftype)
170
168
 
171
- def possible_feature_types(self) -> Sequence[FeatureType]:
169
+ def possible_feature_types(self) -> list[FeatureType]:
172
170
  """Infer possible feature types given the data type."""
173
171
  return _infer_possible_feature_types(self.dtype)
@@ -59,7 +59,7 @@ from corvic.op_graph.row_filters import RowFilter
59
59
  from corvic.op_graph.row_filters import from_proto as row_filters_from_proto
60
60
  from corvic.op_graph.sample_strategy import SampleStrategy
61
61
  from corvic.op_graph.sample_strategy import from_proto as sample_strategy_from_proto
62
- from corvic.pa_scalar import PyValue, from_value, to_value
62
+ from corvic.pa_scalar import PyValue, Scalar, from_value, to_value
63
63
  from corvic.proto_wrapper import OneofProtoWrapper
64
64
  from corvic.result import InternalError, InvalidArgumentError, Ok
65
65
  from corvic_generated.algorithm.graph.v1 import graph_pb2
@@ -1275,7 +1275,7 @@ class _Base(OneofProtoWrapper[table_pb2.TableComputeOp], ABC):
1275
1275
  def add_literal_column(
1276
1276
  self,
1277
1277
  column_name: str,
1278
- literal: struct_pb2.Value | float | str | bool,
1278
+ literal: struct_pb2.Value | Scalar | PyValue,
1279
1279
  dtype: pa.DataType,
1280
1280
  ftype: FeatureType | None = None,
1281
1281
  ) -> Ok[AddLiteralColumn] | InvalidArgumentError:
@@ -1313,8 +1313,13 @@ class _Base(OneofProtoWrapper[table_pb2.TableComputeOp], ABC):
1313
1313
  separator: str,
1314
1314
  ) -> Ok[CombineColumns] | InvalidArgumentError:
1315
1315
  for col in column_names:
1316
- if not self.schema.has_column(col):
1316
+ field = self.schema.get(col)
1317
+ if not field:
1317
1318
  return InvalidArgumentError("no column with given name", given_name=col)
1319
+ if pa.types.is_binary(field.dtype) | pa.types.is_large_binary(field.dtype):
1320
+ return InvalidArgumentError(
1321
+ "cannot concat binary columns", given_name=col
1322
+ )
1318
1323
 
1319
1324
  if self.schema.has_column(combined_column_name):
1320
1325
  return InvalidArgumentError("name given for combined column already exists")
@@ -1698,6 +1703,9 @@ class _Base(OneofProtoWrapper[table_pb2.TableComputeOp], ABC):
1698
1703
  Returns:
1699
1704
  An AddDecisionTreeSummaryOp.
1700
1705
  """
1706
+ if max_depth < 0:
1707
+ return InvalidArgumentError("max_depth must be strictly positive")
1708
+
1701
1709
  return Ok(
1702
1710
  from_proto(
1703
1711
  table_pb2.AddDecisionTreeSummaryOp(
@@ -2938,16 +2946,26 @@ def _make_schema_for_combine_columns(op: CombineColumns):
2938
2946
  if column.ftype != ftype:
2939
2947
  ftype = feature_type.unknown()
2940
2948
 
2941
- dtype = (
2942
- pl.DataFrame(schema=schema.to_polars())
2943
- .with_columns(
2944
- pl.concat_list(*op.column_names).alias(op.combined_column_name)
2949
+ if op.column_names:
2950
+ dtype = (
2951
+ pl.DataFrame(schema=schema.to_polars())
2952
+ .with_columns(
2953
+ pl.concat_list(*op.column_names).alias(op.combined_column_name)
2954
+ )
2955
+ .to_arrow()
2956
+ .schema.field(op.combined_column_name)
2957
+ .type
2958
+ )
2959
+ else:
2960
+ dtype = (
2961
+ pl.DataFrame(schema=schema.to_polars())
2962
+ .with_columns(
2963
+ pl.Series(op.combined_column_name, [], pl.List(pl.Float32))
2964
+ )
2965
+ .to_arrow()
2966
+ .schema.field(op.combined_column_name)
2967
+ .type
2945
2968
  )
2946
- .to_arrow()
2947
- .schema.field(op.combined_column_name)
2948
- .type
2949
- )
2950
-
2951
2969
  return Schema(
2952
2970
  [
2953
2971
  *op.source.schema,
@@ -12,6 +12,7 @@ from typing import Any, Final, cast
12
12
 
13
13
  import numpy as np
14
14
  import polars as pl
15
+ import polars.selectors as cs
15
16
  import pyarrow as pa
16
17
  import pyarrow.parquet as pq
17
18
  import structlog
@@ -778,9 +779,14 @@ class InMemoryExecutor(OpGraphExecutor):
778
779
  )
779
780
 
780
781
  case op_graph.ConcatList():
781
- result_df = source_df.with_columns(
782
- pl.concat_list(*op.column_names).alias(op.combined_column_name)
783
- )
782
+ if op.column_names:
783
+ result_df = source_df.with_columns(
784
+ pl.concat_list(*op.column_names).alias(op.combined_column_name)
785
+ )
786
+ else:
787
+ result_df = source_df.with_columns(
788
+ pl.Series(op.combined_column_name, [])
789
+ )
784
790
 
785
791
  return Ok(_SchemaAndBatches.from_dataframe(result_df, source_batches.metrics))
786
792
 
@@ -1394,17 +1400,41 @@ class InMemoryExecutor(OpGraphExecutor):
1394
1400
  pass
1395
1401
  case err:
1396
1402
  return err
1403
+
1397
1404
  df_input = _as_df(source_batches)
1405
+ dataframe = df_input[list({*op.feature_column_names, op.label_column_name})]
1406
+ boolean_columns = [
1407
+ name
1408
+ for name, dtype in dataframe.schema.items()
1409
+ if dtype == pl.Boolean() and name in op.feature_column_names
1410
+ ]
1398
1411
 
1399
- features = df_input[op.feature_column_names]
1400
- classes = df_input[op.label_column_name]
1412
+ # Drop Nan and Null and infinite rows as not supported by decision tree
1413
+ dataframe = dataframe.with_columns(
1414
+ *[pl.col(col).cast(pl.Float32) for col in op.feature_column_names]
1415
+ )
1416
+ dataframe = dataframe.drop_nans().drop_nulls()
1417
+ try:
1418
+ # is_infinite is not implemented for all datatypes
1419
+ dataframe = dataframe.filter(~pl.any_horizontal(cs.numeric().is_infinite()))
1420
+ except pl.exceptions.InvalidOperationError as err:
1421
+ return InvalidArgumentError.from_(err)
1422
+
1423
+ if not len(dataframe):
1424
+ return InvalidArgumentError(
1425
+ "a minimum of 1 sample is required by DecisionTreeClassifier"
1426
+ )
1427
+ features = dataframe[op.feature_column_names]
1428
+ classes = dataframe[op.label_column_name]
1401
1429
  max_depth = op.max_depth
1402
1430
 
1403
- binary_columns = [
1404
- name for name, dtype in features.schema.items() if dtype == pl.Boolean()
1405
- ]
1406
-
1407
1431
  from sklearn.tree import DecisionTreeClassifier, export_graphviz, export_text
1432
+ from sklearn.utils.multiclass import check_classification_targets
1433
+
1434
+ try:
1435
+ check_classification_targets(classes)
1436
+ except ValueError as err:
1437
+ return InvalidArgumentError.from_(err)
1408
1438
 
1409
1439
  decision_tree = DecisionTreeClassifier(random_state=0, max_depth=max_depth)
1410
1440
  try:
@@ -1426,11 +1456,11 @@ class InMemoryExecutor(OpGraphExecutor):
1426
1456
  max_depth=max_depth,
1427
1457
  )
1428
1458
 
1429
- for binary_column in binary_columns:
1459
+ for boolean_column in boolean_columns:
1430
1460
  tree_str = tree_str.replace(
1431
- f"{binary_column} <= 0.50", f"NOT {binary_column}"
1461
+ f"{boolean_column} <= 0.50", f"NOT {boolean_column}"
1432
1462
  )
1433
- tree_str = tree_str.replace(f"{binary_column} > 0.50", binary_column)
1463
+ tree_str = tree_str.replace(f"{boolean_column} > 0.50", boolean_column)
1434
1464
 
1435
1465
  metrics = source_batches.metrics.copy()
1436
1466
  metrics[op.output_metric_key] = table_pb2.DecisionTreeSummary(
@@ -412,12 +412,18 @@ class Table:
412
412
  case _:
413
413
  return more_itertools.flatten(map(cls._get_staging_ops, op.sources()))
414
414
 
415
- def head(self) -> InvalidArgumentError | Ok[Table]:
416
- """Get up to the first 10 rows of the table."""
417
- return self.op_graph.limit_rows(num_rows=10).map(
415
+ def head(self, num_rows: int = 10) -> InvalidArgumentError | Ok[Table]:
416
+ """Get the first `num_rows` rows of the table."""
417
+ return self.op_graph.limit_rows(num_rows=num_rows).map(
418
418
  lambda op: Table(self.client, op)
419
419
  )
420
420
 
421
+ def sample_rows(self, num_rows: int = 10) -> InvalidArgumentError | Ok[Table]:
422
+ """Get a sample of `num_rows` rows of the table."""
423
+ return self.op_graph.sample_rows(
424
+ sample_strategy=op_graph.sample_strategy.uniform_random(), num_rows=num_rows
425
+ ).map(lambda op: Table(self.client, op))
426
+
421
427
  def distinct_rows(self) -> Table:
422
428
  return Table(
423
429
  self.client,