chalkruntime 3.43.75__tar.gz → 3.43.76__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 (139) hide show
  1. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/PKG-INFO +1 -1
  2. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/vectorized_hasmany_sampler.py +19 -0
  3. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime.egg-info/PKG-INFO +1 -1
  4. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/pyproject.toml +1 -1
  5. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/README.md +0 -0
  6. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/__init__.py +0 -0
  7. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/constants.py +0 -0
  8. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/dataframe/__init__.py +0 -0
  9. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/dataframe/dataframe.py +0 -0
  10. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/dataframe/lazyframe.py +0 -0
  11. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/exc/__init__.py +0 -0
  12. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/exc/failed_argument.py +0 -0
  13. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/exc/resolver_errors.py +0 -0
  14. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/exc/wrapped_resolver_exception.py +0 -0
  15. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/__init__.py +0 -0
  16. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/_sql_source_pickle_patch.py +0 -0
  17. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/chalk_overload.py +0 -0
  18. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/convert_chalkpy_underscore.py +0 -0
  19. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/dataframe_resolver_correlation.py +0 -0
  20. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/feature.py +0 -0
  21. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/feature_alias.py +0 -0
  22. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/filter_conversion.py +0 -0
  23. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/global_graph.py +0 -0
  24. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/graph.py +0 -0
  25. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/graph_impl.py +0 -0
  26. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/graph_proxy.py +0 -0
  27. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/graph_state.py +0 -0
  28. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/jinja_parser.py +0 -0
  29. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/mat_agg_filter_expression.py +0 -0
  30. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/materializations.py +0 -0
  31. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/materialized_feature_view.py +0 -0
  32. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/maybe_named_collection.py +0 -0
  33. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/named_query.py +0 -0
  34. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/nearest_neighbor.py +0 -0
  35. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/overlay_graph.py +0 -0
  36. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/protograph_deserializer.py +0 -0
  37. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/protograph_serializer.py +0 -0
  38. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/pseudofeatures.py +0 -0
  39. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/resolver.py +0 -0
  40. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/singletons.py +0 -0
  41. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/sklearn_model_parser.py +0 -0
  42. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/source_secrets.py +0 -0
  43. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/stream_resolver.py +0 -0
  44. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/underscore.py +0 -0
  45. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/underscore_codec_info.py +0 -0
  46. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/underscore_operation_registry.py +0 -0
  47. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/graph/variables.py +0 -0
  48. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/heaptrack_launcher.py +0 -0
  49. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/incrementalization/__init__.py +0 -0
  50. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/incrementalization/group_incrementalizer.py +0 -0
  51. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/incrementalization/incrementalizer.py +0 -0
  52. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/__init__.py +0 -0
  53. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/batch_result_collector.py +0 -0
  54. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/bound_invoker.py +0 -0
  55. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/bound_invoker_cache.py +0 -0
  56. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/general_bound_invoker.py +0 -0
  57. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/no_arg_scalar_invoker.py +0 -0
  58. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/one_to_one_invoker.py +0 -0
  59. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/overlay_features.py +0 -0
  60. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/parse_external_resolver.py +0 -0
  61. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/partition_batch.py +0 -0
  62. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/query_execution_parameters.py +0 -0
  63. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/resolver_args_builder.py +0 -0
  64. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/resolver_input.py +0 -0
  65. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/resolver_input_upload.py +0 -0
  66. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/resolver_output_metadata.py +0 -0
  67. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/resolver_raw_output_parsing.py +0 -0
  68. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/resolver_result.py +0 -0
  69. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/resolver_runner.py +0 -0
  70. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/sample.py +0 -0
  71. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/invoker/validator.py +0 -0
  72. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/loader/__init__.py +0 -0
  73. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/loader/converter.py +0 -0
  74. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/loader/importer.py +0 -0
  75. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/memray_launcher.py +0 -0
  76. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/metadata.py +0 -0
  77. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/py.typed +0 -0
  78. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/__init__.py +0 -0
  79. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/branch_model_endpoint_config.py +0 -0
  80. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/config.py +0 -0
  81. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/entrypoint.py +0 -0
  82. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/env_helper.py +0 -0
  83. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/remote_python_function_registry_client.py +0 -0
  84. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/server_context_snapshot.py +0 -0
  85. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/service.py +0 -0
  86. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/server/subprocess_hook_service.py +0 -0
  87. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/__init__.py +0 -0
  88. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/composed_rewriter.py +0 -0
  89. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/contextual_query_rewriter.py +0 -0
  90. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/filter_injection_site.py +0 -0
  91. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/filter_query_rewriter.py +0 -0
  92. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/identity_rewriter.py +0 -0
  93. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/query_rewriter.py +0 -0
  94. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/query_rewriter_helper.py +0 -0
  95. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/sqlglot_import_lock.py +0 -0
  96. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sql_rewriter/sqlglot_parsing.py +0 -0
  97. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/sqlalchemy_mysql_keepalive.py +0 -0
  98. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/__init__.py +0 -0
  99. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/converter_utils.py +0 -0
  100. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/exc.py +0 -0
  101. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/message_parsing.py +0 -0
  102. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/resolver_utils.py +0 -0
  103. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/streaming_invoker_kernel/__init__.py +0 -0
  104. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/streaming_invoker_kernel/local_streaming_invoker_kernel.py +0 -0
  105. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/types.py +0 -0
  106. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/streaming/window_keys.py +0 -0
  107. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/__init__.py +0 -0
  108. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/async_helpers.py +0 -0
  109. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/contextvars.py +0 -0
  110. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/datadog.py +0 -0
  111. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/internal_pl_utils.py +0 -0
  112. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/posix_file_lock.py +0 -0
  113. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/proto_bytes_cache.py +0 -0
  114. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/pyarrow_utils.py +0 -0
  115. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/tracing.py +0 -0
  116. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/utils/viztracer_profiling.py +0 -0
  117. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime/valgrind_launcher.py +0 -0
  118. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime.egg-info/SOURCES.txt +0 -0
  119. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime.egg-info/dependency_links.txt +0 -0
  120. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime.egg-info/requires.txt +0 -0
  121. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/chalkruntime.egg-info/top_level.txt +0 -0
  122. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/setup.cfg +0 -0
  123. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/setup.py +0 -0
  124. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_branch_model_endpoint_config.py +0 -0
  125. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_captured_global_function_refs.py +0 -0
  126. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_datadog.py +0 -0
  127. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_feature_aliases.py +0 -0
  128. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_graph_cache.py +0 -0
  129. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_internal_pl_utils.py +0 -0
  130. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_mat_agg_filter_expressions.py +0 -0
  131. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_mat_agg_projection_expressions.py +0 -0
  132. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_materialized_feature_view.py +0 -0
  133. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_posix_file_lock.py +0 -0
  134. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_pyarrow_utils.py +0 -0
  135. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_server_context_snapshot.py +0 -0
  136. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_sql_max_row_version_lookback_deserialization.py +0 -0
  137. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_sql_retry_policy_deserialization.py +0 -0
  138. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_sqlalchemy_mysql_keepalive.py +0 -0
  139. {chalkruntime-3.43.75 → chalkruntime-3.43.76}/tests/test_subprocess_hook_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chalkruntime
3
- Version: 3.43.75
3
+ Version: 3.43.76
4
4
  Summary: Runtime support library for Chalk AI
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -689,6 +689,12 @@ class PolarsVectorizedHasManySampler(VectorizedHasManySampler):
689
689
  hm_lf = hm_df
690
690
  hm_mapping_lf = mapping_table
691
691
 
692
+ # See `HAS_MANY_INPUT_TS_COL_NAME`: present iff each has-many row is a version for one input time,
693
+ # in which case an input row only matches the rows computed for its own `__ts__`.
694
+ join_on_input_time = HAS_MANY_INPUT_TS_COL_NAME in hm_lf.columns
695
+ if join_on_input_time and TS_COL_NAME not in resolver_inputs_lf.columns:
696
+ raise ValueError(f"The resolver inputs must have a '{TS_COL_NAME}' column to match has-many data on it")
697
+
692
698
  # If we do not have the feature time column, append it with nulls
693
699
  if foreign_ts_feature.fqn not in hm_lf.columns:
694
700
  hm_lf = hm_lf.with_columns(pl.lit(None, pl.Datetime("us", "UTC")).alias(foreign_ts_feature.fqn))
@@ -703,6 +709,9 @@ class PolarsVectorizedHasManySampler(VectorizedHasManySampler):
703
709
  unique_on = [foreign_pkey_feature.fqn, foreign_ts_feature.fqn]
704
710
  if not allow_planner_postponed_has_many_sampling_planner_option:
705
711
  unique_on.append(TS_COL_NAME)
712
+ if join_on_input_time:
713
+ # Versions computed for different input times are distinct rows, not duplicates.
714
+ unique_on.append(HAS_MANY_INPUT_TS_COL_NAME)
706
715
  # Add __index__ to prevent cross-transaction deduplication in bulk queries
707
716
  # This ensures that duplicate GL codes across different transactions in a bulk query
708
717
  # are treated as distinct results, not as duplicates to be removed
@@ -726,6 +735,11 @@ class PolarsVectorizedHasManySampler(VectorizedHasManySampler):
726
735
  over = [pl.col(foreign_pkey_feature.fqn)]
727
736
  if INDEX_COL_NAME in hm_lf.columns:
728
737
  over.append(pl.col(INDEX_COL_NAME))
738
+ if join_on_input_time:
739
+ # A row is replaced only by a later version computed for the same input time; the versions for
740
+ # other input times are separate histories and would otherwise mark this one as replaced at its
741
+ # own feature time.
742
+ over.append(pl.col(HAS_MANY_INPUT_TS_COL_NAME))
729
743
  hm_lf = hm_lf.with_columns(
730
744
  [
731
745
  pl.col(foreign_ts_feature.fqn).alias(OBSERVED_AT_FEATURE_COL_NAME),
@@ -788,6 +802,9 @@ class PolarsVectorizedHasManySampler(VectorizedHasManySampler):
788
802
  for f in filters_from_feature
789
803
  ]
790
804
 
805
+ if join_on_input_time:
806
+ left_join_cols = [*left_join_cols, TS_COL_NAME]
807
+ right_join_cols = [*right_join_cols, HAS_MANY_INPUT_TS_COL_NAME]
791
808
  # Rename the left join column here since all the left table's column names had that prefix added.
792
809
  left_join_cols = [RESOLVER_INPUT_PREFIX + left_join_col for left_join_col in left_join_cols]
793
810
 
@@ -1472,6 +1489,8 @@ class PyArrowVectorizedHasManySampler(VectorizedHasManySampler):
1472
1489
  table_has_struct_or_list(resolver_inputs_table)
1473
1490
  or table_has_struct_or_list(has_many_table[0])
1474
1491
  or has_many_feature.underlying.get_nearest_neighbor_join_info()
1492
+ # This sampler does not match per-input-time has-many rows on the input time.
1493
+ or HAS_MANY_INPUT_TS_COL_NAME in has_many_table[0].column_names
1475
1494
  )
1476
1495
 
1477
1496
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chalkruntime
3
- Version: 3.43.75
3
+ Version: 3.43.76
4
4
  Summary: Runtime support library for Chalk AI
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -45,7 +45,7 @@ name = "chalkruntime"
45
45
  description = "Runtime support library for Chalk AI"
46
46
  readme = "README.md"
47
47
  requires-python = ">=3.11"
48
- version = "3.43.75"
48
+ version = "3.43.76"
49
49
 
50
50
 
51
51
  [tool.deptry]
File without changes
File without changes
File without changes