returnn 1.20250421.5132__tar.gz → 1.20250422.113157__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.

Potentially problematic release.


This version of returnn might be problematic. Click here for more details.

Files changed (476) hide show
  1. {returnn-1.20250421.5132/returnn.egg-info → returnn-1.20250422.113157}/PKG-INFO +1 -1
  2. returnn-1.20250422.113157/_setup_info_generated.py +2 -0
  3. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/basic.py +3 -1
  4. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/util/vocabulary.py +20 -0
  5. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/basic.py +39 -28
  6. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/file_cache.py +101 -42
  7. {returnn-1.20250421.5132 → returnn-1.20250422.113157/returnn.egg-info}/PKG-INFO +1 -1
  8. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/dump-dataset.py +12 -6
  9. returnn-1.20250421.5132/_setup_info_generated.py +0 -2
  10. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/.editorconfig +0 -0
  11. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/.gitignore +0 -0
  12. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/.gitmodules +0 -0
  13. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/.kateconfig +0 -0
  14. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/CHANGELOG.md +0 -0
  15. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/CODEOWNERS +0 -0
  16. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/CONTRIBUTING.md +0 -0
  17. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/LICENSE +0 -0
  18. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/MANIFEST.in +0 -0
  19. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/README.rst +0 -0
  20. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/__init__.py +0 -0
  21. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/12AX.cluster_map +0 -0
  22. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/_setup_returnn_env.py +0 -0
  23. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-fwd.config +0 -0
  24. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-horovod-mpi.py +0 -0
  25. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-horovod-mpi.py.sh +0 -0
  26. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-horovod-mpi.sh +0 -0
  27. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-hyper-param-tuning.config +0 -0
  28. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-iter-dataset.py +0 -0
  29. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-list-devices.py +0 -0
  30. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-lua-torch-layer.config +0 -0
  31. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-pretrain.config +0 -0
  32. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-record-and-push-to-webserver.py +0 -0
  33. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-returnn-as-framework.py +0 -0
  34. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-rf-pt-benchmark.py +0 -0
  35. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-rf.config +0 -0
  36. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-rhn-enwik8.config +0 -0
  37. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-sprint-interface.py +0 -0
  38. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-att-copy.config +0 -0
  39. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-attention.config +0 -0
  40. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  41. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  42. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-enc-dec.config +0 -0
  43. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-hard-att-copy.config +0 -0
  44. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-lstm-benchmark.py +0 -0
  45. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  46. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  47. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-native-lstm.12ax.config +0 -0
  48. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  49. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  50. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  51. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  52. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  53. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-rec-self-att.config +0 -0
  54. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-search-compiled-graph.py +0 -0
  55. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  56. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-timit-lstm-ctc.config +0 -0
  57. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-torch.config +0 -0
  58. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  59. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/demo.sh +0 -0
  60. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  61. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  62. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  63. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/README.txt +0 -0
  64. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/chars.txt +0 -0
  65. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/config_demo +0 -0
  66. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/config_fwd +0 -0
  67. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/config_real +0 -0
  68. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  69. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/decode.py +0 -0
  70. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  71. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/go.sh +0 -0
  72. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/lines.txt +0 -0
  73. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/split/eval.txt +0 -0
  74. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/split/train.txt +0 -0
  75. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/IAM/split/valid.txt +0 -0
  76. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/README.md +0 -0
  77. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  78. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/artificial/forwardconfig +0 -0
  79. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/artificial/go.sh +0 -0
  80. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/artificial/trainconfig +0 -0
  81. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  82. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  83. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  84. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  85. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/pyproject.toml +0 -0
  86. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/requirements.txt +0 -0
  87. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/__init__.py +0 -0
  88. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/__main__.py +0 -0
  89. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/__old_mod_loader__.py +0 -0
  90. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/__setup__.py +0 -0
  91. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/config.py +0 -0
  92. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/__init__.py +0 -0
  93. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/audio.py +0 -0
  94. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/bundle_file.py +0 -0
  95. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/cached.py +0 -0
  96. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/cached2.py +0 -0
  97. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/distrib_files.py +0 -0
  98. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/generating.py +0 -0
  99. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/hdf.py +0 -0
  100. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/lm.py +0 -0
  101. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/map.py +0 -0
  102. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/meta.py +0 -0
  103. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/multi_proc.py +0 -0
  104. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/normalization_data.py +0 -0
  105. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/numpy_dump.py +0 -0
  106. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/postprocessing.py +0 -0
  107. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/raw_wav.py +0 -0
  108. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/sprint.py +0 -0
  109. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/stereo.py +0 -0
  110. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/text_dict.py +0 -0
  111. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/util/__init__.py +0 -0
  112. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/util/feature_extraction.py +0 -0
  113. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/datasets/util/strings.py +0 -0
  114. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/engine/__init__.py +0 -0
  115. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/engine/base.py +0 -0
  116. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/engine/batch.py +0 -0
  117. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/__init__.py +0 -0
  118. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/__main__.py +0 -0
  119. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  120. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  121. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  122. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  123. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  124. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  125. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  126. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  127. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  128. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  129. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  130. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  131. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  132. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  133. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  134. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  135. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  136. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  137. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  138. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  139. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  140. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  141. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  142. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  143. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  144. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/__init__.py +0 -0
  145. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/graph_editor/README.md +0 -0
  146. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/graph_editor/__init__.py +0 -0
  147. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/graph_editor/edit.py +0 -0
  148. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/graph_editor/reroute.py +0 -0
  149. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/graph_editor/select.py +0 -0
  150. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/graph_editor/subgraph.py +0 -0
  151. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/graph_editor/transform.py +0 -0
  152. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/extern/graph_editor/util.py +0 -0
  153. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/forward_iface.py +0 -0
  154. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/__init__.py +0 -0
  155. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_backend.py +0 -0
  156. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_cache.py +0 -0
  157. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_native/__init__.py +0 -0
  158. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_native/backend.cpp +0 -0
  159. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_native/backend.hpp +0 -0
  160. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_native/module.cpp +0 -0
  161. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_native/module.hpp +0 -0
  162. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_native/py_utils.hpp +0 -0
  163. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  164. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  165. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_numpy_backend.py +0 -0
  166. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_random_journal.py +0 -0
  167. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/_utils.py +0 -0
  168. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/array_.py +0 -0
  169. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/attention.py +0 -0
  170. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/audio/__init__.py +0 -0
  171. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/audio/mel.py +0 -0
  172. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/audio/specaugment.py +0 -0
  173. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/backend.py +0 -0
  174. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/build_from_dict.py +0 -0
  175. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/cond.py +0 -0
  176. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/const.py +0 -0
  177. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/container.py +0 -0
  178. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/control_flow_ctx.py +0 -0
  179. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/conv.py +0 -0
  180. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/conversions/__init__.py +0 -0
  181. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
  182. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/conversions/hf_llama.py +0 -0
  183. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/conversions/torch_nn.py +0 -0
  184. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/decoder/__init__.py +0 -0
  185. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/decoder/transformer.py +0 -0
  186. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/device.py +0 -0
  187. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/dims.py +0 -0
  188. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/dropout.py +0 -0
  189. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/dtype.py +0 -0
  190. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/encoder/__init__.py +0 -0
  191. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/encoder/base.py +0 -0
  192. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/encoder/conformer.py +0 -0
  193. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/encoder/conformer_v2.py +0 -0
  194. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/encoder/e_branchformer.py +0 -0
  195. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/encoder/transformer.py +0 -0
  196. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/gradient.py +0 -0
  197. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/graph.py +0 -0
  198. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/hooks.py +0 -0
  199. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/init.py +0 -0
  200. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/label_smoothing.py +0 -0
  201. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/linear.py +0 -0
  202. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/loop.py +0 -0
  203. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/loss.py +0 -0
  204. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/math_.py +0 -0
  205. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/matmul.py +0 -0
  206. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/module.py +0 -0
  207. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/nested.py +0 -0
  208. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/normalization.py +0 -0
  209. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/parameter.py +0 -0
  210. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/parametrizations.py +0 -0
  211. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/parametrize.py +0 -0
  212. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/piecewise_linear.py +0 -0
  213. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/rand.py +0 -0
  214. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/rec.py +0 -0
  215. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/reduce.py +0 -0
  216. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/run_ctx.py +0 -0
  217. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/signal.py +0 -0
  218. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/state.py +0 -0
  219. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/stepwise_scheduler.py +0 -0
  220. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/tensor_array.py +0 -0
  221. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/frontend/types.py +0 -0
  222. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/import_/__init__.py +0 -0
  223. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/import_/common.py +0 -0
  224. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/import_/git.py +0 -0
  225. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/import_/import_.py +0 -0
  226. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/learning_rate_control.py +0 -0
  227. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/log.py +0 -0
  228. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/native_op.cpp +0 -0
  229. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/native_op.py +0 -0
  230. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/pretrain.py +0 -0
  231. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/sprint/__init__.py +0 -0
  232. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/sprint/cache.py +0 -0
  233. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/sprint/control.py +0 -0
  234. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/sprint/error_signals.py +0 -0
  235. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/sprint/extern_interface.py +0 -0
  236. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/sprint/interface.py +0 -0
  237. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/README.md +0 -0
  238. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/__init__.py +0 -0
  239. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/_dim_extra.py +0 -0
  240. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/_tensor_extra.py +0 -0
  241. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/_tensor_mixin_base.py +0 -0
  242. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/_tensor_op_overloads.py +0 -0
  243. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/control_flow_ctx.py +0 -0
  244. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/dim.py +0 -0
  245. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/marked_dim.py +0 -0
  246. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/tensor.py +0 -0
  247. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/tensor_dict.py +0 -0
  248. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tensor/utils.py +0 -0
  249. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/__init__.py +0 -0
  250. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/compat.py +0 -0
  251. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/data_pipeline.py +0 -0
  252. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/distributed.py +0 -0
  253. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/engine.py +0 -0
  254. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/README.md +0 -0
  255. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/__init__.py +0 -0
  256. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/_backend.py +0 -0
  257. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/_utils.py +0 -0
  258. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/cond.py +0 -0
  259. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  260. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  261. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/dims.py +0 -0
  262. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/layer.py +0 -0
  263. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/loop.py +0 -0
  264. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/make_layer.py +0 -0
  265. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  266. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  267. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  268. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_low_level/__init__.py +0 -0
  269. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/frontend_low_level/_backend.py +0 -0
  270. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/horovod.py +0 -0
  271. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/hyper_param_tuning.py +0 -0
  272. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/layers/__init__.py +0 -0
  273. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/layers/base.py +0 -0
  274. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/layers/basic.py +0 -0
  275. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/layers/rec.py +0 -0
  276. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/layers/segmental_model.py +0 -0
  277. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/layers/signal_processing.py +0 -0
  278. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/layers/variable.py +0 -0
  279. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/native_op.py +0 -0
  280. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/network.py +0 -0
  281. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/sprint.py +0 -0
  282. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/updater.py +0 -0
  283. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/util/__init__.py +0 -0
  284. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/util/basic.py +0 -0
  285. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/util/data.py +0 -0
  286. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/util/gradient_checkpoint.py +0 -0
  287. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/util/ken_lm.py +0 -0
  288. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/tf/util/open_fst.py +0 -0
  289. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/README.md +0 -0
  290. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/__init__.py +0 -0
  291. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/data/__init__.py +0 -0
  292. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/data/extern_data.py +0 -0
  293. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/data/pipeline.py +0 -0
  294. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/data/queued_data_iter.py +0 -0
  295. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  296. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/data/tensor_utils.py +0 -0
  297. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/distributed.py +0 -0
  298. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/engine.py +0 -0
  299. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/frontend/__init__.py +0 -0
  300. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/frontend/_backend.py +0 -0
  301. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/frontend/_rand.py +0 -0
  302. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/frontend/bridge.py +0 -0
  303. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/frontend/raw_ops.py +0 -0
  304. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/optim/README.md +0 -0
  305. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/optim/__init__.py +0 -0
  306. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/optim/lion.py +0 -0
  307. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/updater.py +0 -0
  308. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/README.md +0 -0
  309. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/__init__.py +0 -0
  310. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/array_.py +0 -0
  311. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/debug_inf_nan.py +0 -0
  312. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/diagnose_gpu.py +0 -0
  313. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/exception_helper.py +0 -0
  314. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/gradient_checkpoint.py +0 -0
  315. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/module.py +0 -0
  316. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/torch/util/scaled_gradient.py +0 -0
  317. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/__init__.py +0 -0
  318. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/better_exchook.py +0 -0
  319. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/bpe.py +0 -0
  320. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/debug.py +0 -0
  321. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/debug_helpers.py +0 -0
  322. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/fsa.py +0 -0
  323. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/literal_py_to_pickle.py +0 -0
  324. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/lru_cache.py +0 -0
  325. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/math.py +0 -0
  326. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  327. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/native_code_compiler.py +0 -0
  328. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/pprint.py +0 -0
  329. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/py-to-pickle.cpp +0 -0
  330. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/py_ext_mod_compiler.py +0 -0
  331. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/result_with_reason.py +0 -0
  332. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/sig_proc.py +0 -0
  333. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/task_system.py +0 -0
  334. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/train_proc_manager.py +0 -0
  335. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn/util/watch_memory.py +0 -0
  336. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn.egg-info/SOURCES.txt +0 -0
  337. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn.egg-info/dependency_links.txt +0 -0
  338. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn.egg-info/requires.txt +0 -0
  339. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/returnn.egg-info/top_level.txt +0 -0
  340. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/rnn.py +0 -0
  341. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/setup.cfg +0 -0
  342. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/setup.py +0 -0
  343. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/DummySprintExec.py +0 -0
  344. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm-inspection-profile.xml +0 -0
  345. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/.gitignore +0 -0
  346. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/.name +0 -0
  347. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  348. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  349. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  350. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  351. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  352. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/misc.xml +0 -0
  353. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/modules.xml +0 -0
  354. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/returnn.iml +0 -0
  355. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  356. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/_set_num_threads1.py +0 -0
  357. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/_setup_returnn_env.py +0 -0
  358. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/_setup_test_env.py +0 -0
  359. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/bpe-unicode-demo.codes +0 -0
  360. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/bpe-unicode-demo.vocab +0 -0
  361. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/lexicon_opt.fst +0 -0
  362. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/lexicon_opt.isyms +0 -0
  363. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/lexicon_opt.jpg +0 -0
  364. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/lexicon_opt.osyms +0 -0
  365. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/lint_common.py +0 -0
  366. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/pycharm-inspect.py +0 -0
  367. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/pylint.py +0 -0
  368. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/returnn-as-framework.py +0 -0
  369. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/rf_utils.py +0 -0
  370. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/spelling.dic +0 -0
  371. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_Config.py +0 -0
  372. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_Dataset.py +0 -0
  373. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_Fsa.py +0 -0
  374. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_GeneratingDataset.py +0 -0
  375. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_HDFDataset.py +0 -0
  376. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_LearningRateControl.py +0 -0
  377. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_Log.py +0 -0
  378. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_MultiProcDataset.py +0 -0
  379. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_Pretrain.py +0 -0
  380. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_ResNet.py +0 -0
  381. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_SprintDataset.py +0 -0
  382. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_SprintInterface.py +0 -0
  383. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TFEngine.py +0 -0
  384. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TFNativeOp.py +0 -0
  385. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TFNetworkLayer.py +0 -0
  386. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TFNetworkRecLayer.py +0 -0
  387. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TFNetworkSigProcLayer.py +0 -0
  388. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TFUpdater.py +0 -0
  389. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TFUtil.py +0 -0
  390. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TF_determinism.py +0 -0
  391. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TaskSystem.py +0 -0
  392. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TaskSystem_SharedMem.py +0 -0
  393. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_TranslationDataset.py +0 -0
  394. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_Util.py +0 -0
  395. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_demos.py +0 -0
  396. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_fork_exec.py +0 -0
  397. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_hdf_dump.py +0 -0
  398. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_array.py +0 -0
  399. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_attention.py +0 -0
  400. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_base.py +0 -0
  401. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_cond.py +0 -0
  402. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_const.py +0 -0
  403. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_container.py +0 -0
  404. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_conv.py +0 -0
  405. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_decoder_transformer.py +0 -0
  406. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_encoder_conformer.py +0 -0
  407. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_gradient.py +0 -0
  408. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_label_smoothing.py +0 -0
  409. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_loop.py +0 -0
  410. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_math.py +0 -0
  411. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_normalization.py +0 -0
  412. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_piecewise_linear.py +0 -0
  413. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_rec.py +0 -0
  414. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_reduce.py +0 -0
  415. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_rf_signal.py +0 -0
  416. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_tensor.py +0 -0
  417. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_threading.py +0 -0
  418. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_tools.py +0 -0
  419. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_torch_dataset.py +0 -0
  420. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_torch_engine.py +0 -0
  421. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_torch_frontend.py +0 -0
  422. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_torch_internal_frontend.py +0 -0
  423. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/test_torch_util.py +0 -0
  424. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tests/torch_utils.py +0 -0
  425. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/_setup_returnn_env.py +0 -0
  426. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/analyze-dataset-batches.py +0 -0
  427. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/bliss-collect-seq-lens.py +0 -0
  428. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/bliss-dump-text.py +0 -0
  429. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/bliss-get-segment-names.py +0 -0
  430. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/bliss-to-ogg-zip.py +0 -0
  431. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/bpe-create-lexicon.py +0 -0
  432. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/calculate-word-error-rate.py +0 -0
  433. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/cleanup-old-models.py +0 -0
  434. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/collect-orth-symbols.py +0 -0
  435. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/collect-words.py +0 -0
  436. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/compile_native_op.py +0 -0
  437. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/compile_tf_graph.py +0 -0
  438. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/debug-dump-search-scores.py +0 -0
  439. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/debug-plot-search-scores.py +0 -0
  440. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/dump-dataset-raw-strings.py +0 -0
  441. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/dump-forward-stats.py +0 -0
  442. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/dump-forward.py +0 -0
  443. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/dump-network-json.py +0 -0
  444. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/dump-pickle.py +0 -0
  445. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/extract_state_tying_from_dataset.py +0 -0
  446. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/get-attention-weights.py +0 -0
  447. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/get-best-model-epoch.py +0 -0
  448. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/hdf_dump.py +0 -0
  449. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/hdf_dump_translation_dataset.py +0 -0
  450. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/import-blocks-mt-model.py +0 -0
  451. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/import-t2t-mt-model.py +0 -0
  452. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/.gitignore +0 -0
  453. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/Makefile +0 -0
  454. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/README.md +0 -0
  455. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/example/README.md +0 -0
  456. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/example/libs_list +0 -0
  457. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  458. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
  459. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  460. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/example/state_vars_list +0 -0
  461. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  462. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/file.h +0 -0
  463. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  464. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  465. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/main.cc +0 -0
  466. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/rescorer.h +0 -0
  467. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/vocabulary.cc +0 -0
  468. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/lattice_rescorer/vocabulary.h +0 -0
  469. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/tf_avg_checkpoints.py +0 -0
  470. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/tf_inspect_checkpoint.py +0 -0
  471. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/tf_inspect_summary_log.py +0 -0
  472. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/torch_avg_checkpoints.py +0 -0
  473. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/torch_export_to_onnx.py +0 -0
  474. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/torch_inspect_checkpoint.py +0 -0
  475. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
  476. {returnn-1.20250421.5132 → returnn-1.20250422.113157}/tools/torch_scale_tuning.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20250421.5132
3
+ Version: 1.20250422.113157
4
4
  Summary: The RWTH extensible training framework for universal recurrent neural networks
5
5
  Home-page: https://github.com/rwth-i6/returnn/
6
6
  Author: Albert Zeyer
@@ -0,0 +1,2 @@
1
+ version = '1.20250422.113157'
2
+ long_version = '1.20250422.113157+git.731b3f5'
@@ -1116,7 +1116,9 @@ class Dataset:
1116
1116
 
1117
1117
  def serialize_data(self, key: str, data: numpy.ndarray) -> str:
1118
1118
  """
1119
- In case you have a :class:`Vocabulary`, just use :func:`Vocabulary.get_seq_labels`.
1119
+ This is deprecated, as this is slow!
1120
+ In case you have a :class:`Vocabulary`, just use :func:`Vocabulary.get_seq_labels`
1121
+ or :func:`Vocabulary.serialize_labels`.
1120
1122
 
1121
1123
  :param key: e.g. "classes". self.labels[key] should be set
1122
1124
  :param numpy.ndarray data: 0D or 1D
@@ -339,6 +339,26 @@ class Vocabulary:
339
339
  labels = self.labels
340
340
  return " ".join(map(labels.__getitem__, seq))
341
341
 
342
+ def serialize_labels(self, data: numpy.ndarray) -> str:
343
+ """
344
+ Like :func:`get_seq_labels` but a bit more generic, to not just work on sequences,
345
+ but any shape.
346
+
347
+ Also like :func:`Dataset.serialize_data` but even slightly more generic.
348
+ """
349
+ if data.ndim == 0:
350
+ return self.id_to_label(data.item())
351
+ if data.ndim == 1:
352
+ return self.get_seq_labels(data)
353
+
354
+ def _s(d_: numpy.ndarray) -> str:
355
+ assert d_.ndim >= 1
356
+ if d_.ndim == 1:
357
+ return ",".join(self._labels[i] for i in d_)
358
+ return ",".join(f"[{_s(d_[t])}]" for t in range(d_.shape[0]))
359
+
360
+ return _s(data)
361
+
342
362
 
343
363
  class BytePairEncoding(Vocabulary):
344
364
  """
@@ -3153,42 +3153,53 @@ class LockFile:
3153
3153
  Acquires the lock.
3154
3154
  """
3155
3155
  import time
3156
- import errno
3157
3156
 
3158
3157
  wait_count = 0
3159
3158
  while True:
3160
- # Try to create directory if it does not exist.
3161
- try:
3162
- os.makedirs(self.directory)
3163
- except OSError as exc:
3164
- # Possible errors:
3165
- # ENOENT (No such file or directory), e.g. if some parent directory was deleted.
3166
- # EEXIST (File exists), if the dir already exists.
3167
- if exc.errno not in [errno.ENOENT, errno.EEXIST]:
3168
- # Other error, so reraise.
3169
- # Common ones are e.g.:
3170
- # ENOSPC (No space left on device)
3171
- # EACCES (Permission denied)
3172
- raise
3173
- # Ignore those errors.
3159
+ if self.try_lock():
3160
+ break
3161
+ # We did not get the lock. Wait a bit, and then retry.
3162
+ time.sleep(min(wait_count * 0.1, 1.0))
3163
+ wait_count += 1
3164
+ if wait_count == 10:
3165
+ print("Waiting for lock-file: %s" % self.lockfile)
3166
+
3167
+ def try_lock(self) -> bool:
3168
+ """
3169
+ Tries to acquire the lock.
3170
+
3171
+ :return: whether the lock was acquired
3172
+ """
3173
+
3174
+ import errno
3175
+
3176
+ # Try to create directory if it does not exist.
3177
+ try:
3178
+ os.makedirs(self.directory)
3179
+ except OSError as exc:
3180
+ # Possible errors:
3181
+ # ENOENT (No such file or directory), e.g. if some parent directory was deleted.
3182
+ # EEXIST (File exists), if the dir already exists.
3183
+ if exc.errno not in [errno.ENOENT, errno.EEXIST]:
3184
+ # Other error, so reraise.
3185
+ # Common ones are e.g.:
3186
+ # ENOSPC (No space left on device)
3187
+ # EACCES (Permission denied)
3188
+ raise
3189
+ # Ignore those errors.
3190
+
3191
+ for _ in range(2):
3174
3192
  # Now try to create the lock.
3175
3193
  try:
3176
3194
  self.fd = os.open(self.lockfile, os.O_CREAT | os.O_EXCL | os.O_RDWR)
3177
- return
3195
+ return True
3178
3196
  except OSError as exc:
3179
- # Possible errors:
3180
- # ENOENT (No such file or directory), e.g. if the directory was deleted.
3181
- # EEXIST (File exists), if the lock already exists.
3182
3197
  if exc.errno not in [errno.ENOENT, errno.EEXIST]:
3183
- raise # Other error, so reraise.
3184
- # We did not get the lock.
3185
- # Check if it is a really old one.
3186
- self.maybe_remove_old_lockfile()
3187
- # Wait a bit, and then retry.
3188
- time.sleep(1)
3189
- wait_count += 1
3190
- if wait_count == 10:
3191
- print("Waiting for lock-file: %s" % self.lockfile)
3198
+ raise # raise any other error
3199
+ # We did not get the lock.
3200
+ # Remove potential stale lockfile before retrying.
3201
+ self.maybe_remove_old_lockfile()
3202
+ return False
3192
3203
 
3193
3204
  def unlock(self):
3194
3205
  """
@@ -126,11 +126,8 @@ class FileCache:
126
126
  raise e
127
127
  if last_error is not None:
128
128
  raise last_error
129
- info_file = self._get_info_filename(dst_filename)
130
- os.utime(dst_filename, None)
131
- os.utime(info_file, None)
132
129
  # protect info file from tempreaper, which looks at the mtime
133
- self._touch_files_thread.files_extend([dst_filename, info_file])
130
+ self._touch_files_thread.files_extend([dst_filename, self._get_info_filename(dst_filename)])
134
131
  return dst_filename
135
132
 
136
133
  def release_files(self, filenames: Union[str, Iterable[str]]):
@@ -181,6 +178,9 @@ class FileCache:
181
178
  elif self._is_info_filename(fn):
182
179
  # skip keepalive files, they are processed together with the file they guard
183
180
  continue
181
+ elif self._is_lock_filename(fn):
182
+ # skip lock files, removing them would accidentally release locks
183
+ continue
184
184
  try:
185
185
  f_stat = os.stat(fn)
186
186
  except Exception as exc:
@@ -203,45 +203,85 @@ class FileCache:
203
203
  for mtime, neg_size, fn in all_files:
204
204
  size = -neg_size
205
205
  delete_reason = None
206
- if cur_time - mtime > self._cleanup_files_always_older_than_days * 60 * 60 * 24:
207
- delete_reason = f"File is {(cur_time - mtime) / 60 / 60 / 24:.1f} days old"
208
- else:
209
- reached_more_recent_files = True
210
- if not delete_reason and need_at_least_free_space_size > cur_expected_free:
211
- # Still must delete some files.
212
- if cur_time - mtime > cur_used_time_threshold:
213
- delete_reason = f"Still need more space, file is {(cur_time - mtime) / 60 / 60:.1f} hours old"
214
- else:
215
- raise Exception(
216
- f"We cannot free enough space on {self.cache_directory}.\n"
217
- f"Needed: {human_bytes_size(need_at_least_free_space_size)},\n"
218
- f"currently available: {human_bytes_size(cur_expected_free)},\n"
219
- f"oldest file is still too recent: {fn}.\n"
220
- f"{report_size_str}"
221
- )
222
- if not delete_reason and want_free_space_size > cur_expected_free:
223
- if cur_time - mtime > self._cleanup_files_wanted_older_than_days * 60 * 60 * 24:
224
- delete_reason = f"Still want more space, file is {(cur_time - mtime) / 60 / 60:.1f} hours old"
225
- else:
226
- # All further files are even more recent, so we would neither cleanup them,
227
- # so we can also just stop now.
228
- break
229
206
 
230
- if delete_reason:
231
- cur_expected_free += size
232
- print(
233
- f"FileCache: Delete file {fn}, size {human_bytes_size(size)}. {delete_reason}."
234
- f" After deletion, have {human_bytes_size(cur_expected_free)} free space."
235
- )
236
- try:
237
- os.remove(fn)
238
- except Exception as exc:
239
- print(f"FileCache: Error while removing {fn}: {type(exc).__name__}: {exc}")
240
- cur_expected_free -= size
207
+ lock_dir, lock_file_name = self._get_lock_filename(fn)
208
+ lock_file = LockFile(directory=lock_dir, name=lock_file_name, lock_timeout=self._lock_timeout)
209
+ if not lock_file.try_lock():
210
+ print(f"FileCache: lock for {fn} is currently held, skipping.")
211
+ continue
212
+ try:
213
+ # Re-check mtime with lock, could have been updated by another
214
+ # process in the meantime.
215
+ # We do not update the `mtime` variable here, because the code
216
+ # assumes that the list of files is sorted by mtime to abort
217
+ # early when enough space has been made.
218
+ # Instead, we treat the case where the mtime was updated during
219
+ # cleanup as an outlier and continue as if no other mtimes had
220
+ # changed.
221
+ # See for discussion:
222
+ # - https://github.com/rwth-i6/returnn/issues/1675
223
+ # - https://github.com/rwth-i6/returnn/pull/1709
241
224
  try:
242
- os.remove(self._get_info_filename(fn))
225
+ cur_mtime = os.stat(fn).st_mtime
226
+ except FileNotFoundError:
227
+ # File was deleted while waiting for the lock, or because it was
228
+ # a temporary copy file and was renamed to its final location.
229
+ # Since we don't know whether it was actually deleted or just
230
+ # renamed, we leave cur_expected_free unchanged.
231
+ continue
243
232
  except Exception as exc:
244
- print(f"FileCache: Ignoring error file removing info file of {fn}: {type(exc).__name__}: {exc}")
233
+ print(f"FileCache: Error refreshing mtime of {fn}: {type(exc).__name__}: {exc}")
234
+ continue
235
+ if cur_mtime > mtime and (time.time() - cur_mtime) <= cur_used_time_threshold:
236
+ print(f"FileCache: {fn} has been updated during cleanup, skipping.")
237
+ continue
238
+ if cur_time - mtime > self._cleanup_files_always_older_than_days * 60 * 60 * 24:
239
+ delete_reason = f"File is {(cur_time - mtime) / 60 / 60 / 24:.1f} days old"
240
+ else:
241
+ reached_more_recent_files = True
242
+ if not delete_reason and need_at_least_free_space_size > cur_expected_free:
243
+ # Still must delete some files.
244
+ if cur_time - mtime > cur_used_time_threshold:
245
+ delete_reason = f"Still need more space, file is {(cur_time - mtime) / 60 / 60:.1f} hours old"
246
+ else:
247
+ raise Exception(
248
+ f"We cannot free enough space on {self.cache_directory}.\n"
249
+ f"Needed: {human_bytes_size(need_at_least_free_space_size)},\n"
250
+ f"currently available: {human_bytes_size(cur_expected_free)},\n"
251
+ f"oldest file is still too recent: {fn}.\n"
252
+ f"{report_size_str}"
253
+ )
254
+ if not delete_reason and want_free_space_size > cur_expected_free:
255
+ if cur_time - mtime > self._cleanup_files_wanted_older_than_days * 60 * 60 * 24:
256
+ delete_reason = f"Still want more space, file is {(cur_time - mtime) / 60 / 60:.1f} hours old"
257
+ else:
258
+ # All further files are even more recent, so we would neither cleanup them,
259
+ # so we can also just stop now.
260
+ break
261
+
262
+ if delete_reason:
263
+ cur_expected_free += size
264
+ print(
265
+ f"FileCache: Delete file {fn}, size {human_bytes_size(size)}. {delete_reason}."
266
+ f" After deletion, have {human_bytes_size(cur_expected_free)} free space."
267
+ )
268
+ try:
269
+ os.remove(fn)
270
+ except Exception as exc:
271
+ if not isinstance(exc, FileNotFoundError):
272
+ print(f"FileCache: Error while removing {fn}: {type(exc).__name__}: {exc}")
273
+
274
+ # We don't know whether the file was just renamed or actually deleted, so
275
+ # we do as if its space has not been freed.
276
+ cur_expected_free -= size
277
+ try:
278
+ os.remove(self._get_info_filename(fn))
279
+ except FileNotFoundError:
280
+ pass
281
+ except Exception as exc:
282
+ print(f"FileCache: Ignoring error file removing info file of {fn}: {type(exc).__name__}: {exc}")
283
+ finally:
284
+ lock_file.unlock()
245
285
 
246
286
  if reached_more_recent_files and want_free_space_size <= cur_expected_free:
247
287
  # Have enough free space now.
@@ -311,6 +351,16 @@ class FileCache:
311
351
  """:return: the name of the corresponding info file to `filename`."""
312
352
  return f"{filename}.returnn-info"
313
353
 
354
+ @staticmethod
355
+ def _get_lock_filename(filename: str) -> Tuple[str, str]:
356
+ """:return: lock file target directory and lock file name"""
357
+ return os.path.dirname(filename), os.path.basename(filename) + ".returnn-lock"
358
+
359
+ @staticmethod
360
+ def _is_lock_filename(filename: str) -> bool:
361
+ """:return: whether `filename` points to a lock file."""
362
+ return filename.endswith(".returnn-lock")
363
+
314
364
  @staticmethod
315
365
  def _is_info_filename(filename: str) -> bool:
316
366
  """:return: whether `filename` points to a info file."""
@@ -324,13 +374,22 @@ class FileCache:
324
374
  dst_dir = os.path.dirname(dst_filename)
325
375
  os.makedirs(dst_dir, exist_ok=True)
326
376
 
377
+ lock_dir, lock_file = self._get_lock_filename(dst_filename)
378
+ info_file_name = self._get_info_filename(dst_filename)
379
+
327
380
  # Copy the file, while holding a lock. See comment on lock_timeout above.
328
381
  with LockFile(
329
- directory=dst_dir, name=os.path.basename(dst_filename) + ".lock", lock_timeout=self._lock_timeout
382
+ directory=lock_dir, name=lock_file, lock_timeout=self._lock_timeout
330
383
  ) as lock, self._touch_files_thread.files_added_context(lock.lockfile):
331
384
  # Maybe it was copied in the meantime, while waiting for the lock.
332
385
  if self._check_existing_copied_file_maybe_cleanup(src_filename, dst_filename):
333
386
  print(f"FileCache: using existing file {dst_filename}")
387
+ # Update mtime while holding lock, to synchronize with any concurrent cleanup.
388
+ # See for discussion:
389
+ # - https://github.com/rwth-i6/returnn/issues/1675
390
+ # - https://github.com/rwth-i6/returnn/pull/1709
391
+ os.utime(dst_filename, None)
392
+ os.utime(info_file_name, None)
334
393
  return
335
394
 
336
395
  print(f"FileCache: Copy file {src_filename} to cache")
@@ -352,7 +411,7 @@ class FileCache:
352
411
  with self._touch_files_thread.files_added_context(dst_dir):
353
412
  # save mtime before the copy process to have it pessimistic
354
413
  orig_mtime_ns = os.stat(src_filename).st_mtime_ns
355
- FileInfo(mtime_ns=orig_mtime_ns).save(self._get_info_filename(dst_filename))
414
+ FileInfo(mtime_ns=orig_mtime_ns).save(info_file_name)
356
415
 
357
416
  _copy_with_prealloc(src_filename, dst_tmp_filename)
358
417
  os.rename(dst_tmp_filename, dst_filename)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20250421.5132
3
+ Version: 1.20250422.113157
4
4
  Summary: The RWTH extensible training framework for universal recurrent neural networks
5
5
  Home-page: https://github.com/rwth-i6/returnn/
6
6
  Author: Albert Zeyer
@@ -18,6 +18,7 @@ from returnn.log import log
18
18
  import argparse
19
19
  import numpy
20
20
  from returnn.datasets import init_dataset, Dataset
21
+ from returnn.datasets.util.vocabulary import Vocabulary
21
22
  from returnn.util.basic import Stats, hms, hms_fraction, pretty_print, NumbersDict
22
23
  from returnn.util import basic as util
23
24
 
@@ -87,6 +88,13 @@ def dump_dataset(options):
87
88
  print("Done.")
88
89
  return
89
90
 
91
+ # Inlined and cached can_serialize_data / serialize_data.
92
+ vocabs = {}
93
+ for key in dataset.get_data_keys():
94
+ labels = dataset.labels.get(key)
95
+ if labels and len(labels) > 1:
96
+ vocabs[key] = Vocabulary.create_vocab_from_labels(labels)
97
+
90
98
  dump_file = None
91
99
  if options.type == "numpy":
92
100
  print("Dump files: %r*%r" % (options.dump_prefix, options.dump_postfix), file=log.v3)
@@ -192,9 +200,8 @@ def dump_dataset(options):
192
200
  elif options.type == "stdout":
193
201
  print("seq %s tag:" % progress, dataset.get_tag(seq_idx))
194
202
  extra = ""
195
- if "data" in dataset.labels and len(dataset.labels["data"]) > 1:
196
- assert dataset.can_serialize_data("data")
197
- extra += " (%r)" % dataset.serialize_data(key="data", data=data)
203
+ if "data" in vocabs:
204
+ extra += " (%r)" % vocabs["data"].serialize_labels(data)
198
205
  print("seq %s data: %s%s" % (progress, pretty_print(data), extra))
199
206
  elif options.type == "print_shape":
200
207
  print("seq %s data shape:" % progress, data.shape)
@@ -210,9 +217,8 @@ def dump_dataset(options):
210
217
  )
211
218
  elif options.type == "stdout":
212
219
  extra = ""
213
- if target in dataset.labels and len(dataset.labels[target]) > 1:
214
- assert dataset.can_serialize_data(target)
215
- extra += " (%r)" % dataset.serialize_data(key=target, data=targets)
220
+ if target in vocabs:
221
+ extra += " (%r)" % vocabs[target].serialize_labels(targets)
216
222
  print("seq %i target %r: %s%s" % (seq_idx, target, pretty_print(targets), extra))
217
223
  elif options.type == "print_shape":
218
224
  print("seq %i target %r shape:" % (seq_idx, target), targets.shape)
@@ -1,2 +0,0 @@
1
- version = '1.20250421.005132'
2
- long_version = '1.20250421.005132+git.c90b436'