returnn 1.20250116.102559__tar.gz → 1.20250117.155146__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 (474) hide show
  1. {returnn-1.20250116.102559/returnn.egg-info → returnn-1.20250117.155146}/PKG-INFO +1 -1
  2. returnn-1.20250117.155146/_setup_info_generated.py +2 -0
  3. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/basic.py +1 -0
  4. returnn-1.20250117.155146/returnn/datasets/text_dict.py +259 -0
  5. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/util/vocabulary.py +9 -4
  6. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/array_.py +30 -3
  7. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/_tensor_extra.py +40 -32
  8. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/tensor.py +2 -2
  9. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/basic.py +19 -5
  10. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/_backend.py +6 -1
  11. {returnn-1.20250116.102559 → returnn-1.20250117.155146/returnn.egg-info}/PKG-INFO +1 -1
  12. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn.egg-info/SOURCES.txt +1 -0
  13. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFNetworkLayer.py +75 -11
  14. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_array.py +76 -1
  15. returnn-1.20250116.102559/_setup_info_generated.py +0 -2
  16. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/.editorconfig +0 -0
  17. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/.gitignore +0 -0
  18. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/.gitmodules +0 -0
  19. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/.kateconfig +0 -0
  20. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/CHANGELOG.md +0 -0
  21. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/CODEOWNERS +0 -0
  22. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/CONTRIBUTING.md +0 -0
  23. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/LICENSE +0 -0
  24. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/MANIFEST.in +0 -0
  25. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/README.rst +0 -0
  26. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/__init__.py +0 -0
  27. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/12AX.cluster_map +0 -0
  28. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/_setup_returnn_env.py +0 -0
  29. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-fwd.config +0 -0
  30. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-horovod-mpi.py +0 -0
  31. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-horovod-mpi.py.sh +0 -0
  32. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-horovod-mpi.sh +0 -0
  33. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-hyper-param-tuning.config +0 -0
  34. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-iter-dataset.py +0 -0
  35. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-list-devices.py +0 -0
  36. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-lua-torch-layer.config +0 -0
  37. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-pretrain.config +0 -0
  38. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-record-and-push-to-webserver.py +0 -0
  39. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-returnn-as-framework.py +0 -0
  40. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-rf-pt-benchmark.py +0 -0
  41. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-rf.config +0 -0
  42. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-rhn-enwik8.config +0 -0
  43. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-sprint-interface.py +0 -0
  44. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-att-copy.config +0 -0
  45. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-attention.config +0 -0
  46. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  47. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  48. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-enc-dec.config +0 -0
  49. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-hard-att-copy.config +0 -0
  50. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-lstm-benchmark.py +0 -0
  51. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  52. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  53. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-native-lstm.12ax.config +0 -0
  54. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  55. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  56. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  57. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  58. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  59. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-rec-self-att.config +0 -0
  60. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-search-compiled-graph.py +0 -0
  61. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  62. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-timit-lstm-ctc.config +0 -0
  63. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-torch.config +0 -0
  64. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  65. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo.sh +0 -0
  66. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  67. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  68. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  69. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/README.txt +0 -0
  70. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/chars.txt +0 -0
  71. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/config_demo +0 -0
  72. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/config_fwd +0 -0
  73. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/config_real +0 -0
  74. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  75. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/decode.py +0 -0
  76. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  77. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/go.sh +0 -0
  78. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/lines.txt +0 -0
  79. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/split/eval.txt +0 -0
  80. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/split/train.txt +0 -0
  81. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/split/valid.txt +0 -0
  82. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/README.md +0 -0
  83. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  84. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial/forwardconfig +0 -0
  85. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial/go.sh +0 -0
  86. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial/trainconfig +0 -0
  87. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  88. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  89. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  90. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  91. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/pyproject.toml +0 -0
  92. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/requirements.txt +0 -0
  93. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/__init__.py +0 -0
  94. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/__main__.py +0 -0
  95. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/__old_mod_loader__.py +0 -0
  96. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/__setup__.py +0 -0
  97. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/config.py +0 -0
  98. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/__init__.py +0 -0
  99. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/audio.py +0 -0
  100. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/bundle_file.py +0 -0
  101. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/cached.py +0 -0
  102. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/cached2.py +0 -0
  103. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/distrib_files.py +0 -0
  104. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/generating.py +0 -0
  105. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/hdf.py +0 -0
  106. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/lm.py +0 -0
  107. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/map.py +0 -0
  108. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/meta.py +0 -0
  109. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/multi_proc.py +0 -0
  110. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/normalization_data.py +0 -0
  111. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/numpy_dump.py +0 -0
  112. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/postprocessing.py +0 -0
  113. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/raw_wav.py +0 -0
  114. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/sprint.py +0 -0
  115. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/stereo.py +0 -0
  116. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/util/__init__.py +0 -0
  117. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/util/feature_extraction.py +0 -0
  118. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/util/strings.py +0 -0
  119. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/engine/__init__.py +0 -0
  120. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/engine/base.py +0 -0
  121. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/engine/batch.py +0 -0
  122. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/__init__.py +0 -0
  123. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/__main__.py +0 -0
  124. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  125. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  126. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  127. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  128. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  129. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  130. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  131. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  132. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  133. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  134. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  135. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  136. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  137. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  138. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  139. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  140. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  141. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  142. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  143. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  144. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  145. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  146. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  147. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  148. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  149. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/__init__.py +0 -0
  150. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/README.md +0 -0
  151. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/__init__.py +0 -0
  152. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/edit.py +0 -0
  153. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/reroute.py +0 -0
  154. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/select.py +0 -0
  155. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/subgraph.py +0 -0
  156. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/transform.py +0 -0
  157. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/util.py +0 -0
  158. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/forward_iface.py +0 -0
  159. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/__init__.py +0 -0
  160. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_backend.py +0 -0
  161. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_cache.py +0 -0
  162. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/__init__.py +0 -0
  163. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/backend.cpp +0 -0
  164. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/backend.hpp +0 -0
  165. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/module.cpp +0 -0
  166. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/module.hpp +0 -0
  167. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/py_utils.hpp +0 -0
  168. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  169. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  170. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_numpy_backend.py +0 -0
  171. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_random_journal.py +0 -0
  172. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_utils.py +0 -0
  173. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/attention.py +0 -0
  174. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/audio/__init__.py +0 -0
  175. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/audio/mel.py +0 -0
  176. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/audio/specaugment.py +0 -0
  177. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/backend.py +0 -0
  178. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/build_from_dict.py +0 -0
  179. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/cond.py +0 -0
  180. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/const.py +0 -0
  181. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/container.py +0 -0
  182. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/control_flow_ctx.py +0 -0
  183. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conv.py +0 -0
  184. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conversions/__init__.py +0 -0
  185. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
  186. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conversions/hf_llama.py +0 -0
  187. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conversions/torch_nn.py +0 -0
  188. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/decoder/__init__.py +0 -0
  189. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/decoder/transformer.py +0 -0
  190. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/device.py +0 -0
  191. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/dims.py +0 -0
  192. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/dropout.py +0 -0
  193. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/dtype.py +0 -0
  194. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/__init__.py +0 -0
  195. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/base.py +0 -0
  196. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/conformer.py +0 -0
  197. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/conformer_v2.py +0 -0
  198. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/e_branchformer.py +0 -0
  199. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/transformer.py +0 -0
  200. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/gradient.py +0 -0
  201. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/graph.py +0 -0
  202. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/hooks.py +0 -0
  203. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/init.py +0 -0
  204. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/label_smoothing.py +0 -0
  205. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/linear.py +0 -0
  206. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/loop.py +0 -0
  207. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/loss.py +0 -0
  208. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/math_.py +0 -0
  209. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/matmul.py +0 -0
  210. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/module.py +0 -0
  211. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/normalization.py +0 -0
  212. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/parameter.py +0 -0
  213. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/parametrizations.py +0 -0
  214. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/parametrize.py +0 -0
  215. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/piecewise_linear.py +0 -0
  216. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/rand.py +0 -0
  217. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/rec.py +0 -0
  218. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/reduce.py +0 -0
  219. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/run_ctx.py +0 -0
  220. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/signal.py +0 -0
  221. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/state.py +0 -0
  222. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/stepwise_scheduler.py +0 -0
  223. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/tensor_array.py +0 -0
  224. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/types.py +0 -0
  225. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/import_/__init__.py +0 -0
  226. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/import_/common.py +0 -0
  227. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/import_/git.py +0 -0
  228. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/import_/import_.py +0 -0
  229. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/learning_rate_control.py +0 -0
  230. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/log.py +0 -0
  231. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/native_op.cpp +0 -0
  232. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/native_op.py +0 -0
  233. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/pretrain.py +0 -0
  234. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/__init__.py +0 -0
  235. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/cache.py +0 -0
  236. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/control.py +0 -0
  237. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/error_signals.py +0 -0
  238. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/extern_interface.py +0 -0
  239. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/interface.py +0 -0
  240. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/README.md +0 -0
  241. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/__init__.py +0 -0
  242. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/_dim_extra.py +0 -0
  243. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/_tensor_mixin_base.py +0 -0
  244. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/_tensor_op_overloads.py +0 -0
  245. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/control_flow_ctx.py +0 -0
  246. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/dim.py +0 -0
  247. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/marked_dim.py +0 -0
  248. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/tensor_dict.py +0 -0
  249. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/utils.py +0 -0
  250. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/__init__.py +0 -0
  251. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/compat.py +0 -0
  252. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/data_pipeline.py +0 -0
  253. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/distributed.py +0 -0
  254. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/engine.py +0 -0
  255. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/README.md +0 -0
  256. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/__init__.py +0 -0
  257. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/_backend.py +0 -0
  258. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/_utils.py +0 -0
  259. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/cond.py +0 -0
  260. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  261. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  262. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/dims.py +0 -0
  263. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/layer.py +0 -0
  264. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/loop.py +0 -0
  265. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/make_layer.py +0 -0
  266. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  267. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  268. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  269. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_low_level/__init__.py +0 -0
  270. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_low_level/_backend.py +0 -0
  271. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/horovod.py +0 -0
  272. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/hyper_param_tuning.py +0 -0
  273. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/__init__.py +0 -0
  274. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/base.py +0 -0
  275. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/rec.py +0 -0
  276. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/segmental_model.py +0 -0
  277. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/signal_processing.py +0 -0
  278. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/variable.py +0 -0
  279. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/native_op.py +0 -0
  280. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/network.py +0 -0
  281. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/sprint.py +0 -0
  282. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/updater.py +0 -0
  283. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/__init__.py +0 -0
  284. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/basic.py +0 -0
  285. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/data.py +0 -0
  286. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/gradient_checkpoint.py +0 -0
  287. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/ken_lm.py +0 -0
  288. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/open_fst.py +0 -0
  289. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/README.md +0 -0
  290. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/__init__.py +0 -0
  291. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/__init__.py +0 -0
  292. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/extern_data.py +0 -0
  293. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/pipeline.py +0 -0
  294. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/queued_data_iter.py +0 -0
  295. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  296. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/tensor_utils.py +0 -0
  297. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/distributed.py +0 -0
  298. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/engine.py +0 -0
  299. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/__init__.py +0 -0
  300. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/_rand.py +0 -0
  301. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/bridge.py +0 -0
  302. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/raw_ops.py +0 -0
  303. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/optim/README.md +0 -0
  304. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/optim/__init__.py +0 -0
  305. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/optim/lion.py +0 -0
  306. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/updater.py +0 -0
  307. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/README.md +0 -0
  308. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/__init__.py +0 -0
  309. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/array_.py +0 -0
  310. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/debug_inf_nan.py +0 -0
  311. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/diagnose_gpu.py +0 -0
  312. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/exception_helper.py +0 -0
  313. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/gradient_checkpoint.py +0 -0
  314. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/module.py +0 -0
  315. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/scaled_gradient.py +0 -0
  316. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/__init__.py +0 -0
  317. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/basic.py +0 -0
  318. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/better_exchook.py +0 -0
  319. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/bpe.py +0 -0
  320. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/debug.py +0 -0
  321. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/debug_helpers.py +0 -0
  322. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/file_cache.py +0 -0
  323. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/fsa.py +0 -0
  324. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/literal_py_to_pickle.py +0 -0
  325. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/lru_cache.py +0 -0
  326. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/math.py +0 -0
  327. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  328. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/native_code_compiler.py +0 -0
  329. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/pprint.py +0 -0
  330. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/py-to-pickle.cpp +0 -0
  331. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/py_compat.py +0 -0
  332. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/py_ext_mod_compiler.py +0 -0
  333. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/result_with_reason.py +0 -0
  334. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/sig_proc.py +0 -0
  335. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/task_system.py +0 -0
  336. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/train_proc_manager.py +0 -0
  337. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/watch_memory.py +0 -0
  338. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn.egg-info/dependency_links.txt +0 -0
  339. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn.egg-info/top_level.txt +0 -0
  340. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/rnn.py +0 -0
  341. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/setup.cfg +0 -0
  342. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/setup.py +0 -0
  343. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/DummySprintExec.py +0 -0
  344. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm-inspection-profile.xml +0 -0
  345. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/.gitignore +0 -0
  346. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/.name +0 -0
  347. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  348. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  349. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  350. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  351. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  352. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/misc.xml +0 -0
  353. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/modules.xml +0 -0
  354. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/returnn.iml +0 -0
  355. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  356. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/_set_num_threads1.py +0 -0
  357. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/_setup_returnn_env.py +0 -0
  358. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/_setup_test_env.py +0 -0
  359. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/bpe-unicode-demo.codes +0 -0
  360. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/bpe-unicode-demo.vocab +0 -0
  361. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lexicon_opt.fst +0 -0
  362. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lexicon_opt.isyms +0 -0
  363. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lexicon_opt.jpg +0 -0
  364. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lexicon_opt.osyms +0 -0
  365. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lint_common.py +0 -0
  366. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/pycharm-inspect.py +0 -0
  367. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/pylint.py +0 -0
  368. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/returnn-as-framework.py +0 -0
  369. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/rf_utils.py +0 -0
  370. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/spelling.dic +0 -0
  371. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Config.py +0 -0
  372. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Dataset.py +0 -0
  373. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Fsa.py +0 -0
  374. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_GeneratingDataset.py +0 -0
  375. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_HDFDataset.py +0 -0
  376. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_LearningRateControl.py +0 -0
  377. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Log.py +0 -0
  378. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_MultiProcDataset.py +0 -0
  379. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Pretrain.py +0 -0
  380. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_ResNet.py +0 -0
  381. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_SprintDataset.py +0 -0
  382. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_SprintInterface.py +0 -0
  383. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFEngine.py +0 -0
  384. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFNativeOp.py +0 -0
  385. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFNetworkRecLayer.py +0 -0
  386. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFNetworkSigProcLayer.py +0 -0
  387. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFUpdater.py +0 -0
  388. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFUtil.py +0 -0
  389. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TF_determinism.py +0 -0
  390. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TaskSystem.py +0 -0
  391. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TaskSystem_SharedMem.py +0 -0
  392. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TranslationDataset.py +0 -0
  393. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Util.py +0 -0
  394. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_demos.py +0 -0
  395. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_fork_exec.py +0 -0
  396. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_hdf_dump.py +0 -0
  397. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_attention.py +0 -0
  398. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_base.py +0 -0
  399. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_cond.py +0 -0
  400. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_const.py +0 -0
  401. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_container.py +0 -0
  402. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_conv.py +0 -0
  403. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_decoder_transformer.py +0 -0
  404. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_encoder_conformer.py +0 -0
  405. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_gradient.py +0 -0
  406. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_label_smoothing.py +0 -0
  407. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_loop.py +0 -0
  408. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_math.py +0 -0
  409. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_normalization.py +0 -0
  410. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_piecewise_linear.py +0 -0
  411. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_rec.py +0 -0
  412. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_reduce.py +0 -0
  413. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_signal.py +0 -0
  414. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_tensor.py +0 -0
  415. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_threading.py +0 -0
  416. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_tools.py +0 -0
  417. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_dataset.py +0 -0
  418. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_engine.py +0 -0
  419. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_frontend.py +0 -0
  420. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_internal_frontend.py +0 -0
  421. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_util.py +0 -0
  422. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/torch_utils.py +0 -0
  423. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/_setup_returnn_env.py +0 -0
  424. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/analyze-dataset-batches.py +0 -0
  425. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bliss-collect-seq-lens.py +0 -0
  426. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bliss-dump-text.py +0 -0
  427. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bliss-get-segment-names.py +0 -0
  428. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bliss-to-ogg-zip.py +0 -0
  429. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bpe-create-lexicon.py +0 -0
  430. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/calculate-word-error-rate.py +0 -0
  431. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/cleanup-old-models.py +0 -0
  432. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/collect-orth-symbols.py +0 -0
  433. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/collect-words.py +0 -0
  434. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/compile_native_op.py +0 -0
  435. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/compile_tf_graph.py +0 -0
  436. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/debug-dump-search-scores.py +0 -0
  437. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/debug-plot-search-scores.py +0 -0
  438. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-dataset-raw-strings.py +0 -0
  439. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-dataset.py +0 -0
  440. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-forward-stats.py +0 -0
  441. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-forward.py +0 -0
  442. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-network-json.py +0 -0
  443. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-pickle.py +0 -0
  444. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/extract_state_tying_from_dataset.py +0 -0
  445. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/get-attention-weights.py +0 -0
  446. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/get-best-model-epoch.py +0 -0
  447. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/hdf_dump.py +0 -0
  448. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/hdf_dump_translation_dataset.py +0 -0
  449. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/import-blocks-mt-model.py +0 -0
  450. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/import-t2t-mt-model.py +0 -0
  451. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/.gitignore +0 -0
  452. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/Makefile +0 -0
  453. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/README.md +0 -0
  454. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/README.md +0 -0
  455. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/libs_list +0 -0
  456. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  457. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
  458. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  459. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/state_vars_list +0 -0
  460. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  461. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/file.h +0 -0
  462. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  463. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  464. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/main.cc +0 -0
  465. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/rescorer.h +0 -0
  466. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/vocabulary.cc +0 -0
  467. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/vocabulary.h +0 -0
  468. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/tf_avg_checkpoints.py +0 -0
  469. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/tf_inspect_checkpoint.py +0 -0
  470. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/tf_inspect_summary_log.py +0 -0
  471. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/torch_avg_checkpoints.py +0 -0
  472. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/torch_export_to_onnx.py +0 -0
  473. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/torch_inspect_checkpoint.py +0 -0
  474. {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20250116.102559
3
+ Version: 1.20250117.155146
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.20250117.155146'
2
+ long_version = '1.20250117.155146+git.a41252b'
@@ -1456,6 +1456,7 @@ def get_dataset_class(name: Union[str, Type[Dataset]]) -> Optional[Type[Dataset]
1456
1456
  "multi_proc",
1457
1457
  "distrib_files",
1458
1458
  "postprocessing",
1459
+ "text_dict",
1459
1460
  ]
1460
1461
  for mod_name in mod_names:
1461
1462
  mod = import_module("returnn.datasets.%s" % mod_name)
@@ -0,0 +1,259 @@
1
+ """
2
+ :class:`TextDictDataset`
3
+ """
4
+
5
+ from __future__ import annotations
6
+ from typing import Optional, Union, Any, Sequence, Tuple, List, Dict
7
+ import numpy as np
8
+
9
+ from returnn.log import log
10
+ from .basic import DatasetSeq
11
+ from .cached2 import CachedDataset2
12
+ from .util.vocabulary import Vocabulary
13
+
14
+
15
+ class TextDictDataset(CachedDataset2):
16
+ """
17
+ This dataset can read files in the format as usually generated from RETURNN search,
18
+ i.e. with beam like (item_format = "list_with_scores")::
19
+
20
+ {
21
+ seq_tag: [(score1, text1), (score2, text2), ...],
22
+ ...
23
+ }
24
+
25
+ Or without beam like (item_format = "single")::
26
+
27
+ {
28
+ seq_tag: text,
29
+ ...
30
+ }
31
+
32
+ The data keys:
33
+
34
+ data: The single (or best) sequence (encoded via vocab).
35
+ data_flat: for list_with_scores, all sequences concatenated (encoded via vocab), in the given order
36
+ data_seq_lens: for list_with_scores, the sequence lengths of each seq in data_flat
37
+ scores: for list_with_scores, the scores of each seq in data_flat
38
+ """
39
+
40
+ def __init__(
41
+ self,
42
+ *,
43
+ filename: str,
44
+ item_format: str = "list_with_scores",
45
+ vocab: Union[Vocabulary, Dict[str, Any]],
46
+ **kwargs,
47
+ ):
48
+ """
49
+ :param filename: text dict file. can be gzipped.
50
+ :param item_format: "list_with_scores" or "single"
51
+ :param vocab: to encode the text as a label sequence. See :class:`Vocabulary.create_vocab`.
52
+ """
53
+ super().__init__(**kwargs)
54
+ self.filename = filename
55
+ self.item_format = item_format
56
+ self.vocab = vocab if isinstance(vocab, Vocabulary) else Vocabulary.create_vocab(**vocab)
57
+ self.num_inputs = self.vocab.num_labels
58
+ self.num_outputs = {}
59
+ self.labels = {}
60
+ if item_format == "list_with_scores":
61
+ self.num_outputs.update(
62
+ {
63
+ "data": (self.vocab.num_labels, 1),
64
+ "data_flat": (self.vocab.num_labels, 1),
65
+ "data_seq_lens": (1, 1),
66
+ "scores": (1, 1),
67
+ }
68
+ )
69
+ self.labels.update({"data_flat": self.vocab.labels})
70
+ elif item_format == "single":
71
+ self.num_outputs.update({"data": (self.vocab.num_labels, 1)})
72
+ self.labels.update({"data": self.vocab.labels})
73
+ else:
74
+ raise ValueError(f"invalid item_format {item_format!r}")
75
+ self._data_values: Optional[List[Union[List[Tuple[float, str]], str]]] = None # lazily loaded
76
+ self._seq_tags: Optional[List[str]] = None # lazily loaded
77
+ self._seq_order: Optional[Sequence[int]] = None # via init_seq_order
78
+
79
+ def _load(self):
80
+ if self._data_values is not None:
81
+ return
82
+
83
+ if self.filename.endswith(".gz"):
84
+ import gzip
85
+
86
+ txt = gzip.GzipFile(self.filename, "rb").read()
87
+ else:
88
+ txt = open(self.filename, "rb").read()
89
+
90
+ from returnn.util.literal_py_to_pickle import literal_eval
91
+
92
+ # Note: literal_py_to_pickle.literal_eval is quite efficient.
93
+ # However, currently, it does not support inf/nan literals,
94
+ # so it might break for some input.
95
+ # We might want to put a simple fallback to eval here if needed.
96
+ # Or maybe extend literal_py_to_pickle.literal_eval to support inf/nan literals.
97
+ try:
98
+ data: Dict[str, Any] = literal_eval(txt)
99
+ except Exception as exc:
100
+ print(f"{self}: Warning: literal_py_to_pickle.literal_eval failed:", file=log.v3)
101
+ print(f" {type(exc).__name__}: {exc}", file=log.v3)
102
+ print(" Fallback to eval...", file=log.v3)
103
+ data: Dict[str, Any] = eval(txt)
104
+ assert data is not None
105
+ assert isinstance(data, dict)
106
+ assert len(data) > 0
107
+ # Check some data.
108
+ key, value = next(iter(data.items()))
109
+ assert isinstance(key, str), f"{self}: expected seq tag as keys, got {key!r} ({type(key)})" # seq tag
110
+ if self.item_format == "single":
111
+ assert isinstance(value, str), f"{self}: expected str ({self.item_format}), got {value!r} ({type(value)})"
112
+ elif self.item_format == "list_with_scores":
113
+ assert isinstance(value, list), f"{self}: expected list ({self.item_format}), got {value!r} ({type(value)})"
114
+ assert len(value) > 0, f"{self}: expected non-empty list ({self.item_format}), got {value!r} for seq {key}"
115
+ value0 = value[0]
116
+ assert (
117
+ isinstance(value0, tuple)
118
+ and len(value0) == 2
119
+ and isinstance(value0[0], float)
120
+ and isinstance(value0[1], str)
121
+ ), f"{self}: expected (score,text) tuples ({self.item_format}), got {value0!r} ({type(value0)})"
122
+ else:
123
+ raise ValueError(f"invalid item_format {self.item_format!r}")
124
+ self._data_values = list(data.values())
125
+ self._seq_tags = list(data.keys())
126
+
127
+ def init_seq_order(self, epoch=None, seq_list=None, seq_order=None):
128
+ """init seq order"""
129
+ super().init_seq_order(epoch=epoch, seq_list=seq_list, seq_order=seq_order)
130
+ if epoch is None and seq_list is None and seq_order is None:
131
+ self._num_seqs = 0
132
+ return True
133
+
134
+ random_seed = self._get_random_seed_for_epoch(epoch=epoch)
135
+ self.vocab.set_random_seed(random_seed)
136
+
137
+ if self.item_format == "single":
138
+
139
+ def _get_seq_len(i: int) -> int:
140
+ return len(self._data_values[i])
141
+
142
+ elif self.item_format == "list_with_scores":
143
+
144
+ def _get_seq_len(i: int) -> int:
145
+ values = self._data_values[i]
146
+ return sum(len(text) for _, text in values)
147
+
148
+ else:
149
+ raise ValueError(f"invalid item_format {self.item_format!r}")
150
+
151
+ if seq_order is not None:
152
+ self._seq_order = seq_order
153
+ elif seq_list is not None:
154
+ raise NotImplementedError(f"{self}: seq_list not supported yet")
155
+ else:
156
+ self._load()
157
+ num_seqs = len(self._data_values)
158
+ self._seq_order = self.get_seq_order_for_epoch(epoch=epoch, num_seqs=num_seqs, get_seq_len=_get_seq_len)
159
+ self._num_seqs = len(self._seq_order)
160
+
161
+ def _collect_single_seq(self, seq_idx: int) -> Optional[DatasetSeq]:
162
+ orig_seq_idx = self._seq_order[seq_idx]
163
+ seq_tag = self._seq_tags[orig_seq_idx]
164
+ data = self._data_values[orig_seq_idx]
165
+
166
+ res = {}
167
+ labels_dtype = self.get_data_dtype("data")
168
+ if self.item_format == "single":
169
+ res["data"] = np.array(self.vocab.get_seq(data), dtype=labels_dtype)
170
+ elif self.item_format == "list_with_scores":
171
+ _, best = max(data, key=lambda x: x[0])
172
+ res["data"] = np.array(self.vocab.get_seq(best), dtype=labels_dtype)
173
+ labels = [self.vocab.get_seq(txt) for _, txt in data]
174
+ res["data_flat"] = np.array(sum(labels, []), dtype=labels_dtype)
175
+ res["data_seq_lens"] = np.array([len(seq) for seq in labels], dtype=self.get_data_dtype("data_seq_lens"))
176
+ res["scores"] = np.array([score for score, _ in data], dtype=self.get_data_dtype("scores"))
177
+ else:
178
+ raise ValueError(f"invalid item_format {self.item_format!r}")
179
+ return DatasetSeq(seq_idx=seq_idx, features=res, seq_tag=seq_tag)
180
+
181
+ def supports_sharding(self) -> bool:
182
+ """:return: whether this dataset supports sharding"""
183
+ return True
184
+
185
+ def supports_seq_order_sorting(self) -> bool:
186
+ """supports sorting"""
187
+ return True
188
+
189
+ def get_current_seq_order(self) -> Sequence[int]:
190
+ """:return: seq order"""
191
+ assert self._seq_order is not None, "init_seq_order not called"
192
+ return self._seq_order
193
+
194
+ def have_corpus_seq_idx(self) -> bool:
195
+ """
196
+ :return: whether we can use :func:`get_corpus_seq_idx`
197
+ """
198
+ return True
199
+
200
+ def get_corpus_seq_idx(self, seq_idx: int) -> int:
201
+ """
202
+ :param seq_idx:
203
+ """
204
+ assert self._seq_order is not None, "init_seq_order not called"
205
+ return self._seq_order[seq_idx]
206
+
207
+ def get_tag(self, seq_idx: int) -> str:
208
+ """
209
+ :param seq_idx:
210
+ :return: seq tag
211
+ """
212
+ self._load()
213
+ return self._seq_tags[self._seq_order[seq_idx]]
214
+
215
+ def get_all_tags(self) -> List[str]:
216
+ """:return: all tags"""
217
+ self._load()
218
+ return self._seq_tags
219
+
220
+ def get_total_num_seqs(self, *, fast: bool = False) -> int:
221
+ """:return: total num seqs in dataset (not for (sub)epoch)"""
222
+ self._load()
223
+ return len(self._data_values)
224
+
225
+ def get_data_dim(self, key: str) -> int:
226
+ """:return: dim of data entry with `key`"""
227
+ if key == "data" or key == "data_flat":
228
+ return self.vocab.num_labels
229
+ elif key == "data_seq_lens":
230
+ return 1
231
+ elif key == "scores":
232
+ return 1
233
+ else:
234
+ raise ValueError(f"{self}: unknown data key: {key}")
235
+
236
+ def get_data_dtype(self, key: str) -> str:
237
+ """:return: dtype of data entry with `key`"""
238
+ if key == "data" or key == "data_flat":
239
+ return "int32"
240
+ elif key == "data_seq_lens":
241
+ return "int32"
242
+ elif key == "scores":
243
+ return "float32"
244
+ else:
245
+ raise ValueError(f"{self}: unknown data key: {key}")
246
+
247
+ def get_data_keys(self) -> List[str]:
248
+ """:return: available data keys"""
249
+ return list(self.num_outputs.keys())
250
+
251
+ def get_data_shape(self, key: str) -> List[str]:
252
+ """
253
+ :returns get_data(*, key).shape[1:], i.e. num-frames excluded
254
+ """
255
+ return [] # all are scalar or sparse
256
+
257
+ def is_data_sparse(self, key: str) -> bool:
258
+ """:return: whether data entry with `key` is sparse"""
259
+ return key == "data" or key == "data_flat"
@@ -123,8 +123,6 @@ class Vocabulary:
123
123
  Sets self.vocab, self.labels, self.num_labels.
124
124
  """
125
125
  filename = self.vocab_file
126
- import pickle
127
-
128
126
  if self._labels is not None:
129
127
  self._vocab = {label: i for i, label in enumerate(self._labels)}
130
128
  self.num_labels = len(self._labels)
@@ -132,10 +130,17 @@ class Vocabulary:
132
130
  self._vocab, self._labels = self._cache[filename]
133
131
  self.num_labels = len(self._labels)
134
132
  else:
135
- if filename[-4:] == ".pkl":
133
+ if filename.endswith(".pkl"):
134
+ import pickle
135
+
136
136
  d = pickle.load(open(filename, "rb"))
137
137
  else:
138
- file_content = open(filename, "r").read()
138
+ if filename.endswith(".gz"):
139
+ import gzip
140
+
141
+ file_content = gzip.open(filename, "rt").read()
142
+ else:
143
+ file_content = open(filename, "r").read()
139
144
  if file_content.startswith("{"):
140
145
  d = eval(file_content)
141
146
  else:
@@ -578,7 +578,7 @@ def masked_select(
578
578
  return tensor._raw_backend.masked_select(tensor, mask=mask, dims=dims, out_dim=out_dim)
579
579
  # Separate implementation for the case where we have a subset of the mask dims, specifically one single dim.
580
580
  # See https://github.com/rwth-i6/returnn/issues/1605 for discussion.
581
- mask = mask.copy_masked(mask_value=False, dims=dims)
581
+ mask = mask.copy_masked(mask_value=False)
582
582
  if len(dims) > 1:
583
583
  # Flatten it, in the specified order.
584
584
  tensor, in_dim = rf.merge_dims(tensor, dims=dims)
@@ -615,8 +615,33 @@ def masked_scatter(
615
615
  :param in_dim: the dim of the source which should be scattered into the mask.
616
616
  :return: [dims..., F...]
617
617
  """
618
- # noinspection PyProtectedMember
619
- return source._raw_backend.masked_scatter(source, backup=backup, mask=mask, dims=dims, in_dim=in_dim)
618
+ mask_dims_set = set(mask.dims)
619
+ dims_set = set(dims)
620
+ if not dims_set.issubset(mask_dims_set):
621
+ raise ValueError(f"masked_scatter: dims {dims} not subset of mask dims {mask.dims}")
622
+ if not dims_set:
623
+ raise ValueError(f"masked_scatter: dims {dims} empty")
624
+ if dims_set == mask_dims_set:
625
+ # noinspection PyProtectedMember
626
+ return source._raw_backend.masked_scatter(source, backup=backup, mask=mask, dims=dims, in_dim=in_dim)
627
+ # Separate implementation for the case where we have a subset of the mask dims.
628
+ # Keep this consistent to masked_select above.
629
+ mask = mask.copy_masked(mask_value=False)
630
+ if len(dims) > 1:
631
+ # Flatten it, in the specified order.
632
+ mask_, dim_ = rf.merge_dims(mask, dims=dims)
633
+ else:
634
+ mask_ = mask
635
+ (dim_,) = dims
636
+ dim_: Dim
637
+ idxs = rf.cumsum(rf.cast(mask_, "int32"), spatial_dim=dim_) # [dim_] -> idx in dim_/in_dim + 1
638
+ idxs = rf.split_dims(idxs, dims=dims, axis=dim_) # [dims...]
639
+ idxs = rf.where(mask, idxs - 1, 0) # [dim_] -> idx in in_dim
640
+ res = rf.gather(source, axis=in_dim, indices=idxs)
641
+ if backup is None:
642
+ backup = 0
643
+ res = rf.where(mask, res, backup)
644
+ return res
620
645
 
621
646
 
622
647
  def sequence_mask(dims: Union[Dim, Sequence[Dim]], *, device: Optional[str] = None) -> Tensor:
@@ -733,6 +758,8 @@ def scatter(
733
758
  with mode=="sum",
734
759
  or otherwise it will take the max/min.
735
760
 
761
+ ``scatter`` is the inverse of :func:`gather`.
762
+
736
763
  (TF segment_sum can be implemented via this.)
737
764
 
738
765
  :param source: [batch_dims..., indices_dim(s)..., feature_dims...]
@@ -174,23 +174,17 @@ class _TensorMixin(_TensorMixinBase):
174
174
  This is deprecated. Rather, the placeholder should be created outside and passed in.
175
175
  :param str|dict[str]|returnn.datasets.util.vocabulary.Vocabulary|None vocab: vocab of the feature dim
176
176
  or sparse dim.
177
- This is deprecated. Rather, the vocab is part of the :class:`Dim`.
178
177
  :param dict[int|str,Dim]|None same_dim_tags_as: will mark our dimension tags to be the same
179
178
  """
180
179
  assert isinstance(self, _t.Tensor)
181
180
  shape, sparse, dim, batch_dim_axis, dim_tags # noqa # unused here, handled in infer_dim_tags
182
181
 
183
182
  if vocab is not None:
184
- from returnn.datasets.util.vocabulary import Vocabulary
185
-
186
- if isinstance(vocab, str):
187
- vocab = Vocabulary(vocab)
188
- elif isinstance(vocab, dict):
189
- vocab = Vocabulary.create_vocab(**vocab)
190
- assert isinstance(vocab, Vocabulary)
191
183
  assert self.sparse, "%s should represent indices of %s" % (self, vocab)
192
- assert self.dim == vocab.num_labels, "%s dims do not match with vocab %s" % (self, vocab)
193
- self.sparse_dim.vocab = vocab
184
+ if not self.sparse_dim.vocab: # might already have been set earlier
185
+ vocab = _get_vocab(vocab)
186
+ assert self.dim == vocab.num_labels, "%s dims do not match with vocab %s" % (self, vocab)
187
+ self.sparse_dim.vocab = vocab
194
188
 
195
189
  if kwargs:
196
190
  self._extra = _TensorExtra(tensor=self, **kwargs)
@@ -3421,39 +3415,42 @@ def infer_sparse_dim(
3421
3415
  *,
3422
3416
  name: str,
3423
3417
  sparse: Optional[bool] = None,
3424
- sparse_dim,
3425
3418
  dim=NotSpecified,
3419
+ vocab=None,
3426
3420
  **_other_kwargs,
3427
3421
  ) -> Optional[Dim]:
3428
3422
  """
3423
+ Called when sparse_dim is None,
3424
+ but we assume it is sparse
3425
+
3429
3426
  :param name:
3430
3427
  :param sparse:
3431
- :param sparse_dim:
3432
3428
  :param dim:
3429
+ :param vocab:
3433
3430
  :return: sparse dim
3434
3431
  """
3435
3432
  if sparse is None:
3436
- sparse = sparse_dim not in (None, NotSpecified)
3437
- if sparse_dim in (None, NotSpecified):
3438
- if sparse:
3439
- assert dim is not NotSpecified, "need dim (num classes) if sparse"
3440
- assert dim is None or isinstance(dim, int)
3441
- sparse_dim = Dim(
3442
- kind=Dim.Types.Feature,
3443
- dimension=dim,
3444
- description="%s:sparse-dim" % name,
3445
- auto_generated=True,
3446
- )
3433
+ if vocab is None:
3434
+ return None
3435
+ sparse = True
3436
+ assert isinstance(sparse, bool)
3437
+ if not sparse:
3438
+ return None
3439
+ vocab = _get_vocab(vocab) if vocab else None
3440
+ if vocab:
3441
+ if dim is NotSpecified or dim is None:
3442
+ dim = vocab.num_labels
3447
3443
  else:
3448
- sparse_dim = None
3449
- if sparse_dim is not None:
3450
- assert isinstance(sparse_dim, Dim)
3451
- assert sparse_dim.can_be_used_as_dim()
3452
- assert sparse
3453
- if dim is not NotSpecified:
3454
- assert sparse_dim.dimension == dim
3455
- else:
3456
- assert not sparse
3444
+ assert dim == vocab.num_labels
3445
+ assert dim is not NotSpecified, "need dim (num classes) if sparse"
3446
+ assert dim is None or isinstance(dim, int)
3447
+ sparse_dim = Dim(
3448
+ kind=Dim.Types.Feature,
3449
+ dimension=dim,
3450
+ description="%s:sparse-dim" % name,
3451
+ auto_generated=True,
3452
+ vocab=vocab,
3453
+ )
3457
3454
  return sparse_dim
3458
3455
 
3459
3456
 
@@ -3535,6 +3532,17 @@ def infer_dim_tags(
3535
3532
  return dims
3536
3533
 
3537
3534
 
3535
+ def _get_vocab(vocab):
3536
+ from returnn.datasets.util.vocabulary import Vocabulary
3537
+
3538
+ if isinstance(vocab, str):
3539
+ vocab = Vocabulary(vocab)
3540
+ elif isinstance(vocab, dict):
3541
+ vocab = Vocabulary.create_vocab(**vocab)
3542
+ assert isinstance(vocab, Vocabulary)
3543
+ return vocab
3544
+
3545
+
3538
3546
  class _SizePlaceholderProxy:
3539
3547
  """
3540
3548
  This is a proxy object to emulate the original Tensor.size_placeholder behavior,
@@ -84,8 +84,8 @@ class Tensor(_TensorMixin, _TensorOpOverloadsMixin, Generic[RawTensorType]):
84
84
  - v2: time_dim_axis, feature_dim_axis are None by default.
85
85
  :param kwargs: see :func:`_handle_extra_kwargs`, :func:`infer_dim_tags`
86
86
  """
87
- if "sparse" in kwargs and sparse_dim is None:
88
- sparse_dim = _tensor_extra.infer_sparse_dim(name=name, sparse_dim=sparse_dim, **kwargs)
87
+ if ("sparse" in kwargs or "vocab" in kwargs) and sparse_dim is None:
88
+ sparse_dim = _tensor_extra.infer_sparse_dim(name=name, **kwargs)
89
89
  if dims is not None:
90
90
  assert "shape" not in kwargs and "dim_tags" not in kwargs # probably old code got this wrong
91
91
  if version is None:
@@ -8,10 +8,11 @@ from typing import Optional, Union, Sequence, List, Tuple, Dict
8
8
  import typing
9
9
  import tensorflow as tf
10
10
  import contextlib
11
+ from returnn.tensor import Tensor, Dim
11
12
  import returnn.tf.compat as tf_compat
12
13
  import returnn.tf.util.basic as tf_util
13
14
  from returnn.util.basic import unicode, NotSpecified
14
- from returnn.tf.util.data import Data, SearchBeam, Dim, FeatureDim, SpatialDim
15
+ from returnn.tf.util.data import Data, SearchBeam, FeatureDim, SpatialDim
15
16
  from returnn.tf.util.basic import OutputWithActivation, dimshuffle, swapaxes
16
17
  from returnn.log import log
17
18
  from .base import LayerBase, Loss, InternalLayer, SearchChoices
@@ -8445,7 +8446,7 @@ class TimeChunkingLayer(_ConcatInputLayer):
8445
8446
  x = x.copy_with_batch_dim_axis(1)
8446
8447
  self.input_data = x
8447
8448
  in_dim = x.dim_tags[0]
8448
- x_t = x.placeholder
8449
+ x_t = x.placeholder # [T,B,...]
8449
8450
  if in_dim.dyn_size is not None:
8450
8451
  index = tf.cast(tf_util.sequence_mask_time_major(in_dim.dyn_size), tf.float32)
8451
8452
  else:
@@ -8458,13 +8459,14 @@ class TimeChunkingLayer(_ConcatInputLayer):
8458
8459
  from returnn.tf.native_op import chunk
8459
8460
 
8460
8461
  out, oindex = chunk(x_t, index=index, chunk_step=chunk_step, chunk_size=chunk_size)
8462
+ # out shape (chunk_size, n_batch * n_chunks, n_dim), oindex shape (chunk_size, n_batch * n_chunks)
8461
8463
  if ext_rem_shape:
8462
- out = tf.reshape(out, tf.concat([tf.shape(oindex), ext_rem_shape], axis=0))
8464
+ out = tf.reshape(out, tf.concat([tf.shape(oindex), ext_rem_shape], axis=0)) # [C_size,B*C,...]
8463
8465
  self.output.placeholder = out
8464
8466
  out.set_shape(self.output.batch_shape)
8465
8467
  out_dim = self.output.dim_tags[0]
8466
8468
  if out_dim.dimension is None and out_dim.dyn_size is None:
8467
- out_dim.dyn_size = tf.reduce_sum(tf.cast(oindex, tf.int32), axis=0)
8469
+ out_dim.dyn_size = tf.reduce_sum(tf.cast(oindex, tf.int32), axis=0) # [B*C]
8468
8470
 
8469
8471
  @classmethod
8470
8472
  def get_out_data_from_opts(cls, name, sources, axis="T", out_dim=None, **kwargs):
@@ -8480,8 +8482,20 @@ class TimeChunkingLayer(_ConcatInputLayer):
8480
8482
  in_dim = data.dim_tags[axis]
8481
8483
  data = data.copy_move_axis(old_axis=axis, new_axis=0) # (T,...)
8482
8484
  data = data.copy_with_batch_dim_axis(1) # (T,B,...)
8485
+ old_batch_dim = data.get_batch_dim_tag()
8486
+ new_batch_dim = Dim(
8487
+ kind=old_batch_dim.kind,
8488
+ description=f"{name}:chunked_batch",
8489
+ dimension=Tensor(f"{name}:chunked_batch", [], "int32"), # unknown here...
8490
+ )
8491
+ data = data.copy_template_replace_dim_tag(1, new_batch_dim)
8483
8492
  if not out_dim:
8484
- out_dim = Dim(kind=in_dim.kind, description="%s:chunking" % name, auto_generated=True, dimension=None)
8493
+ out_dim = Dim(
8494
+ Tensor(f"{name}:chunk_size", [new_batch_dim], "int32"),
8495
+ kind=in_dim.kind,
8496
+ description=f"{name}:chunking",
8497
+ auto_generated=True,
8498
+ )
8485
8499
  data = data.copy_template_replace_dim_tag(axis=0, new_dim_tag=out_dim) # (T',B',...)
8486
8500
  data.time_dim_axis = 0
8487
8501
  return data
@@ -302,7 +302,6 @@ class TorchBackend(Backend[torch.Tensor]):
302
302
  pad_value: Union[None, int, float] = None,
303
303
  ) -> Tensor:
304
304
  """split dims"""
305
- assert not axis.need_masking() # not implemented
306
305
  assert pad_to_multiples in (None, False) # not implemented
307
306
  axis_ = source.get_axis_from_description(axis)
308
307
  out_dims = source.dims[:axis_] + tuple(dims) + source.dims[axis_ + 1 :]
@@ -1747,6 +1746,11 @@ class TorchBackend(Backend[torch.Tensor]):
1747
1746
  ) -> Tensor:
1748
1747
  """masked scatter"""
1749
1748
  assert mask.dtype == "bool"
1749
+ # Note: If mask.dims != dims, then sum(mask_raw.flatten()) could have less elements than source_raw
1750
+ # (not counting remaining_dims), and then the out_raw.masked_scatter_ below fails silently!
1751
+ # That's why we assert this here.
1752
+ # Currently in the RF code, we have a generic fallback implementation,
1753
+ # very similar to masked_select.
1750
1754
  assert set(mask.dims) == set(dims)
1751
1755
  assert in_dim in source.dims
1752
1756
  remaining_dims = [d for d in source.dims if d not in mask.dims and d != in_dim]
@@ -1765,6 +1769,7 @@ class TorchBackend(Backend[torch.Tensor]):
1765
1769
  out_dims = backup.dims
1766
1770
  out_raw = backup.raw_tensor.clone() # we operate inplace below
1767
1771
 
1772
+ mask = mask.copy_masked(mask_value=False)
1768
1773
  mask_raw = mask.copy_compatible_to_dims_raw(out_dims)
1769
1774
  out_raw.masked_scatter_(mask_raw, source_raw)
1770
1775
  return Tensor(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20250116.102559
3
+ Version: 1.20250117.155146
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
@@ -112,6 +112,7 @@ returnn/datasets/postprocessing.py
112
112
  returnn/datasets/raw_wav.py
113
113
  returnn/datasets/sprint.py
114
114
  returnn/datasets/stereo.py
115
+ returnn/datasets/text_dict.py
115
116
  returnn/datasets/util/__init__.py
116
117
  returnn/datasets/util/feature_extraction.py
117
118
  returnn/datasets/util/strings.py