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 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+g987c3d9.d20250717'
21
- __version_tuple__ = version_tuple = (0, 0, 'post1', 'g987c3d9.d20250717')
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 out.data if hasattr(out, "data") else out.tolist()
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 out.data if not isinstance(out, NonTensorStack) else out.tolist()
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(self, *, convert_tensors: bool = False, tolist_first: bool = False):
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
- return [
3544
- ntd.tolist(convert_tensors=convert_tensors, tolist_first=tolist_first)
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(self, *, convert_tensors: bool = False, tolist_first: bool = False):
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
- return [
4079
- td.tolist(convert_tensors=convert_tensors, tolist_first=tolist_first)
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(convert_tensors=convert_tensors)
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)
@@ -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 = None
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tensordict-nightly
3
- Version: 2025.7.17
3
+ Version: 2025.7.23
4
4
  Summary: TensorDict is a pytorch dedicated tensor container.
5
5
  Author-email: Vincent Moens <vincentmoens@gmail.com>
6
6
  License: BSD
@@ -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=FlvSnLiImjcR2DrPpC560qft38rEPo4_s4_8m9M0l7Y,180234
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=dUkyUd0A1eshotGm7Kr7uNL6YYKHj7EweIdE_dhbGgg,562
13
- tensordict/base.py,sha256=3E5piYdG6eo3W9oSyir_Y9fYYJUkUgfPIAU_H_kwSPA,571253
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=pqS16_51a16P2w9paKhuthJeKE18h65X-QAYTnqQx7w,53804
17
- tensordict/tensorclass.py,sha256=JZQsm4x-zaaafl4i2i9Qux58cceiVCvZU54PBuzkxkQ,157147
18
- tensordict/tensorclass.pyi,sha256=askY1nP9odUZAlhspg5zHLVWASe0O1Onrd1eD4kTA74,36807
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=aWMSEiTm0QicKEdxaMlWXCFWQ0h05IpDm-tJEU4Wl4U,93506
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.17.dist-info/licenses/LICENSE,sha256=xdjS4_xk-IwnLuIFCvTYTl9Y8aXRejqpmke3dGam_nI,1098
41
- tensordict_nightly-2025.7.17.dist-info/METADATA,sha256=sXIBeER6YzobwVGZFP1RQkmPnejSbJ3LD15OY_Y6YZg,9267
42
- tensordict_nightly-2025.7.17.dist-info/WHEEL,sha256=dlR7oKjy_S3Zd2FTfzEDqi2lKjPQsnoR5WocX8MvAXs,112
43
- tensordict_nightly-2025.7.17.dist-info/top_level.txt,sha256=axO0i2gNp06_Jr3wSBWNN_3YgtVweAthtL48h9lMc4k,16
44
- tensordict_nightly-2025.7.17.dist-info/RECORD,,
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,,