keras-rs-nightly 0.0.1.dev2025043003__py3-none-any.whl → 0.2.2.dev202506100336__py3-none-any.whl

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.

Potentially problematic release.


This version of keras-rs-nightly might be problematic. Click here for more details.

Files changed (37) hide show
  1. keras_rs/layers/__init__.py +12 -0
  2. keras_rs/src/layers/embedding/__init__.py +0 -0
  3. keras_rs/src/layers/embedding/base_distributed_embedding.py +1124 -0
  4. keras_rs/src/layers/embedding/distributed_embedding.py +33 -0
  5. keras_rs/src/layers/embedding/distributed_embedding_config.py +129 -0
  6. keras_rs/src/layers/embedding/embed_reduce.py +309 -0
  7. keras_rs/src/layers/embedding/jax/__init__.py +0 -0
  8. keras_rs/src/layers/embedding/jax/config_conversion.py +398 -0
  9. keras_rs/src/layers/embedding/jax/distributed_embedding.py +892 -0
  10. keras_rs/src/layers/embedding/jax/embedding_lookup.py +255 -0
  11. keras_rs/src/layers/embedding/jax/embedding_utils.py +596 -0
  12. keras_rs/src/layers/embedding/tensorflow/__init__.py +0 -0
  13. keras_rs/src/layers/embedding/tensorflow/config_conversion.py +323 -0
  14. keras_rs/src/layers/embedding/tensorflow/distributed_embedding.py +424 -0
  15. keras_rs/src/layers/feature_interaction/dot_interaction.py +2 -2
  16. keras_rs/src/layers/feature_interaction/feature_cross.py +14 -16
  17. keras_rs/src/layers/retrieval/brute_force_retrieval.py +5 -5
  18. keras_rs/src/layers/retrieval/retrieval.py +4 -4
  19. keras_rs/src/losses/pairwise_loss.py +2 -2
  20. keras_rs/src/losses/pairwise_mean_squared_error.py +1 -3
  21. keras_rs/src/metrics/dcg.py +2 -2
  22. keras_rs/src/metrics/mean_average_precision.py +1 -1
  23. keras_rs/src/metrics/mean_reciprocal_rank.py +4 -4
  24. keras_rs/src/metrics/ndcg.py +2 -2
  25. keras_rs/src/metrics/precision_at_k.py +3 -3
  26. keras_rs/src/metrics/ranking_metric.py +11 -5
  27. keras_rs/src/metrics/ranking_metrics_utils.py +10 -10
  28. keras_rs/src/metrics/recall_at_k.py +2 -2
  29. keras_rs/src/metrics/utils.py +2 -4
  30. keras_rs/src/types.py +43 -14
  31. keras_rs/src/utils/keras_utils.py +26 -6
  32. keras_rs/src/version.py +1 -1
  33. {keras_rs_nightly-0.0.1.dev2025043003.dist-info → keras_rs_nightly-0.2.2.dev202506100336.dist-info}/METADATA +6 -3
  34. keras_rs_nightly-0.2.2.dev202506100336.dist-info/RECORD +55 -0
  35. {keras_rs_nightly-0.0.1.dev2025043003.dist-info → keras_rs_nightly-0.2.2.dev202506100336.dist-info}/WHEEL +1 -1
  36. keras_rs_nightly-0.0.1.dev2025043003.dist-info/RECORD +0 -42
  37. {keras_rs_nightly-0.0.1.dev2025043003.dist-info → keras_rs_nightly-0.2.2.dev202506100336.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  import abc
2
- from typing import Any, Optional, Union
2
+ from typing import Any
3
3
 
4
4
  import keras
5
5
  from keras import ops
@@ -39,9 +39,9 @@ class RankingMetric(keras.metrics.Mean, abc.ABC):
39
39
 
40
40
  def __init__(
41
41
  self,
42
- k: Optional[int] = None,
42
+ k: int | None = None,
43
43
  shuffle_ties: bool = True,
44
- seed: Optional[Union[int, keras.random.SeedGenerator]] = None,
44
+ seed: int | keras.random.SeedGenerator | None = None,
45
45
  **kwargs: Any,
46
46
  ) -> None:
47
47
  super().__init__(**kwargs)
@@ -73,7 +73,7 @@ class RankingMetric(keras.metrics.Mean, abc.ABC):
73
73
  self,
74
74
  y_true: types.Tensor,
75
75
  y_pred: types.Tensor,
76
- sample_weight: Optional[types.Tensor] = None,
76
+ sample_weight: types.Tensor | None = None,
77
77
  ) -> None:
78
78
  """
79
79
  Accumulates statistics for the ranking metric.
@@ -116,6 +116,12 @@ class RankingMetric(keras.metrics.Mean, abc.ABC):
116
116
  if passed_mask is not None:
117
117
  passed_mask = ops.convert_to_tensor(passed_mask)
118
118
 
119
+ # Cast to the correct dtype.
120
+ y_true = ops.cast(y_true, dtype=self.dtype)
121
+ y_pred = ops.cast(y_pred, dtype=self.dtype)
122
+ if sample_weight is not None:
123
+ sample_weight = ops.cast(sample_weight, dtype=self.dtype)
124
+
119
125
  # === Process `sample_weight` ===
120
126
  if sample_weight is None:
121
127
  sample_weight = ops.cast(1, dtype=y_pred.dtype)
@@ -152,7 +158,7 @@ class RankingMetric(keras.metrics.Mean, abc.ABC):
152
158
 
153
159
  # Mask all values less than 0 (since less than 0 implies invalid
154
160
  # labels).
155
- valid_mask = ops.greater_equal(y_true, ops.cast(0.0, y_true.dtype))
161
+ valid_mask = ops.greater_equal(y_true, ops.cast(0, y_true.dtype))
156
162
  if passed_mask is not None:
157
163
  valid_mask = ops.logical_and(valid_mask, passed_mask)
158
164
 
@@ -1,4 +1,4 @@
1
- from typing import Callable, Optional, Union
1
+ from typing import Callable
2
2
 
3
3
  import keras
4
4
  from keras import ops
@@ -7,10 +7,10 @@ from keras_rs.src import types
7
7
 
8
8
 
9
9
  def get_shuffled_indices(
10
- shape: types.TensorShape,
11
- mask: Optional[types.Tensor] = None,
10
+ shape: types.Shape,
11
+ mask: types.Tensor | None = None,
12
12
  shuffle_ties: bool = True,
13
- seed: Optional[Union[int, keras.random.SeedGenerator]] = None,
13
+ seed: int | keras.random.SeedGenerator | None = None,
14
14
  ) -> types.Tensor:
15
15
  """Utility function for getting shuffled indices, with masked indices
16
16
  pushed to the end.
@@ -54,16 +54,16 @@ def get_shuffled_indices(
54
54
  def sort_by_scores(
55
55
  tensors_to_sort: list[types.Tensor],
56
56
  scores: types.Tensor,
57
- mask: Optional[types.Tensor] = None,
58
- k: Optional[int] = None,
57
+ mask: types.Tensor | None = None,
58
+ k: int | None = None,
59
59
  shuffle_ties: bool = True,
60
- seed: Optional[Union[int, keras.random.SeedGenerator]] = None,
60
+ seed: int | keras.random.SeedGenerator | None = None,
61
61
  ) -> types.Tensor:
62
62
  """
63
63
  Utility function for sorting tensors by scores.
64
64
 
65
65
  Args:
66
- tensors_to_sort. list of tensors. All tensors are of shape
66
+ tensors_to_sort: list of tensors. All tensors are of shape
67
67
  `(batch_size, list_size)`. These tensors are sorted based on
68
68
  `scores`.
69
69
  scores: tensor. Of shape `(batch_size, list_size)`. The scores to sort
@@ -163,7 +163,7 @@ def get_list_weights(
163
163
  # Identify lists where both weights and relevance sums are non-zero.
164
164
  nonzero_relevance = ops.cast(
165
165
  ops.logical_and(nonzero_weights, nonzero_relevance_condition),
166
- dtype="float32",
166
+ dtype=weights.dtype,
167
167
  )
168
168
  # Count the number of lists with non-zero relevance and non-zero weights.
169
169
  nonzero_relevance_count = ops.sum(nonzero_relevance, axis=0, keepdims=True)
@@ -227,7 +227,7 @@ def compute_dcg(
227
227
  ] = default_rank_discount_fn,
228
228
  ) -> types.Tensor:
229
229
  list_size = ops.shape(y_true)[1]
230
- positions = ops.arange(1, list_size + 1, dtype="float32")
230
+ positions = ops.arange(1, list_size + 1, dtype=y_true.dtype)
231
231
  gain = gain_fn(y_true)
232
232
  discount = rank_discount_fn(positions)
233
233
 
@@ -38,11 +38,11 @@ class RecallAtK(RankingMetric):
38
38
  ops.greater_equal(
39
39
  sorted_y_true, ops.cast(1, dtype=sorted_y_true.dtype)
40
40
  ),
41
- dtype="float32",
41
+ dtype=y_pred.dtype,
42
42
  )
43
43
  overall_relevance = ops.cast(
44
44
  ops.greater_equal(y_true, ops.cast(1, dtype=y_true.dtype)),
45
- dtype="float32",
45
+ dtype=y_pred.dtype,
46
46
  )
47
47
  per_list_recall = ops.divide_no_nan(
48
48
  ops.sum(relevance, axis=1, keepdims=True),
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from keras import ops
4
2
 
5
3
  from keras_rs.src import types
@@ -10,9 +8,9 @@ from keras_rs.src.utils.keras_utils import check_shapes_compatible
10
8
  def standardize_call_inputs_ranks(
11
9
  y_true: types.Tensor,
12
10
  y_pred: types.Tensor,
13
- mask: Optional[types.Tensor] = None,
11
+ mask: types.Tensor | None = None,
14
12
  check_y_true_rank: bool = True,
15
- ) -> tuple[types.Tensor, types.Tensor, Optional[types.Tensor], bool]:
13
+ ) -> tuple[types.Tensor, types.Tensor, types.Tensor | None, bool]:
16
14
  """
17
15
  Utility function for processing inputs for losses and metrics.
18
16
 
keras_rs/src/types.py CHANGED
@@ -1,6 +1,8 @@
1
1
  """Type definitions."""
2
2
 
3
- from typing import Any, Optional, Sequence
3
+ from typing import Any, Callable, Mapping, Sequence, TypeAlias, TypeVar, Union
4
+
5
+ import keras
4
6
 
5
7
  """
6
8
  A tensor in any of the backends.
@@ -8,19 +10,46 @@ A tensor in any of the backends.
8
10
  We do not define it explicitly to not require all the backends to be installed
9
11
  and imported. The explicit definition would be:
10
12
  ```
11
- Union[
12
- numpy.ndarray,
13
- tensorflow.Tensor,
14
- tensorflow.RaggedTensor,
15
- tensorflow.SparseTensor,
16
- tensorflow.IndexedSlices,
17
- jax.Array,
18
- jax.experimental.sparse.JAXSparse,
19
- torch.Tensor,
20
- keras.KerasTensor,
21
- ]
13
+ numpy.ndarray,
14
+ | tensorflow.Tensor,
15
+ | tensorflow.RaggedTensor,
16
+ | tensorflow.SparseTensor,
17
+ | tensorflow.IndexedSlices,
18
+ | jax.Array,
19
+ | jax.experimental.sparse.JAXSparse,
20
+ | torch.Tensor,
21
+ | keras.KerasTensor,
22
22
  ```
23
23
  """
24
- Tensor = Any
24
+ Tensor: TypeAlias = Any
25
+
26
+ Shape: TypeAlias = Sequence[int | None]
27
+
28
+ DType: TypeAlias = str
29
+
30
+ ConstraintLike: TypeAlias = (
31
+ str
32
+ | keras.constraints.Constraint
33
+ | type[keras.constraints.Constraint]
34
+ | Callable[[Tensor], Tensor]
35
+ )
36
+
37
+ InitializerLike: TypeAlias = (
38
+ str
39
+ | keras.initializers.Initializer
40
+ | type[keras.initializers.Initializer]
41
+ | Callable[[Shape, DType], Tensor]
42
+ | Tensor
43
+ )
44
+
45
+ RegularizerLike: TypeAlias = (
46
+ str
47
+ | keras.regularizers.Regularizer
48
+ | type[keras.regularizers.Regularizer]
49
+ | Callable[[Tensor], Tensor]
50
+ )
25
51
 
26
- TensorShape = Sequence[Optional[int]]
52
+ T = TypeVar("T")
53
+ Nested: TypeAlias = (
54
+ T | Sequence[Union[T, "Nested[T]"]] | Mapping[str, Union[T, "Nested[T]"]]
55
+ )
@@ -1,13 +1,35 @@
1
- from typing import Union
1
+ from typing import Any, Callable
2
2
 
3
3
  import keras
4
4
 
5
5
  from keras_rs.src import types
6
6
 
7
7
 
8
+ def no_automatic_dependency_tracking(
9
+ fn: Callable[..., Any],
10
+ ) -> Callable[..., Any]:
11
+ """Decorator to disable automatic dependency tracking in Keras and TF.
12
+
13
+ Args:
14
+ fn: the function to disable automatic dependency tracking for.
15
+
16
+ Returns:
17
+ a wrapped version of `fn`.
18
+ """
19
+ if keras.backend.backend() == "tensorflow":
20
+ import tensorflow as tf
21
+
22
+ fn = tf.__internal__.tracking.no_automatic_dependency_tracking(fn)
23
+
24
+ wrapped_fn: Callable[..., Any] = (
25
+ keras.src.utils.tracking.no_automatic_dependency_tracking(fn)
26
+ )
27
+ return wrapped_fn
28
+
29
+
8
30
  def clone_initializer(
9
- initializer: Union[str, keras.initializers.Initializer],
10
- ) -> keras.initializers.Initializer:
31
+ initializer: types.InitializerLike,
32
+ ) -> types.InitializerLike:
11
33
  """Clones an initializer to ensure a new seed.
12
34
 
13
35
  Args:
@@ -29,9 +51,7 @@ def clone_initializer(
29
51
  return initializer
30
52
 
31
53
 
32
- def check_shapes_compatible(
33
- shape1: types.TensorShape, shape2: types.TensorShape
34
- ) -> bool:
54
+ def check_shapes_compatible(shape1: types.Shape, shape2: types.Shape) -> bool:
35
55
  # Check rank first.
36
56
  if len(shape1) != len(shape2):
37
57
  return False
keras_rs/src/version.py CHANGED
@@ -1,7 +1,7 @@
1
1
  from keras_rs.src.api_export import keras_rs_export
2
2
 
3
3
  # Unique source of truth for the version number.
4
- __version__ = "0.0.1.dev2025043003"
4
+ __version__ = "0.2.2.dev202506100336"
5
5
 
6
6
 
7
7
  @keras_rs_export("keras_rs.version")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: keras-rs-nightly
3
- Version: 0.0.1.dev2025043003
3
+ Version: 0.2.2.dev202506100336
4
4
  Summary: Multi-backend recommender systems with Keras 3.
5
5
  Author-email: Keras team <keras-users@googlegroups.com>
6
6
  License: Apache License 2.0
@@ -8,7 +8,6 @@ Project-URL: Home, https://keras.io/keras_rs
8
8
  Project-URL: Repository, https://github.com/keras-team/keras-rs
9
9
  Classifier: Development Status :: 3 - Alpha
10
10
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.9
12
11
  Classifier: Programming Language :: Python :: 3.10
13
12
  Classifier: Programming Language :: Python :: 3.11
14
13
  Classifier: Programming Language :: Python :: 3 :: Only
@@ -18,13 +17,17 @@ Classifier: Operating System :: MacOS
18
17
  Classifier: Intended Audience :: Science/Research
19
18
  Classifier: Topic :: Scientific/Engineering
20
19
  Classifier: Topic :: Software Development
21
- Requires-Python: >=3.9
20
+ Requires-Python: >=3.10
22
21
  Description-Content-Type: text/markdown
23
22
  Requires-Dist: keras
24
23
  Requires-Dist: ml-dtypes
25
24
 
26
25
  # Keras Recommenders
27
26
 
27
+ <p align="center" width="100%">
28
+ <img src="https://i.imgur.com/m1BX7Zd.png" width="434" height="157" alt="KerasRS">
29
+ </p>
30
+
28
31
  Keras Recommenders is a library for building recommender systems on top of
29
32
  Keras 3. Keras Recommenders works natively with TensorFlow, JAX, or PyTorch. It
30
33
  provides a collection of building blocks which help with the full workflow of
@@ -0,0 +1,55 @@
1
+ keras_rs/__init__.py,sha256=8sjHiPN2GhUqAq4V7Vh4FLLqYw20-jgdI26ZKX5sg6M,350
2
+ keras_rs/layers/__init__.py,sha256=ERqFu1R8FgeES5rO5QwauArbNCm8auj-AiCURtsG6Ro,1332
3
+ keras_rs/losses/__init__.py,sha256=m04QOgxIUfJ2MvCUKLgEof-UbSNKgUYLPnY-D9NAclI,573
4
+ keras_rs/metrics/__init__.py,sha256=Qxpf6OFooIL9TIn2l3WgOea3HFRG0hq02glPAxtMZ9c,580
5
+ keras_rs/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ keras_rs/src/api_export.py,sha256=RsmG-DvO-cdFeAF9W6LRzms0kvtm-Yp9BAA_d-952zI,510
7
+ keras_rs/src/types.py,sha256=1A-oLRdX1-f2DsVZBcNl8qNsaH8pM-gnleLT9FWZWBw,1189
8
+ keras_rs/src/version.py,sha256=ZDE_RjVl35PdFbqUTZE4krhKovaxmfxToo_5BCojNbA,224
9
+ keras_rs/src/layers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ keras_rs/src/layers/embedding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ keras_rs/src/layers/embedding/base_distributed_embedding.py,sha256=dUZ4eS6ktnbnw_Z5gbyZGpQqO44Oyi7DkpNCReL66No,44347
12
+ keras_rs/src/layers/embedding/distributed_embedding.py,sha256=94jxUHoGK3Gs9yfV0KxFTuqPo7XFnhgCNlO2FEeiSgM,1072
13
+ keras_rs/src/layers/embedding/distributed_embedding_config.py,sha256=AWPmZBir1shhqNP6U_jiQ9lsBhMXVikW4B5VnzLsvPg,5579
14
+ keras_rs/src/layers/embedding/embed_reduce.py,sha256=c-MnEw1-KWs0jTf0JJ_ZBOY-9hRkiFyu989Dof3DnS8,12343
15
+ keras_rs/src/layers/embedding/jax/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ keras_rs/src/layers/embedding/jax/config_conversion.py,sha256=kDgzab8AVYf4jd_8fsiycPA0oFnT83kSWx-TXhzy6sk,13590
17
+ keras_rs/src/layers/embedding/jax/distributed_embedding.py,sha256=s_V2h8smO6_Nd3lQfp6zqNi9XxXIn9wjnggSedRoE8E,35410
18
+ keras_rs/src/layers/embedding/jax/embedding_lookup.py,sha256=HFkc0pGB9JngnCtbEJE2gDxC2K4gDdQ6GpnatSdnW6s,8205
19
+ keras_rs/src/layers/embedding/jax/embedding_utils.py,sha256=EHrQjPLl94STLWf9g8Ew8nuwupXRq-a_QmvFlXV6G6A,20331
20
+ keras_rs/src/layers/embedding/tensorflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ keras_rs/src/layers/embedding/tensorflow/config_conversion.py,sha256=i0iNXHi9E2UNh32Q5_kQtB9W5Cbcbm-tbWwRS1FHrfE,11589
22
+ keras_rs/src/layers/embedding/tensorflow/distributed_embedding.py,sha256=WPkRLJ7Tz272A0mMb5LCHlnNMYl_mTF2VxKpObcfQic,17206
23
+ keras_rs/src/layers/feature_interaction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ keras_rs/src/layers/feature_interaction/dot_interaction.py,sha256=Rs8xIHXNWQNiwjp_xzvQRmTSV1AyhJjDgVc3K5pTmrQ,8530
25
+ keras_rs/src/layers/feature_interaction/feature_cross.py,sha256=Wq_eQvO0WTRlep69QbKi8TwY8bnFoF9vreP_j6ZHNFE,8666
26
+ keras_rs/src/layers/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ keras_rs/src/layers/retrieval/brute_force_retrieval.py,sha256=WVH9nHj6mGcK5DAOzYBGfUztPtGtMX4RKLac6GV1vLI,5644
28
+ keras_rs/src/layers/retrieval/hard_negative_mining.py,sha256=n5UftRcuuR7Lh75vOdFdqatpsYqJDHCsraNtAjeWvoM,3575
29
+ keras_rs/src/layers/retrieval/remove_accidental_hits.py,sha256=WKoIhUSc6SvbgLXcSqNvFUnkuyXfxWwsC7nAgYbON_U,3773
30
+ keras_rs/src/layers/retrieval/retrieval.py,sha256=SFxMdooUhZy854SLZbpoyZR1Md4bHnpf7P077oVjjtU,4162
31
+ keras_rs/src/layers/retrieval/sampling_probability_correction.py,sha256=3zD6LInxhyIvyujMleGqiuoPKsna2oaTN6JU6xMnW_M,1977
32
+ keras_rs/src/losses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ keras_rs/src/losses/pairwise_hinge_loss.py,sha256=tONOJpcwCw1mybwvyx8dAy5t6dDmlIn00enzWfQLXpQ,3049
34
+ keras_rs/src/losses/pairwise_logistic_loss.py,sha256=40PFdCHDM7CLunT_PE3RbgxROVImw13dgVL3o3nzeNg,3473
35
+ keras_rs/src/losses/pairwise_loss.py,sha256=Oydk8e7AGU0Mc9yvm6ccr_XDDfUe8EZlS4JJgyxKUm4,6197
36
+ keras_rs/src/losses/pairwise_loss_utils.py,sha256=xvdGvdKNkvGvIaWYEQziWTFNa5EJz7rdkVGgrsnDHUk,1246
37
+ keras_rs/src/losses/pairwise_mean_squared_error.py,sha256=sW-S3fUFtLV_cf8Tw9Wluzoe9t7lmXzSIAj6MXOpL2M,4823
38
+ keras_rs/src/losses/pairwise_soft_zero_one_loss.py,sha256=YddVtJS8tKEeb0YrqGzEsr-6IDxH4uRjFrYkZDMWpkk,3492
39
+ keras_rs/src/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ keras_rs/src/metrics/dcg.py,sha256=rUtWe8VwZ8unXIhPu7fjTiErpK6-IOtcaiuikjtY1VE,5823
41
+ keras_rs/src/metrics/mean_average_precision.py,sha256=yUub4jGnqwTmxf694Z2ymRjMG_vO2HdyqqvDbcEhdSQ,4632
42
+ keras_rs/src/metrics/mean_reciprocal_rank.py,sha256=vr3ZZjpGYy2N-N7stcIm5elfHe9A4W8uY4HADP8icMw,4046
43
+ keras_rs/src/metrics/ndcg.py,sha256=ZBaKqV57K7jlto6ZVMxFNNRLdhzbLhdAR8TgDexjSjg,6922
44
+ keras_rs/src/metrics/precision_at_k.py,sha256=Dj5R-rT_Yd5hAsk4f-BlNMujfgIdPXnFVGOw9u7BIZQ,4038
45
+ keras_rs/src/metrics/ranking_metric.py,sha256=Lcl-Tt6HlI0f2wQpvAJ2M4mm5qCTZm-IgnLjjSEeNXE,10655
46
+ keras_rs/src/metrics/ranking_metrics_utils.py,sha256=0b03wiO9SjaHthtUYO4qezBFB8yLhFSwIRJhsL2fAJg,8785
47
+ keras_rs/src/metrics/recall_at_k.py,sha256=ssnQJC42KLN28cGrmzM-qR4M4iPqiQzWM2MfwYMq4ZE,3701
48
+ keras_rs/src/metrics/utils.py,sha256=fGTo8j0ykVE5Y3yQCS2orSFcHY20Uxt0NazyPsybUsw,2471
49
+ keras_rs/src/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ keras_rs/src/utils/doc_string_utils.py,sha256=CmqomepmaYcvpACpXEXkrJb8DMnvIgmYK-lJ53lYarY,1675
51
+ keras_rs/src/utils/keras_utils.py,sha256=dc-NFzs3a-qmRw0vBDiMslPLfrm9yymGduLWesXPhuY,2123
52
+ keras_rs_nightly-0.2.2.dev202506100336.dist-info/METADATA,sha256=fzhvqOxdMLY7GEw5SHAAc6zZJxa8EljtoTH0aZqecck,5273
53
+ keras_rs_nightly-0.2.2.dev202506100336.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
54
+ keras_rs_nightly-0.2.2.dev202506100336.dist-info/top_level.txt,sha256=pWs8X78Z0cn6lfcIb9VYOW5UeJ-TpoaO9dByzo7_FFo,9
55
+ keras_rs_nightly-0.2.2.dev202506100336.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.0.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,42 +0,0 @@
1
- keras_rs/__init__.py,sha256=8sjHiPN2GhUqAq4V7Vh4FLLqYw20-jgdI26ZKX5sg6M,350
2
- keras_rs/layers/__init__.py,sha256=cvrFgFWg0RjI0ExUZOKZRdcN-FwTIkqhT33Vx8wGtjQ,905
3
- keras_rs/losses/__init__.py,sha256=m04QOgxIUfJ2MvCUKLgEof-UbSNKgUYLPnY-D9NAclI,573
4
- keras_rs/metrics/__init__.py,sha256=Qxpf6OFooIL9TIn2l3WgOea3HFRG0hq02glPAxtMZ9c,580
5
- keras_rs/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- keras_rs/src/api_export.py,sha256=RsmG-DvO-cdFeAF9W6LRzms0kvtm-Yp9BAA_d-952zI,510
7
- keras_rs/src/types.py,sha256=UyOdgjqrqg_b58opnY8n6gTiDHKVR8z_bmEruehERBk,514
8
- keras_rs/src/version.py,sha256=6DQicfo43WsR2bsg-BdUHiGbBwGhNMF6hKd7NXYSW70,222
9
- keras_rs/src/layers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- keras_rs/src/layers/feature_interaction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- keras_rs/src/layers/feature_interaction/dot_interaction.py,sha256=bRLz03_8VaYLNG4gbIKCzsSc26shKMmzmwCs8SujezE,8542
12
- keras_rs/src/layers/feature_interaction/feature_cross.py,sha256=rViVlJOGYG2f-uKTDQH7MdX2syRzIMkYYtAQUjz6F-0,8755
13
- keras_rs/src/layers/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- keras_rs/src/layers/retrieval/brute_force_retrieval.py,sha256=izdppBXxJH0KqYEg7Zsr-SL-SHgAmnFopXMPalEO3uw,5676
15
- keras_rs/src/layers/retrieval/hard_negative_mining.py,sha256=n5UftRcuuR7Lh75vOdFdqatpsYqJDHCsraNtAjeWvoM,3575
16
- keras_rs/src/layers/retrieval/remove_accidental_hits.py,sha256=WKoIhUSc6SvbgLXcSqNvFUnkuyXfxWwsC7nAgYbON_U,3773
17
- keras_rs/src/layers/retrieval/retrieval.py,sha256=hVOBF10SF2q_TgJdVUqztbnw5qQF-cxVRGdJbOKoL9M,4191
18
- keras_rs/src/layers/retrieval/sampling_probability_correction.py,sha256=3zD6LInxhyIvyujMleGqiuoPKsna2oaTN6JU6xMnW_M,1977
19
- keras_rs/src/losses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- keras_rs/src/losses/pairwise_hinge_loss.py,sha256=tONOJpcwCw1mybwvyx8dAy5t6dDmlIn00enzWfQLXpQ,3049
21
- keras_rs/src/losses/pairwise_logistic_loss.py,sha256=40PFdCHDM7CLunT_PE3RbgxROVImw13dgVL3o3nzeNg,3473
22
- keras_rs/src/losses/pairwise_loss.py,sha256=1eux_u7PZ8BkAVdoZnt8nQxJuJeTQy_FJ8IspN5SsPc,6210
23
- keras_rs/src/losses/pairwise_loss_utils.py,sha256=xvdGvdKNkvGvIaWYEQziWTFNa5EJz7rdkVGgrsnDHUk,1246
24
- keras_rs/src/losses/pairwise_mean_squared_error.py,sha256=zFiSr2TNyJysgULxj9R_trpIMRNL_4MqpiAMNPUYmR0,4855
25
- keras_rs/src/losses/pairwise_soft_zero_one_loss.py,sha256=YddVtJS8tKEeb0YrqGzEsr-6IDxH4uRjFrYkZDMWpkk,3492
26
- keras_rs/src/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- keras_rs/src/metrics/dcg.py,sha256=UT5EyStuMeF7kpVguF34u7__Hr0bWfSFqEoyX1F4dtA,5836
28
- keras_rs/src/metrics/mean_average_precision.py,sha256=fRptyVvhCtzg0rXhBaTfLmqo7dKIG7vS75HK0xuDvpg,4629
29
- keras_rs/src/metrics/mean_reciprocal_rank.py,sha256=R_LDAuKLK9buSD6hh3_nm0PksMhISbpuI6fR1MTsFWM,4034
30
- keras_rs/src/metrics/ndcg.py,sha256=OX8vqO5JoBm8I7NDOce0bXwtoGNEK0hGEQT8hYfqJDA,6935
31
- keras_rs/src/metrics/precision_at_k.py,sha256=A1pL5-Yo_DfDzUqAfqbF8TY39yqFgf_Fe1cxz0AsCfE,4029
32
- keras_rs/src/metrics/ranking_metric.py,sha256=GFtOszaDmP4Q1ky3KnyMNXR6OBu09Uk4aEOJyn5-JO4,10439
33
- keras_rs/src/metrics/ranking_metrics_utils.py,sha256=989J8pr6FRsA1HwBeF7SA8uQqjZT2XeCxKfRuMysWnQ,8828
34
- keras_rs/src/metrics/recall_at_k.py,sha256=allUQA6JvPcWXxtGUHXmZ_nOWHAOmuUrIy5s5Nxse-4,3695
35
- keras_rs/src/metrics/utils.py,sha256=6xanTNdwARn4ugzmb7ko2kwAhNhsnR4NhrpS_qW0IKc,2506
36
- keras_rs/src/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- keras_rs/src/utils/doc_string_utils.py,sha256=CmqomepmaYcvpACpXEXkrJb8DMnvIgmYK-lJ53lYarY,1675
38
- keras_rs/src/utils/keras_utils.py,sha256=d28OdQP4GrJk4NIQS4n0KPtCbgOCxVU_vDnnI7ODpOw,1562
39
- keras_rs_nightly-0.0.1.dev2025043003.dist-info/METADATA,sha256=9RvG8sYrJD060w9nUrJ_vIVKwx_M3CzH_f0dquulVjg,5199
40
- keras_rs_nightly-0.0.1.dev2025043003.dist-info/WHEEL,sha256=ooBFpIzZCPdw3uqIQsOo4qqbA4ZRPxHnOH7peeONza0,91
41
- keras_rs_nightly-0.0.1.dev2025043003.dist-info/top_level.txt,sha256=pWs8X78Z0cn6lfcIb9VYOW5UeJ-TpoaO9dByzo7_FFo,9
42
- keras_rs_nightly-0.0.1.dev2025043003.dist-info/RECORD,,