returnn 1.20250116.102559__tar.gz → 1.20250117.110003__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.110003}/PKG-INFO +1 -1
  2. returnn-1.20250117.110003/_setup_info_generated.py +2 -0
  3. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/basic.py +1 -0
  4. returnn-1.20250117.110003/returnn/datasets/text_dict.py +259 -0
  5. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/util/vocabulary.py +9 -4
  6. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/_tensor_extra.py +40 -32
  7. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/tensor.py +2 -2
  8. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/layers/basic.py +19 -5
  9. {returnn-1.20250116.102559 → returnn-1.20250117.110003/returnn.egg-info}/PKG-INFO +1 -1
  10. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn.egg-info/SOURCES.txt +1 -0
  11. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TFNetworkLayer.py +75 -11
  12. returnn-1.20250116.102559/_setup_info_generated.py +0 -2
  13. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/.editorconfig +0 -0
  14. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/.gitignore +0 -0
  15. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/.gitmodules +0 -0
  16. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/.kateconfig +0 -0
  17. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/CHANGELOG.md +0 -0
  18. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/CODEOWNERS +0 -0
  19. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/CONTRIBUTING.md +0 -0
  20. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/LICENSE +0 -0
  21. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/MANIFEST.in +0 -0
  22. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/README.rst +0 -0
  23. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/__init__.py +0 -0
  24. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/12AX.cluster_map +0 -0
  25. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/_setup_returnn_env.py +0 -0
  26. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-fwd.config +0 -0
  27. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-horovod-mpi.py +0 -0
  28. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-horovod-mpi.py.sh +0 -0
  29. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-horovod-mpi.sh +0 -0
  30. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-hyper-param-tuning.config +0 -0
  31. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-iter-dataset.py +0 -0
  32. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-list-devices.py +0 -0
  33. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-lua-torch-layer.config +0 -0
  34. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-pretrain.config +0 -0
  35. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-record-and-push-to-webserver.py +0 -0
  36. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-returnn-as-framework.py +0 -0
  37. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-rf-pt-benchmark.py +0 -0
  38. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-rf.config +0 -0
  39. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-rhn-enwik8.config +0 -0
  40. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-sprint-interface.py +0 -0
  41. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-att-copy.config +0 -0
  42. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-attention.config +0 -0
  43. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  44. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  45. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-enc-dec.config +0 -0
  46. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-hard-att-copy.config +0 -0
  47. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-lstm-benchmark.py +0 -0
  48. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  49. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  50. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-native-lstm.12ax.config +0 -0
  51. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  52. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  53. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  54. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  55. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  56. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-rec-self-att.config +0 -0
  57. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-search-compiled-graph.py +0 -0
  58. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  59. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-timit-lstm-ctc.config +0 -0
  60. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-torch.config +0 -0
  61. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  62. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/demo.sh +0 -0
  63. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  64. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  65. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  66. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/README.txt +0 -0
  67. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/chars.txt +0 -0
  68. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/config_demo +0 -0
  69. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/config_fwd +0 -0
  70. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/config_real +0 -0
  71. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  72. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/decode.py +0 -0
  73. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  74. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/go.sh +0 -0
  75. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/lines.txt +0 -0
  76. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/split/eval.txt +0 -0
  77. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/split/train.txt +0 -0
  78. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/IAM/split/valid.txt +0 -0
  79. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/README.md +0 -0
  80. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  81. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/artificial/forwardconfig +0 -0
  82. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/artificial/go.sh +0 -0
  83. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/artificial/trainconfig +0 -0
  84. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  85. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  86. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  87. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  88. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/pyproject.toml +0 -0
  89. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/requirements.txt +0 -0
  90. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/__init__.py +0 -0
  91. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/__main__.py +0 -0
  92. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/__old_mod_loader__.py +0 -0
  93. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/__setup__.py +0 -0
  94. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/config.py +0 -0
  95. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/__init__.py +0 -0
  96. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/audio.py +0 -0
  97. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/bundle_file.py +0 -0
  98. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/cached.py +0 -0
  99. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/cached2.py +0 -0
  100. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/distrib_files.py +0 -0
  101. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/generating.py +0 -0
  102. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/hdf.py +0 -0
  103. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/lm.py +0 -0
  104. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/map.py +0 -0
  105. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/meta.py +0 -0
  106. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/multi_proc.py +0 -0
  107. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/normalization_data.py +0 -0
  108. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/numpy_dump.py +0 -0
  109. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/postprocessing.py +0 -0
  110. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/raw_wav.py +0 -0
  111. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/sprint.py +0 -0
  112. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/stereo.py +0 -0
  113. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/util/__init__.py +0 -0
  114. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/util/feature_extraction.py +0 -0
  115. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/datasets/util/strings.py +0 -0
  116. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/engine/__init__.py +0 -0
  117. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/engine/base.py +0 -0
  118. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/engine/batch.py +0 -0
  119. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/__init__.py +0 -0
  120. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/__main__.py +0 -0
  121. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  122. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  123. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  124. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  125. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  126. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  127. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  128. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  129. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  130. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  131. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  132. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  133. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  134. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  135. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  136. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  137. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  138. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  139. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  140. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  141. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  142. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  143. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  144. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  145. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  146. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/__init__.py +0 -0
  147. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/graph_editor/README.md +0 -0
  148. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/graph_editor/__init__.py +0 -0
  149. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/graph_editor/edit.py +0 -0
  150. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/graph_editor/reroute.py +0 -0
  151. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/graph_editor/select.py +0 -0
  152. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/graph_editor/subgraph.py +0 -0
  153. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/graph_editor/transform.py +0 -0
  154. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/extern/graph_editor/util.py +0 -0
  155. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/forward_iface.py +0 -0
  156. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/__init__.py +0 -0
  157. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_backend.py +0 -0
  158. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_cache.py +0 -0
  159. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_native/__init__.py +0 -0
  160. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_native/backend.cpp +0 -0
  161. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_native/backend.hpp +0 -0
  162. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_native/module.cpp +0 -0
  163. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_native/module.hpp +0 -0
  164. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_native/py_utils.hpp +0 -0
  165. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  166. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  167. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_numpy_backend.py +0 -0
  168. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_random_journal.py +0 -0
  169. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/_utils.py +0 -0
  170. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/array_.py +0 -0
  171. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/attention.py +0 -0
  172. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/audio/__init__.py +0 -0
  173. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/audio/mel.py +0 -0
  174. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/audio/specaugment.py +0 -0
  175. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/backend.py +0 -0
  176. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/build_from_dict.py +0 -0
  177. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/cond.py +0 -0
  178. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/const.py +0 -0
  179. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/container.py +0 -0
  180. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/control_flow_ctx.py +0 -0
  181. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/conv.py +0 -0
  182. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/conversions/__init__.py +0 -0
  183. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
  184. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/conversions/hf_llama.py +0 -0
  185. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/conversions/torch_nn.py +0 -0
  186. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/decoder/__init__.py +0 -0
  187. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/decoder/transformer.py +0 -0
  188. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/device.py +0 -0
  189. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/dims.py +0 -0
  190. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/dropout.py +0 -0
  191. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/dtype.py +0 -0
  192. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/encoder/__init__.py +0 -0
  193. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/encoder/base.py +0 -0
  194. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/encoder/conformer.py +0 -0
  195. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/encoder/conformer_v2.py +0 -0
  196. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/encoder/e_branchformer.py +0 -0
  197. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/encoder/transformer.py +0 -0
  198. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/gradient.py +0 -0
  199. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/graph.py +0 -0
  200. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/hooks.py +0 -0
  201. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/init.py +0 -0
  202. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/label_smoothing.py +0 -0
  203. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/linear.py +0 -0
  204. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/loop.py +0 -0
  205. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/loss.py +0 -0
  206. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/math_.py +0 -0
  207. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/matmul.py +0 -0
  208. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/module.py +0 -0
  209. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/normalization.py +0 -0
  210. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/parameter.py +0 -0
  211. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/parametrizations.py +0 -0
  212. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/parametrize.py +0 -0
  213. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/piecewise_linear.py +0 -0
  214. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/rand.py +0 -0
  215. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/rec.py +0 -0
  216. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/reduce.py +0 -0
  217. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/run_ctx.py +0 -0
  218. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/signal.py +0 -0
  219. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/state.py +0 -0
  220. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/stepwise_scheduler.py +0 -0
  221. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/tensor_array.py +0 -0
  222. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/frontend/types.py +0 -0
  223. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/import_/__init__.py +0 -0
  224. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/import_/common.py +0 -0
  225. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/import_/git.py +0 -0
  226. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/import_/import_.py +0 -0
  227. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/learning_rate_control.py +0 -0
  228. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/log.py +0 -0
  229. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/native_op.cpp +0 -0
  230. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/native_op.py +0 -0
  231. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/pretrain.py +0 -0
  232. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/sprint/__init__.py +0 -0
  233. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/sprint/cache.py +0 -0
  234. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/sprint/control.py +0 -0
  235. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/sprint/error_signals.py +0 -0
  236. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/sprint/extern_interface.py +0 -0
  237. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/sprint/interface.py +0 -0
  238. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/README.md +0 -0
  239. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/__init__.py +0 -0
  240. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/_dim_extra.py +0 -0
  241. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/_tensor_mixin_base.py +0 -0
  242. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/_tensor_op_overloads.py +0 -0
  243. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/control_flow_ctx.py +0 -0
  244. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/dim.py +0 -0
  245. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/marked_dim.py +0 -0
  246. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/tensor_dict.py +0 -0
  247. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tensor/utils.py +0 -0
  248. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/__init__.py +0 -0
  249. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/compat.py +0 -0
  250. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/data_pipeline.py +0 -0
  251. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/distributed.py +0 -0
  252. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/engine.py +0 -0
  253. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/README.md +0 -0
  254. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/__init__.py +0 -0
  255. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/_backend.py +0 -0
  256. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/_utils.py +0 -0
  257. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/cond.py +0 -0
  258. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  259. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  260. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/dims.py +0 -0
  261. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/layer.py +0 -0
  262. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/loop.py +0 -0
  263. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/make_layer.py +0 -0
  264. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  265. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  266. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  267. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_low_level/__init__.py +0 -0
  268. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/frontend_low_level/_backend.py +0 -0
  269. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/horovod.py +0 -0
  270. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/hyper_param_tuning.py +0 -0
  271. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/layers/__init__.py +0 -0
  272. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/layers/base.py +0 -0
  273. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/layers/rec.py +0 -0
  274. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/layers/segmental_model.py +0 -0
  275. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/layers/signal_processing.py +0 -0
  276. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/layers/variable.py +0 -0
  277. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/native_op.py +0 -0
  278. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/network.py +0 -0
  279. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/sprint.py +0 -0
  280. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/updater.py +0 -0
  281. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/util/__init__.py +0 -0
  282. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/util/basic.py +0 -0
  283. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/util/data.py +0 -0
  284. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/util/gradient_checkpoint.py +0 -0
  285. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/util/ken_lm.py +0 -0
  286. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/tf/util/open_fst.py +0 -0
  287. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/README.md +0 -0
  288. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/__init__.py +0 -0
  289. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/data/__init__.py +0 -0
  290. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/data/extern_data.py +0 -0
  291. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/data/pipeline.py +0 -0
  292. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/data/queued_data_iter.py +0 -0
  293. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  294. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/data/tensor_utils.py +0 -0
  295. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/distributed.py +0 -0
  296. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/engine.py +0 -0
  297. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/frontend/__init__.py +0 -0
  298. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/frontend/_backend.py +0 -0
  299. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/frontend/_rand.py +0 -0
  300. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/frontend/bridge.py +0 -0
  301. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/frontend/raw_ops.py +0 -0
  302. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/optim/README.md +0 -0
  303. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/optim/__init__.py +0 -0
  304. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/optim/lion.py +0 -0
  305. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/updater.py +0 -0
  306. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/README.md +0 -0
  307. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/__init__.py +0 -0
  308. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/array_.py +0 -0
  309. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/debug_inf_nan.py +0 -0
  310. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/diagnose_gpu.py +0 -0
  311. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/exception_helper.py +0 -0
  312. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/gradient_checkpoint.py +0 -0
  313. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/module.py +0 -0
  314. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/torch/util/scaled_gradient.py +0 -0
  315. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/__init__.py +0 -0
  316. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/basic.py +0 -0
  317. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/better_exchook.py +0 -0
  318. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/bpe.py +0 -0
  319. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/debug.py +0 -0
  320. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/debug_helpers.py +0 -0
  321. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/file_cache.py +0 -0
  322. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/fsa.py +0 -0
  323. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/literal_py_to_pickle.py +0 -0
  324. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/lru_cache.py +0 -0
  325. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/math.py +0 -0
  326. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  327. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/native_code_compiler.py +0 -0
  328. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/pprint.py +0 -0
  329. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/py-to-pickle.cpp +0 -0
  330. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/py_compat.py +0 -0
  331. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/py_ext_mod_compiler.py +0 -0
  332. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/result_with_reason.py +0 -0
  333. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/sig_proc.py +0 -0
  334. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/task_system.py +0 -0
  335. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/train_proc_manager.py +0 -0
  336. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn/util/watch_memory.py +0 -0
  337. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn.egg-info/dependency_links.txt +0 -0
  338. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/returnn.egg-info/top_level.txt +0 -0
  339. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/rnn.py +0 -0
  340. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/setup.cfg +0 -0
  341. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/setup.py +0 -0
  342. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/DummySprintExec.py +0 -0
  343. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm-inspection-profile.xml +0 -0
  344. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/.gitignore +0 -0
  345. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/.name +0 -0
  346. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  347. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  348. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  349. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  350. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  351. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/misc.xml +0 -0
  352. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/modules.xml +0 -0
  353. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/returnn.iml +0 -0
  354. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  355. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/_set_num_threads1.py +0 -0
  356. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/_setup_returnn_env.py +0 -0
  357. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/_setup_test_env.py +0 -0
  358. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/bpe-unicode-demo.codes +0 -0
  359. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/bpe-unicode-demo.vocab +0 -0
  360. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/lexicon_opt.fst +0 -0
  361. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/lexicon_opt.isyms +0 -0
  362. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/lexicon_opt.jpg +0 -0
  363. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/lexicon_opt.osyms +0 -0
  364. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/lint_common.py +0 -0
  365. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/pycharm-inspect.py +0 -0
  366. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/pylint.py +0 -0
  367. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/returnn-as-framework.py +0 -0
  368. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/rf_utils.py +0 -0
  369. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/spelling.dic +0 -0
  370. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_Config.py +0 -0
  371. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_Dataset.py +0 -0
  372. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_Fsa.py +0 -0
  373. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_GeneratingDataset.py +0 -0
  374. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_HDFDataset.py +0 -0
  375. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_LearningRateControl.py +0 -0
  376. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_Log.py +0 -0
  377. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_MultiProcDataset.py +0 -0
  378. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_Pretrain.py +0 -0
  379. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_ResNet.py +0 -0
  380. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_SprintDataset.py +0 -0
  381. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_SprintInterface.py +0 -0
  382. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TFEngine.py +0 -0
  383. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TFNativeOp.py +0 -0
  384. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TFNetworkRecLayer.py +0 -0
  385. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TFNetworkSigProcLayer.py +0 -0
  386. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TFUpdater.py +0 -0
  387. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TFUtil.py +0 -0
  388. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TF_determinism.py +0 -0
  389. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TaskSystem.py +0 -0
  390. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TaskSystem_SharedMem.py +0 -0
  391. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_TranslationDataset.py +0 -0
  392. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_Util.py +0 -0
  393. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_demos.py +0 -0
  394. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_fork_exec.py +0 -0
  395. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_hdf_dump.py +0 -0
  396. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_array.py +0 -0
  397. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_attention.py +0 -0
  398. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_base.py +0 -0
  399. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_cond.py +0 -0
  400. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_const.py +0 -0
  401. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_container.py +0 -0
  402. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_conv.py +0 -0
  403. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_decoder_transformer.py +0 -0
  404. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_encoder_conformer.py +0 -0
  405. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_gradient.py +0 -0
  406. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_label_smoothing.py +0 -0
  407. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_loop.py +0 -0
  408. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_math.py +0 -0
  409. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_normalization.py +0 -0
  410. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_piecewise_linear.py +0 -0
  411. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_rec.py +0 -0
  412. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_reduce.py +0 -0
  413. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_rf_signal.py +0 -0
  414. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_tensor.py +0 -0
  415. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_threading.py +0 -0
  416. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_tools.py +0 -0
  417. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_torch_dataset.py +0 -0
  418. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_torch_engine.py +0 -0
  419. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_torch_frontend.py +0 -0
  420. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_torch_internal_frontend.py +0 -0
  421. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/test_torch_util.py +0 -0
  422. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tests/torch_utils.py +0 -0
  423. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/_setup_returnn_env.py +0 -0
  424. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/analyze-dataset-batches.py +0 -0
  425. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/bliss-collect-seq-lens.py +0 -0
  426. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/bliss-dump-text.py +0 -0
  427. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/bliss-get-segment-names.py +0 -0
  428. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/bliss-to-ogg-zip.py +0 -0
  429. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/bpe-create-lexicon.py +0 -0
  430. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/calculate-word-error-rate.py +0 -0
  431. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/cleanup-old-models.py +0 -0
  432. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/collect-orth-symbols.py +0 -0
  433. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/collect-words.py +0 -0
  434. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/compile_native_op.py +0 -0
  435. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/compile_tf_graph.py +0 -0
  436. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/debug-dump-search-scores.py +0 -0
  437. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/debug-plot-search-scores.py +0 -0
  438. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/dump-dataset-raw-strings.py +0 -0
  439. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/dump-dataset.py +0 -0
  440. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/dump-forward-stats.py +0 -0
  441. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/dump-forward.py +0 -0
  442. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/dump-network-json.py +0 -0
  443. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/dump-pickle.py +0 -0
  444. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/extract_state_tying_from_dataset.py +0 -0
  445. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/get-attention-weights.py +0 -0
  446. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/get-best-model-epoch.py +0 -0
  447. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/hdf_dump.py +0 -0
  448. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/hdf_dump_translation_dataset.py +0 -0
  449. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/import-blocks-mt-model.py +0 -0
  450. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/import-t2t-mt-model.py +0 -0
  451. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/.gitignore +0 -0
  452. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/Makefile +0 -0
  453. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/README.md +0 -0
  454. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/example/README.md +0 -0
  455. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/example/libs_list +0 -0
  456. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/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.110003}/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.110003}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  459. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/example/state_vars_list +0 -0
  460. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  461. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/file.h +0 -0
  462. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  463. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  464. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/main.cc +0 -0
  465. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/rescorer.h +0 -0
  466. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/vocabulary.cc +0 -0
  467. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/lattice_rescorer/vocabulary.h +0 -0
  468. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/tf_avg_checkpoints.py +0 -0
  469. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/tf_inspect_checkpoint.py +0 -0
  470. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/tf_inspect_summary_log.py +0 -0
  471. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/torch_avg_checkpoints.py +0 -0
  472. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/torch_export_to_onnx.py +0 -0
  473. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/tools/torch_inspect_checkpoint.py +0 -0
  474. {returnn-1.20250116.102559 → returnn-1.20250117.110003}/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.110003
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.110003'
2
+ long_version = '1.20250117.110003+git.44fde7a'
@@ -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:
@@ -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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20250116.102559
3
+ Version: 1.20250117.110003
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
@@ -3313,18 +3313,25 @@ def test_out_shape():
3313
3313
 
3314
3314
 
3315
3315
  def _check_MergeDimsLayer(
3316
- session, in_data_opts, in_static_shape, opts, out_data_shape, out_static_shape, in_sizes=None, out_sizes=None
3317
- ):
3316
+ session: tf.compat.v1.Session,
3317
+ in_data_opts: Dict[str, Any],
3318
+ in_static_shape: Tuple[int, ...],
3319
+ opts: Dict[str, Any],
3320
+ out_data_shape: Tuple[Optional[int], ...],
3321
+ out_static_shape: Tuple[int, ...],
3322
+ in_sizes: Optional[Dict[int, Tuple[int, ...]]] = None,
3323
+ out_sizes: Optional[Dict[int, Tuple[int, ...]]] = None,
3324
+ ) -> MergeDimsLayer:
3318
3325
  """
3319
- :param tf.compat.v1.Session session:
3320
- :param dict[str] in_data_opts:
3321
- :param tuple[int] in_static_shape:
3322
- :param dict[str] opts: for MergeDimsLayer
3323
- :param tuple[int|None] out_data_shape:
3324
- :param tuple[int] out_static_shape:
3325
- :param dict[int,tuple[int]]|None in_sizes:
3326
- :param dict[int,tuple[int]]|None out_sizes:
3327
- :rtype: MergeDimsLayer
3326
+ :param session:
3327
+ :param in_data_opts:
3328
+ :param in_static_shape:
3329
+ :param opts: for MergeDimsLayer
3330
+ :param out_data_shape:
3331
+ :param out_static_shape:
3332
+ :param in_sizes:
3333
+ :param out_sizes:
3334
+ :return: layer
3328
3335
  """
3329
3336
  net = TFNetwork(extern_data=ExternData())
3330
3337
  rnd = numpy.random.RandomState(42)
@@ -9479,6 +9486,63 @@ def test_PostfixInTimeLayer():
9479
9486
  assert out[0, src_seq_lens[0] + repeat - 1, 0] == -7
9480
9487
 
9481
9488
 
9489
+ def test_TimeChunkingLayer():
9490
+ n_batch, n_time, n_in = 2, 11, 3
9491
+ in_v = numpy.arange(0, n_batch * n_time * n_in).astype("float32").reshape((n_batch, n_time, n_in))
9492
+ in_seq_lens = numpy.array([11, 9])
9493
+ config = Config({"extern_data": {"data": {"shape": (None, n_in)}}})
9494
+ with make_scope() as session:
9495
+ net = TFNetwork(config=config)
9496
+ net.construct_from_dict(
9497
+ {"output": {"class": "time_chunking", "chunk_size": 5, "chunk_step": 5, "from": "data"}}
9498
+ )
9499
+ out = net.get_default_output_layer().output
9500
+ print("out:", out)
9501
+ out_v, out_lens = session.run(
9502
+ (out.placeholder, out.get_sequence_lengths()),
9503
+ feed_dict={
9504
+ net.extern_data.get_batch_info().dim: n_batch,
9505
+ net.extern_data.data["data"].placeholder: in_v,
9506
+ net.extern_data.data["data"].get_sequence_lengths(): in_seq_lens,
9507
+ },
9508
+ )
9509
+ assert isinstance(out_v, numpy.ndarray)
9510
+ print(out_v.shape)
9511
+
9512
+
9513
+ def test_TimeChunkingLayer_TimeUnchunkingLayer():
9514
+ n_batch, n_time, n_in = 2, 11, 3
9515
+ in_v = numpy.arange(0, n_batch * n_time * n_in).astype("float32").reshape((n_batch, n_time, n_in))
9516
+ in_seq_lens = numpy.array([11, 9])
9517
+ for b in range(n_batch):
9518
+ in_v[b, in_seq_lens[b] :] = 0
9519
+ config = Config({"extern_data": {"data": {"shape": (None, n_in)}}})
9520
+ with make_scope() as session:
9521
+ net = TFNetwork(config=config)
9522
+ net.construct_from_dict(
9523
+ {
9524
+ "chunked": {"class": "time_chunking", "chunk_size": 5, "chunk_step": 5, "from": "data"},
9525
+ "output": {"class": "time_unchunking", "chunking_layer": "chunked", "from": "chunked"},
9526
+ }
9527
+ )
9528
+ in_ = net.get_layer("data").output
9529
+ out = net.get_default_output_layer().output
9530
+ print("out:", out)
9531
+ out = out.copy_transpose(in_.dims).copy_masked(0.0)
9532
+ out_v, out_lens = session.run(
9533
+ (out.placeholder, out.get_sequence_lengths()),
9534
+ feed_dict={
9535
+ net.extern_data.get_batch_info().dim: n_batch,
9536
+ net.extern_data.data["data"].placeholder: in_v,
9537
+ net.extern_data.data["data"].get_sequence_lengths(): in_seq_lens,
9538
+ },
9539
+ )
9540
+ assert isinstance(out_v, numpy.ndarray)
9541
+ assert out_v.shape == in_v.shape
9542
+ print(out_v)
9543
+ numpy.testing.assert_equal(out_v, in_v)
9544
+
9545
+
9482
9546
  def test_DotLayer():
9483
9547
  with make_scope() as session:
9484
9548
  B = 2
@@ -1,2 +0,0 @@
1
- version = '1.20250116.102559'
2
- long_version = '1.20250116.102559+git.dcae190'