tensordict-nightly 2025.7.17__cp39-cp39-macosx_14_0_universal2.whl → 2025.7.23__cp39-cp39-macosx_14_0_universal2.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.
- tensordict/_lazy.py +1 -1
- tensordict/_version.py +2 -2
- tensordict/base.py +9 -17
- tensordict/persistent.py +1 -1
- tensordict/tensorclass.py +59 -10
- tensordict/tensorclass.pyi +1 -0
- tensordict/utils.py +76 -11
- {tensordict_nightly-2025.7.17.dist-info → tensordict_nightly-2025.7.23.dist-info}/METADATA +1 -1
- {tensordict_nightly-2025.7.17.dist-info → tensordict_nightly-2025.7.23.dist-info}/RECORD +12 -12
- {tensordict_nightly-2025.7.17.dist-info → tensordict_nightly-2025.7.23.dist-info}/WHEEL +0 -0
- {tensordict_nightly-2025.7.17.dist-info → tensordict_nightly-2025.7.23.dist-info}/licenses/LICENSE +0 -0
- {tensordict_nightly-2025.7.17.dist-info → tensordict_nightly-2025.7.23.dist-info}/top_level.txt +0 -0
tensordict/_lazy.py
CHANGED
@@ -2448,7 +2448,7 @@ class LazyStackedTensorDict(TensorDictBase):
|
|
2448
2448
|
if is_non_tensor(leaf):
|
2449
2449
|
# Only lazy stacks of non tensors are actually tensordict instances
|
2450
2450
|
if isinstance(leaf, TensorDictBase):
|
2451
|
-
return leaf.tolist()
|
2451
|
+
return leaf.tolist(as_linked_list=True)
|
2452
2452
|
return leaf.data
|
2453
2453
|
return leaf
|
2454
2454
|
if isinstance(index, (type(None), bool)) or (
|
tensordict/_version.py
CHANGED
@@ -17,5 +17,5 @@ __version__: str
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
18
18
|
version_tuple: VERSION_TUPLE
|
19
19
|
|
20
|
-
__version__ = version = '0.0.post1+
|
21
|
-
__version_tuple__ = version_tuple = (0, 0, 'post1', '
|
20
|
+
__version__ = version = '0.0.post1+g244f7de.d20250723'
|
21
|
+
__version_tuple__ = version_tuple = (0, 0, 'post1', 'g244f7de.d20250723')
|
tensordict/base.py
CHANGED
@@ -100,6 +100,7 @@ from tensordict.utils import (
|
|
100
100
|
is_namedtuple_class,
|
101
101
|
is_non_tensor,
|
102
102
|
lazy_legacy,
|
103
|
+
LinkedList,
|
103
104
|
list_to_stack,
|
104
105
|
lock_blocked,
|
105
106
|
prod,
|
@@ -6343,10 +6344,10 @@ class TensorDictBase(MutableMapping):
|
|
6343
6344
|
from tensordict import NonTensorStack
|
6344
6345
|
|
6345
6346
|
if isinstance(value, NonTensorStack) and not capture_non_tensor_stack():
|
6346
|
-
return value.tolist()
|
6347
|
+
return value.tolist(as_linked_list=True)
|
6347
6348
|
data = getattr(value, "data", None)
|
6348
6349
|
if data is None:
|
6349
|
-
return value.tolist()
|
6350
|
+
return value.tolist(as_linked_list=True)
|
6350
6351
|
return data
|
6351
6352
|
return value
|
6352
6353
|
|
@@ -6564,7 +6565,7 @@ class TensorDictBase(MutableMapping):
|
|
6564
6565
|
if _pass_through(result):
|
6565
6566
|
# Only lazy stacks of non tensors are actually tensordict instances
|
6566
6567
|
if isinstance(result, TensorDictBase):
|
6567
|
-
return result.tolist()
|
6568
|
+
return result.tolist(as_linked_list=True)
|
6568
6569
|
return result.data
|
6569
6570
|
return result
|
6570
6571
|
|
@@ -11528,20 +11529,6 @@ class TensorDictBase(MutableMapping):
|
|
11528
11529
|
return TensorDictBase.from_struct_array(array, device=self.device)
|
11529
11530
|
castable = array.dtype.kind in ("c", "i", "f", "b", "u")
|
11530
11531
|
elif isinstance(array, (list, tuple)):
|
11531
|
-
if isinstance(array, list) and list_to_stack(allow_none=True) is None:
|
11532
|
-
warnings.warn(
|
11533
|
-
"You are setting a list of elements within a tensordict without setting `set_list_to_stack`. "
|
11534
|
-
"The current behaviour is that: if this list can be cast to a Tensor, it will be and will be written "
|
11535
|
-
"as such. If it cannot, it will be converted to a numpy array and considered as a non-indexable "
|
11536
|
-
"entity through a wrapping in a NonTensorData. If you want your list to be indexable along the "
|
11537
|
-
"tensordict batch-size, use the decorator/context manager tensordict.set_list_to_stack(True), the "
|
11538
|
-
"global flag `tensordict.set_list_to_stack(True).set()`, or "
|
11539
|
-
"the environment variable LIST_TO_STACK=1 (or use False/0 to silence this warning). "
|
11540
|
-
"This behavior will change in v0.10.0, and "
|
11541
|
-
"lists will be automatically stacked.",
|
11542
|
-
category=FutureWarning,
|
11543
|
-
)
|
11544
|
-
|
11545
11532
|
array = np.asarray(array)
|
11546
11533
|
castable = array.dtype.kind in ("c", "i", "f", "b", "u")
|
11547
11534
|
elif hasattr(array, "numpy"):
|
@@ -12257,6 +12244,7 @@ class TensorDictBase(MutableMapping):
|
|
12257
12244
|
convert_nodes: bool = True,
|
12258
12245
|
convert_tensors: bool = False,
|
12259
12246
|
tolist_first: bool = False,
|
12247
|
+
as_linked_list: bool = False,
|
12260
12248
|
) -> List[Any]:
|
12261
12249
|
"""Returns a nested list representation of the tensordict.
|
12262
12250
|
|
@@ -12270,6 +12258,8 @@ class TensorDictBase(MutableMapping):
|
|
12270
12258
|
Otherwise, they will remain as tensors. Default: ``False``.
|
12271
12259
|
tolist_first (bool): if ``True``, the tensordict will be converted to a list first when
|
12272
12260
|
it has batch dimensions. Default: ``False``.
|
12261
|
+
as_linked_list (bool): if ``True``, the list will be converted to a :class:`tensordict.utils.LinkedList`
|
12262
|
+
which will automatically update the tensordict when the list is modified. Default: ``False``.
|
12273
12263
|
|
12274
12264
|
Returns:
|
12275
12265
|
A nested list representation of the tensordict.
|
@@ -12354,6 +12344,8 @@ class TensorDictBase(MutableMapping):
|
|
12354
12344
|
local_res = []
|
12355
12345
|
_result.append(local_res)
|
12356
12346
|
q.append((local_val, local_res))
|
12347
|
+
if as_linked_list:
|
12348
|
+
return LinkedList(result, td=self)
|
12357
12349
|
return result
|
12358
12350
|
|
12359
12351
|
def numpy(self):
|
tensordict/persistent.py
CHANGED
@@ -447,7 +447,7 @@ class PersistentTensorDict(TensorDictBase):
|
|
447
447
|
if is_non_tensor(result):
|
448
448
|
result_data = getattr(result, "data", NO_DEFAULT)
|
449
449
|
if result_data is NO_DEFAULT:
|
450
|
-
return result.tolist()
|
450
|
+
return result.tolist(as_linked_list=True)
|
451
451
|
return result_data
|
452
452
|
return result
|
453
453
|
if isinstance(item, list):
|
tensordict/tensorclass.py
CHANGED
@@ -74,6 +74,7 @@ from tensordict.utils import ( # @manual=//pytorch/tensordict:_C
|
|
74
74
|
IndexType,
|
75
75
|
is_tensorclass,
|
76
76
|
KeyDependentDefaultDict,
|
77
|
+
LinkedList,
|
77
78
|
list_to_stack,
|
78
79
|
set_capture_non_tensor_stack,
|
79
80
|
)
|
@@ -1635,7 +1636,11 @@ def _getattr_tensor_only(self, item: str, **kwargs) -> Any:
|
|
1635
1636
|
if not callable(out) and not is_non_tensor(out):
|
1636
1637
|
return out
|
1637
1638
|
if is_non_tensor(out):
|
1638
|
-
return
|
1639
|
+
return (
|
1640
|
+
out.data
|
1641
|
+
if hasattr(out, "data")
|
1642
|
+
else out.tolist(as_linked_list=True)
|
1643
|
+
)
|
1639
1644
|
return _wrap_method(self, item, out)
|
1640
1645
|
raise AttributeError(item)
|
1641
1646
|
|
@@ -1657,7 +1662,11 @@ def _getattr(self, item: str, **kwargs) -> Any:
|
|
1657
1662
|
return out
|
1658
1663
|
out = self._tensordict._get_str(item, NO_DEFAULT, **kwargs)
|
1659
1664
|
if is_non_tensor(out):
|
1660
|
-
return
|
1665
|
+
return (
|
1666
|
+
out.data
|
1667
|
+
if not isinstance(out, NonTensorStack)
|
1668
|
+
else out.tolist(as_linked_list=True)
|
1669
|
+
)
|
1661
1670
|
return out
|
1662
1671
|
|
1663
1672
|
out = getattr(self._tensordict, item, NO_DEFAULT)
|
@@ -1665,7 +1674,7 @@ def _getattr(self, item: str, **kwargs) -> Any:
|
|
1665
1674
|
if not callable(out) and not is_non_tensor(out):
|
1666
1675
|
return out
|
1667
1676
|
if is_non_tensor(out):
|
1668
|
-
return out.data if hasattr(out, "data") else out.tolist()
|
1677
|
+
return out.data if hasattr(out, "data") else out.tolist(as_linked_list=True)
|
1669
1678
|
return _wrap_method(self, item, out)
|
1670
1679
|
raise AttributeError(item)
|
1671
1680
|
|
@@ -3527,7 +3536,13 @@ class NonTensorDataBase(TensorClass):
|
|
3527
3536
|
nowarn=True,
|
3528
3537
|
)(*args, **kwargs)
|
3529
3538
|
|
3530
|
-
def tolist(
|
3539
|
+
def tolist(
|
3540
|
+
self,
|
3541
|
+
*,
|
3542
|
+
convert_tensors: bool = False,
|
3543
|
+
tolist_first: bool = False,
|
3544
|
+
as_linked_list: bool = False,
|
3545
|
+
):
|
3531
3546
|
"""Converts the data in a list if the batch-size is non-empty.
|
3532
3547
|
|
3533
3548
|
If the batch-size is empty, returns the data.
|
@@ -3537,13 +3552,22 @@ class NonTensorDataBase(TensorClass):
|
|
3537
3552
|
Otherwise, they will remain as tensors. Default: ``False``.
|
3538
3553
|
tolist_first (bool, optional): if ``True``, the tensordict will be converted to a list first when
|
3539
3554
|
it has batch dimensions. Default: ``False``.
|
3555
|
+
as_linked_list (bool, optional): if ``True``, the list will be converted to a :class:`tensordict.utils.LinkedList`
|
3556
|
+
which will automatically update the tensordict when the list is modified. Default: ``False``.
|
3540
3557
|
"""
|
3541
3558
|
if not self.batch_size:
|
3542
3559
|
return self.data
|
3543
|
-
|
3544
|
-
ntd.tolist(
|
3560
|
+
result = [
|
3561
|
+
ntd.tolist(
|
3562
|
+
convert_tensors=convert_tensors,
|
3563
|
+
tolist_first=tolist_first,
|
3564
|
+
as_linked_list=as_linked_list,
|
3565
|
+
)
|
3545
3566
|
for ntd in self.unbind(0)
|
3546
3567
|
]
|
3568
|
+
if as_linked_list:
|
3569
|
+
return LinkedList(result, td=self)
|
3570
|
+
return result
|
3547
3571
|
|
3548
3572
|
def copy_(
|
3549
3573
|
self, src: NonTensorDataBase | NonTensorStack, non_blocking: bool = False
|
@@ -4055,7 +4079,13 @@ class NonTensorStack(LazyStackedTensorDict):
|
|
4055
4079
|
if not all(is_non_tensor(item) for item in self.tensordicts):
|
4056
4080
|
raise RuntimeError("All tensordicts must be non-tensors.")
|
4057
4081
|
|
4058
|
-
def tolist(
|
4082
|
+
def tolist(
|
4083
|
+
self,
|
4084
|
+
*,
|
4085
|
+
convert_tensors: bool = False,
|
4086
|
+
tolist_first: bool = False,
|
4087
|
+
as_linked_list: bool = False,
|
4088
|
+
):
|
4059
4089
|
"""Extracts the content of a :class:`tensordict.tensorclass.NonTensorStack` in a nested list.
|
4060
4090
|
|
4061
4091
|
Keyword Args:
|
@@ -4063,6 +4093,8 @@ class NonTensorStack(LazyStackedTensorDict):
|
|
4063
4093
|
Otherwise, they will remain as tensors. Default: ``False``.
|
4064
4094
|
tolist_first (bool, optional): if ``True``, the tensordict will be converted to a list first when
|
4065
4095
|
it has batch dimensions. Default: ``True``.
|
4096
|
+
as_linked_list (bool, optional): if ``True``, the list will be converted to a :class:`tensordict.utils.LinkedList`
|
4097
|
+
which will automatically update the tensordict when the list is modified. Default: ``False``.
|
4066
4098
|
|
4067
4099
|
Examples:
|
4068
4100
|
>>> from tensordict import NonTensorData
|
@@ -4075,10 +4107,17 @@ class NonTensorStack(LazyStackedTensorDict):
|
|
4075
4107
|
|
4076
4108
|
"""
|
4077
4109
|
iterator = self.tensordicts if self.stack_dim == 0 else self.unbind(0)
|
4078
|
-
|
4079
|
-
td.tolist(
|
4110
|
+
result = [
|
4111
|
+
td.tolist(
|
4112
|
+
convert_tensors=convert_tensors,
|
4113
|
+
tolist_first=tolist_first,
|
4114
|
+
as_linked_list=as_linked_list,
|
4115
|
+
)
|
4080
4116
|
for td in iterator
|
4081
4117
|
]
|
4118
|
+
if as_linked_list:
|
4119
|
+
return LinkedList(result, td=self)
|
4120
|
+
return result
|
4082
4121
|
|
4083
4122
|
def maybe_to_stack(self):
|
4084
4123
|
"""Placeholder for interchangeability between stack and non-stack of non-tensors."""
|
@@ -4152,8 +4191,13 @@ class NonTensorStack(LazyStackedTensorDict):
|
|
4152
4191
|
retain_none: bool = True,
|
4153
4192
|
convert_tensors: bool = False,
|
4154
4193
|
tolist_first: bool = False,
|
4194
|
+
as_linked_list: bool = False,
|
4155
4195
|
) -> dict[str, Any]:
|
4156
|
-
return self.tolist(
|
4196
|
+
return self.tolist(
|
4197
|
+
convert_tensors=convert_tensors,
|
4198
|
+
tolist_first=tolist_first,
|
4199
|
+
as_linked_list=as_linked_list,
|
4200
|
+
)
|
4157
4201
|
|
4158
4202
|
def to_tensordict(self, *, retain_none: bool | None = None):
|
4159
4203
|
return self
|
@@ -4391,6 +4435,11 @@ class NonTensorStack(LazyStackedTensorDict):
|
|
4391
4435
|
_BREAK_ON_MEMMAP = False
|
4392
4436
|
memmap = True
|
4393
4437
|
try:
|
4438
|
+
if not is_tensor_collection(value):
|
4439
|
+
if isinstance(value, list):
|
4440
|
+
value = NonTensorStack(*value)
|
4441
|
+
else:
|
4442
|
+
value = NonTensorData(value)
|
4394
4443
|
super().__setitem__(index, value)
|
4395
4444
|
if memmap:
|
4396
4445
|
self._memmap_(prefix=self._path_to_memmap, inplace=True)
|
tensordict/tensorclass.pyi
CHANGED
@@ -1012,6 +1012,7 @@ class TensorClass:
|
|
1012
1012
|
convert_nodes: bool = True,
|
1013
1013
|
convert_tensors: bool = False,
|
1014
1014
|
tolist_first: bool = False,
|
1015
|
+
as_linked_list: bool = False,
|
1015
1016
|
) -> list[Any]: ...
|
1016
1017
|
def numpy(self): ...
|
1017
1018
|
def to_namedtuple(self, dest_cls: type | None = None): ...
|
tensordict/utils.py
CHANGED
@@ -1839,7 +1839,7 @@ def capture_non_tensor_stack(allow_none=False):
|
|
1839
1839
|
|
1840
1840
|
|
1841
1841
|
# list to stack constrol
|
1842
|
-
_DEFAULT_LIST_TO_STACK =
|
1842
|
+
_DEFAULT_LIST_TO_STACK = "1"
|
1843
1843
|
_LIST_TO_STACK = os.environ.get("LIST_TO_STACK")
|
1844
1844
|
|
1845
1845
|
|
@@ -1854,16 +1854,9 @@ class set_list_to_stack(_DecoratorContextManager):
|
|
1854
1854
|
If a list is assigned to a TensorDict without this context manager, it will be converted to a numpy array
|
1855
1855
|
and wrapped in a NonTensorData if it cannot be cast to a Tensor.
|
1856
1856
|
|
1857
|
-
Future Behavior:
|
1858
|
-
In version 0.10.0, lists will be automatically stacked by default.
|
1859
|
-
|
1860
1857
|
Args:
|
1861
1858
|
mode (bool): If True, enables list-to-stack conversion. If False, disables it.
|
1862
1859
|
|
1863
|
-
.. warning::
|
1864
|
-
A FutureWarning will be raised if a list is assigned to a TensorDict without setting this context manager
|
1865
|
-
or the global flag, indicating that the behavior will change in the future.
|
1866
|
-
|
1867
1860
|
Example:
|
1868
1861
|
>>> with set_list_to_stack(True):
|
1869
1862
|
... td = TensorDict(a=[torch.zeros(()), torch.ones(())], batch_size=2)
|
@@ -1908,9 +1901,6 @@ def list_to_stack(allow_none=False):
|
|
1908
1901
|
Returns the current setting for list-to-stack conversion. If the setting is not defined and `allow_none`
|
1909
1902
|
is True, it returns None. Otherwise, it returns the default setting.
|
1910
1903
|
|
1911
|
-
Future Behavior:
|
1912
|
-
The default behavior will change in version 0.10.0 to automatically stack lists.
|
1913
|
-
|
1914
1904
|
Args:
|
1915
1905
|
allow_none (bool): If True, allows the function to return None if the setting is not defined.
|
1916
1906
|
|
@@ -2930,3 +2920,78 @@ if importlib.util.find_spec("orjson") is not None:
|
|
2930
2920
|
set_json_backend("orjson")
|
2931
2921
|
else:
|
2932
2922
|
set_json_backend("json")
|
2923
|
+
|
2924
|
+
|
2925
|
+
class LinkedList(list):
|
2926
|
+
"""A thin wrapper around a list that automatically updates a tensordict when the list is modified."""
|
2927
|
+
|
2928
|
+
def __init__(self, *args, td: TensorDictBase, **kwargs):
|
2929
|
+
super().__init__(*args, **kwargs)
|
2930
|
+
self._td = weakref.ref(td)
|
2931
|
+
|
2932
|
+
def __setitem__(self, key, value):
|
2933
|
+
super().__setitem__(key, value)
|
2934
|
+
td = self._td()
|
2935
|
+
if td is not None:
|
2936
|
+
td[key] = value
|
2937
|
+
|
2938
|
+
def append(self, object: Any) -> None:
|
2939
|
+
self._td = lambda: None
|
2940
|
+
return super().append(object)
|
2941
|
+
|
2942
|
+
def extend(self, object: Any) -> None:
|
2943
|
+
self._td = lambda: None
|
2944
|
+
return super().extend(object)
|
2945
|
+
|
2946
|
+
def insert(self, index: int, object: Any) -> None:
|
2947
|
+
self._td = lambda: None
|
2948
|
+
return super().insert(index, object)
|
2949
|
+
|
2950
|
+
def pop(self, index: int = -1) -> Any:
|
2951
|
+
self._td = lambda: None
|
2952
|
+
return super().pop(index)
|
2953
|
+
|
2954
|
+
def remove(self, value: Any) -> None:
|
2955
|
+
self._td = lambda: None
|
2956
|
+
return super().remove(value)
|
2957
|
+
|
2958
|
+
def clear(self) -> None:
|
2959
|
+
self._td = lambda: None
|
2960
|
+
return super().clear()
|
2961
|
+
|
2962
|
+
def __delitem__(self, index: int) -> None:
|
2963
|
+
self._td = lambda: None
|
2964
|
+
return super().__delitem__(index)
|
2965
|
+
|
2966
|
+
def __repr__(self) -> str:
|
2967
|
+
return f"LinkedList({super().__repr__()})"
|
2968
|
+
|
2969
|
+
def __str__(self) -> str:
|
2970
|
+
return f"LinkedList({super().__str__()})"
|
2971
|
+
|
2972
|
+
def __eq__(self, other: Any) -> bool:
|
2973
|
+
return list(self) == other
|
2974
|
+
|
2975
|
+
def __ne__(self, other: Any) -> bool:
|
2976
|
+
return list(self) != other
|
2977
|
+
|
2978
|
+
def __getstate__(self) -> object:
|
2979
|
+
return list(self).__getstate__()
|
2980
|
+
|
2981
|
+
def __iadd__(self, other: Any) -> Any:
|
2982
|
+
self._td = lambda: None
|
2983
|
+
return super().__iadd__(other)
|
2984
|
+
|
2985
|
+
def __imul__(self, other: Any) -> Any:
|
2986
|
+
self._td = lambda: None
|
2987
|
+
return super().__imul__(other)
|
2988
|
+
|
2989
|
+
|
2990
|
+
# register LinkedList in PyTree
|
2991
|
+
torch.utils._pytree.register_pytree_node(
|
2992
|
+
LinkedList,
|
2993
|
+
torch.utils._pytree._list_flatten,
|
2994
|
+
torch.utils._pytree._list_unflatten,
|
2995
|
+
serialized_type_name="builtins.list",
|
2996
|
+
flatten_with_keys_fn=torch.utils._pytree._list_flatten_with_keys,
|
2997
|
+
)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
tensordict/_C.so,sha256=WUwcuTM-zrTulwGCsp2Ph8cOHJlEEmE_4NxtDB9DRzQ,201912
|
2
2
|
tensordict/__init__.py,sha256=mTWC5rhIuOBGtw-cnr6I3S0gREM28oFY3BTZVAF5gho,1909
|
3
3
|
tensordict/_contextlib.py,sha256=rhznpxNoWVstg7dOmHGG9V3QguEnpmGoMJeQer6EHJw,10913
|
4
|
-
tensordict/_lazy.py,sha256
|
4
|
+
tensordict/_lazy.py,sha256=-4t4glHLFDKeTjmeTYRJcSmYu3-znwmLFUGNQfvLQCQ,180253
|
5
5
|
tensordict/_nestedkey.py,sha256=DG2owzUNtMaMOUCg7vNn0AKguBQpa4OFsnJ-V5kTqz4,776
|
6
6
|
tensordict/_nestedkey.pyi,sha256=oJmBSaDSHFaYNDsI0GxFIjx4CG6Bi1Pf1jbIe3xynrM,321
|
7
7
|
tensordict/_pytree.py,sha256=-3zVvgrQsWDPqUfcenMWGXlaI_oCrt1uOKW9K6sAnE8,7718
|
@@ -9,15 +9,15 @@ tensordict/_reductions.py,sha256=o3IJL4gmzxSayPI2fwGL3K270i4ldblFE3i0S0MZhxo,637
|
|
9
9
|
tensordict/_td.py,sha256=yafcNAU26miFrrfEAac4-SCDWWiAjNUJfQ9PQwgouk8,191692
|
10
10
|
tensordict/_torch_func.py,sha256=4SSzo6R-hKamI7zvu13uCiKc3yveVrGEPq_6_g9ItbE,30535
|
11
11
|
tensordict/_unbatched.py,sha256=4A7R89yzw1qDEE1AuuKcJUGKv0nUi27bujGOuMf7_xI,7859
|
12
|
-
tensordict/_version.py,sha256=
|
13
|
-
tensordict/base.py,sha256=
|
12
|
+
tensordict/_version.py,sha256=UOUBlS-jOrVuRa4rjxdpOPF3ifSax-YnJ287lMJDi60,562
|
13
|
+
tensordict/base.py,sha256=epJJo1jkqnt3OWJoGdQv4I6Cioc_GSaCibAM5iGO2VY,570582
|
14
14
|
tensordict/functional.py,sha256=T1Mu8puPVlKXX6yCXla8D56jTUHSk_Q0TWLefA2l8u4,21612
|
15
15
|
tensordict/memmap.py,sha256=cNWIZao27jJbm2leTjslFPtwdBHLsLdgMJyQIAdxSCw,40356
|
16
|
-
tensordict/persistent.py,sha256=
|
17
|
-
tensordict/tensorclass.py,sha256=
|
18
|
-
tensordict/tensorclass.pyi,sha256=
|
16
|
+
tensordict/persistent.py,sha256=bh3IgWDdcRH5byrDa5VgaSE3_CeifCAsVx7GZQlYwFk,53823
|
17
|
+
tensordict/tensorclass.py,sha256=qyQhlYYs_bH5ZZTeuTWGJGIHdeW1HS72MOda8RLgguI,158749
|
18
|
+
tensordict/tensorclass.pyi,sha256=O-uy53KtIobBCBHc-RR9KbzFe8HUuhKw9dVkjIbDq60,36845
|
19
19
|
tensordict/tensordict.py,sha256=itgrIY3BaQbrfx09IGVND4tr7kWEU85AFBZWUyLVEXY,936
|
20
|
-
tensordict/utils.py,sha256=
|
20
|
+
tensordict/utils.py,sha256=BIEzKoKXu4jZHDTx3BY7UV-lm3Um7XnkW4OisoIa6-w,95221
|
21
21
|
tensordict/_C/__init__.pyi,sha256=13Uw6DBr5yALVmGcEQM41EBsNJsr4Cfqsy_pPajywlw,310
|
22
22
|
tensordict/_tensordict/__init__.py,sha256=l6KnDBbH5jTGdds3R_v4woJCM-fJ7Iwl3iEDOQ1zwR0,451
|
23
23
|
tensordict/nn/__init__.py,sha256=9QRvGrYR2mlq12AH0y4F0TwQWRIzjb8fw8Jmf29oZ1c,1301
|
@@ -37,8 +37,8 @@ tensordict/nn/distributions/truncated_normal.py,sha256=Q_pc3h7ZeM3LtmvK5fO0H6acJ
|
|
37
37
|
tensordict/nn/distributions/utils.py,sha256=fX6NUeNnWKK6kDdOp8NTM43Lls3vMCF5h-S2teVZw3E,1226
|
38
38
|
tensordict/prototype/__init__.py,sha256=qgMM907GHcCaf_8kG4hdhkymRx4X6zZnduthh6bxT3A,267
|
39
39
|
tensordict/prototype/fx.py,sha256=XCGyfEQT1bHijPYpB7A4rDY_B8WQoaBsYfAdadaAPAo,7749
|
40
|
-
tensordict_nightly-2025.7.
|
41
|
-
tensordict_nightly-2025.7.
|
42
|
-
tensordict_nightly-2025.7.
|
43
|
-
tensordict_nightly-2025.7.
|
44
|
-
tensordict_nightly-2025.7.
|
40
|
+
tensordict_nightly-2025.7.23.dist-info/licenses/LICENSE,sha256=xdjS4_xk-IwnLuIFCvTYTl9Y8aXRejqpmke3dGam_nI,1098
|
41
|
+
tensordict_nightly-2025.7.23.dist-info/METADATA,sha256=Pw9kpL-WdhZHlsuS3tryO87JAvg_plLtd16Vljmd3gw,9267
|
42
|
+
tensordict_nightly-2025.7.23.dist-info/WHEEL,sha256=dlR7oKjy_S3Zd2FTfzEDqi2lKjPQsnoR5WocX8MvAXs,112
|
43
|
+
tensordict_nightly-2025.7.23.dist-info/top_level.txt,sha256=axO0i2gNp06_Jr3wSBWNN_3YgtVweAthtL48h9lMc4k,16
|
44
|
+
tensordict_nightly-2025.7.23.dist-info/RECORD,,
|
File without changes
|
{tensordict_nightly-2025.7.17.dist-info → tensordict_nightly-2025.7.23.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{tensordict_nightly-2025.7.17.dist-info → tensordict_nightly-2025.7.23.dist-info}/top_level.txt
RENAMED
File without changes
|