returnn 1.20240620.105009__tar.gz → 1.20240621.130142__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 (449) hide show
  1. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/CHANGELOG.md +142 -9
  2. {returnn-1.20240620.105009/returnn.egg-info → returnn-1.20240621.130142}/PKG-INFO +1 -1
  3. returnn-1.20240621.130142/_setup_info_generated.py +2 -0
  4. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/distrib_files.py +1 -1
  5. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/util/vocabulary.py +41 -5
  6. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/bpe.py +91 -53
  7. {returnn-1.20240620.105009 → returnn-1.20240621.130142/returnn.egg-info}/PKG-INFO +1 -1
  8. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Util.py +132 -2
  9. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bpe-create-lexicon.py +1 -1
  10. returnn-1.20240620.105009/_setup_info_generated.py +0 -2
  11. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/.editorconfig +0 -0
  12. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/.gitignore +0 -0
  13. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/.gitmodules +0 -0
  14. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/.kateconfig +0 -0
  15. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/CODEOWNERS +0 -0
  16. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/CONTRIBUTING.md +0 -0
  17. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/LICENSE +0 -0
  18. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/MANIFEST.in +0 -0
  19. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/README.rst +0 -0
  20. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/__init__.py +0 -0
  21. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/12AX.cluster_map +0 -0
  22. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/_setup_returnn_env.py +0 -0
  23. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-fwd.config +0 -0
  24. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-horovod-mpi.py +0 -0
  25. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-horovod-mpi.py.sh +0 -0
  26. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-horovod-mpi.sh +0 -0
  27. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-hyper-param-tuning.config +0 -0
  28. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-iter-dataset.py +0 -0
  29. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-list-devices.py +0 -0
  30. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-lua-torch-layer.config +0 -0
  31. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-pretrain.config +0 -0
  32. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-record-and-push-to-webserver.py +0 -0
  33. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-returnn-as-framework.py +0 -0
  34. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-rf-pt-benchmark.py +0 -0
  35. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-rf.config +0 -0
  36. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-rhn-enwik8.config +0 -0
  37. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-sprint-interface.py +0 -0
  38. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-att-copy.config +0 -0
  39. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-attention.config +0 -0
  40. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  41. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  42. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-enc-dec.config +0 -0
  43. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-hard-att-copy.config +0 -0
  44. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-lstm-benchmark.py +0 -0
  45. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  46. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  47. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-native-lstm.12ax.config +0 -0
  48. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  49. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  50. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  51. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  52. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  53. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-rec-self-att.config +0 -0
  54. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-search-compiled-graph.py +0 -0
  55. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  56. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-timit-lstm-ctc.config +0 -0
  57. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-torch.config +0 -0
  58. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  59. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo.sh +0 -0
  60. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  61. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  62. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  63. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/README.txt +0 -0
  64. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/chars.txt +0 -0
  65. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/config_demo +0 -0
  66. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/config_fwd +0 -0
  67. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/config_real +0 -0
  68. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  69. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/decode.py +0 -0
  70. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  71. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/go.sh +0 -0
  72. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/lines.txt +0 -0
  73. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/split/eval.txt +0 -0
  74. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/split/train.txt +0 -0
  75. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/split/valid.txt +0 -0
  76. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/README.md +0 -0
  77. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  78. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial/forwardconfig +0 -0
  79. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial/go.sh +0 -0
  80. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial/trainconfig +0 -0
  81. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  82. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  83. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  84. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  85. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/pyproject.toml +0 -0
  86. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/requirements.txt +0 -0
  87. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/__init__.py +0 -0
  88. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/__main__.py +0 -0
  89. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/__old_mod_loader__.py +0 -0
  90. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/__setup__.py +0 -0
  91. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/config.py +0 -0
  92. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/__init__.py +0 -0
  93. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/audio.py +0 -0
  94. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/basic.py +0 -0
  95. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/bundle_file.py +0 -0
  96. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/cached.py +0 -0
  97. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/cached2.py +0 -0
  98. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/generating.py +0 -0
  99. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/hdf.py +0 -0
  100. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/lm.py +0 -0
  101. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/map.py +0 -0
  102. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/meta.py +0 -0
  103. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/multi_proc.py +0 -0
  104. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/normalization_data.py +0 -0
  105. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/numpy_dump.py +0 -0
  106. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/raw_wav.py +0 -0
  107. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/sprint.py +0 -0
  108. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/stereo.py +0 -0
  109. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/util/__init__.py +0 -0
  110. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/util/feature_extraction.py +0 -0
  111. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/util/strings.py +0 -0
  112. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/engine/__init__.py +0 -0
  113. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/engine/base.py +0 -0
  114. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/engine/batch.py +0 -0
  115. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/__init__.py +0 -0
  116. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/__main__.py +0 -0
  117. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  118. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  119. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  120. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  121. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  122. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  123. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  124. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  125. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  126. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  127. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  128. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  129. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  130. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  131. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  132. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  133. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  134. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  135. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  136. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  137. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  138. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  139. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  140. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  141. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  142. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/__init__.py +0 -0
  143. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/README.md +0 -0
  144. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/__init__.py +0 -0
  145. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/edit.py +0 -0
  146. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/reroute.py +0 -0
  147. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/select.py +0 -0
  148. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/subgraph.py +0 -0
  149. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/transform.py +0 -0
  150. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/util.py +0 -0
  151. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/forward_iface.py +0 -0
  152. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/__init__.py +0 -0
  153. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_backend.py +0 -0
  154. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/__init__.py +0 -0
  155. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/backend.cpp +0 -0
  156. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/backend.hpp +0 -0
  157. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/module.cpp +0 -0
  158. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/module.hpp +0 -0
  159. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/py_utils.hpp +0 -0
  160. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  161. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  162. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_numpy_backend.py +0 -0
  163. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_random_journal.py +0 -0
  164. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_utils.py +0 -0
  165. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/array_.py +0 -0
  166. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/attention.py +0 -0
  167. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/audio/__init__.py +0 -0
  168. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/audio/mel.py +0 -0
  169. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/audio/specaugment.py +0 -0
  170. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/backend.py +0 -0
  171. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/build_from_dict.py +0 -0
  172. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/cond.py +0 -0
  173. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/const.py +0 -0
  174. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/container.py +0 -0
  175. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/control_flow_ctx.py +0 -0
  176. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/conv.py +0 -0
  177. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/decoder/__init__.py +0 -0
  178. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/decoder/transformer.py +0 -0
  179. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/device.py +0 -0
  180. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/dims.py +0 -0
  181. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/dropout.py +0 -0
  182. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/dtype.py +0 -0
  183. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/encoder/__init__.py +0 -0
  184. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/encoder/base.py +0 -0
  185. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/encoder/conformer.py +0 -0
  186. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/gradient.py +0 -0
  187. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/graph.py +0 -0
  188. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/hooks.py +0 -0
  189. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/init.py +0 -0
  190. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/label_smoothing.py +0 -0
  191. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/linear.py +0 -0
  192. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/loop.py +0 -0
  193. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/loss.py +0 -0
  194. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/math_.py +0 -0
  195. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/matmul.py +0 -0
  196. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/module.py +0 -0
  197. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/normalization.py +0 -0
  198. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/parameter.py +0 -0
  199. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/piecewise_linear.py +0 -0
  200. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/rand.py +0 -0
  201. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/rec.py +0 -0
  202. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/reduce.py +0 -0
  203. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/run_ctx.py +0 -0
  204. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/signal.py +0 -0
  205. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/state.py +0 -0
  206. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/stepwise_scheduler.py +0 -0
  207. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/tensor_array.py +0 -0
  208. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/types.py +0 -0
  209. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/import_/__init__.py +0 -0
  210. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/import_/common.py +0 -0
  211. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/import_/git.py +0 -0
  212. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/import_/import_.py +0 -0
  213. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/learning_rate_control.py +0 -0
  214. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/log.py +0 -0
  215. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/native_op.cpp +0 -0
  216. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/native_op.py +0 -0
  217. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/pretrain.py +0 -0
  218. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/__init__.py +0 -0
  219. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/cache.py +0 -0
  220. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/control.py +0 -0
  221. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/error_signals.py +0 -0
  222. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/extern_interface.py +0 -0
  223. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/interface.py +0 -0
  224. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/README.md +0 -0
  225. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/__init__.py +0 -0
  226. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/_dim_extra.py +0 -0
  227. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/_tensor_extra.py +0 -0
  228. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/_tensor_mixin_base.py +0 -0
  229. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/_tensor_op_overloads.py +0 -0
  230. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/control_flow_ctx.py +0 -0
  231. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/dim.py +0 -0
  232. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/marked_dim.py +0 -0
  233. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/tensor.py +0 -0
  234. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/tensor_dict.py +0 -0
  235. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/utils.py +0 -0
  236. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/__init__.py +0 -0
  237. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/compat.py +0 -0
  238. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/data_pipeline.py +0 -0
  239. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/distributed.py +0 -0
  240. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/engine.py +0 -0
  241. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/README.md +0 -0
  242. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/__init__.py +0 -0
  243. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/_backend.py +0 -0
  244. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/_utils.py +0 -0
  245. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/cond.py +0 -0
  246. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  247. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  248. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/dims.py +0 -0
  249. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/layer.py +0 -0
  250. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/loop.py +0 -0
  251. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/make_layer.py +0 -0
  252. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  253. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  254. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  255. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_low_level/__init__.py +0 -0
  256. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_low_level/_backend.py +0 -0
  257. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/horovod.py +0 -0
  258. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/hyper_param_tuning.py +0 -0
  259. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/__init__.py +0 -0
  260. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/base.py +0 -0
  261. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/basic.py +0 -0
  262. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/rec.py +0 -0
  263. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/segmental_model.py +0 -0
  264. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/signal_processing.py +0 -0
  265. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/variable.py +0 -0
  266. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/native_op.py +0 -0
  267. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/network.py +0 -0
  268. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/sprint.py +0 -0
  269. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/updater.py +0 -0
  270. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/__init__.py +0 -0
  271. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/basic.py +0 -0
  272. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/data.py +0 -0
  273. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/gradient_checkpoint.py +0 -0
  274. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/ken_lm.py +0 -0
  275. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/open_fst.py +0 -0
  276. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/README.md +0 -0
  277. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/__init__.py +0 -0
  278. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/__init__.py +0 -0
  279. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/extern_data.py +0 -0
  280. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/pipeline.py +0 -0
  281. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/queued_data_iter.py +0 -0
  282. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  283. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/tensor_utils.py +0 -0
  284. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/distributed.py +0 -0
  285. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/engine.py +0 -0
  286. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/__init__.py +0 -0
  287. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/_backend.py +0 -0
  288. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/_rand.py +0 -0
  289. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/bridge.py +0 -0
  290. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/raw_ops.py +0 -0
  291. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/updater.py +0 -0
  292. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/util/README.md +0 -0
  293. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/util/__init__.py +0 -0
  294. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/util/diagnose_gpu.py +0 -0
  295. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/util/scaled_gradient.py +0 -0
  296. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/__init__.py +0 -0
  297. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/basic.py +0 -0
  298. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/better_exchook.py +0 -0
  299. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/debug.py +0 -0
  300. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/debug_helpers.py +0 -0
  301. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/file_cache.py +0 -0
  302. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/fsa.py +0 -0
  303. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/literal_py_to_pickle.py +0 -0
  304. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/math.py +0 -0
  305. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  306. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/native_code_compiler.py +0 -0
  307. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/pprint.py +0 -0
  308. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/py-to-pickle.cpp +0 -0
  309. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/py_compat.py +0 -0
  310. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/py_ext_mod_compiler.py +0 -0
  311. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/result_with_reason.py +0 -0
  312. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/sig_proc.py +0 -0
  313. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/task_system.py +0 -0
  314. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/train_proc_manager.py +0 -0
  315. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/watch_memory.py +0 -0
  316. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn.egg-info/SOURCES.txt +0 -0
  317. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn.egg-info/dependency_links.txt +0 -0
  318. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn.egg-info/top_level.txt +0 -0
  319. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/rnn.py +0 -0
  320. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/setup.cfg +0 -0
  321. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/setup.py +0 -0
  322. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/DummySprintExec.py +0 -0
  323. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm-inspection-profile.xml +0 -0
  324. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/.gitignore +0 -0
  325. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/.name +0 -0
  326. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  327. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  328. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  329. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  330. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  331. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/misc.xml +0 -0
  332. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/modules.xml +0 -0
  333. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/returnn.iml +0 -0
  334. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  335. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/_set_num_threads1.py +0 -0
  336. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/_setup_returnn_env.py +0 -0
  337. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/_setup_test_env.py +0 -0
  338. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/bpe-unicode-demo.codes +0 -0
  339. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/bpe-unicode-demo.vocab +0 -0
  340. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lexicon_opt.fst +0 -0
  341. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lexicon_opt.isyms +0 -0
  342. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lexicon_opt.jpg +0 -0
  343. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lexicon_opt.osyms +0 -0
  344. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lint_common.py +0 -0
  345. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/pycharm-inspect.py +0 -0
  346. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/pylint.py +0 -0
  347. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/returnn-as-framework.py +0 -0
  348. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/rf_utils.py +0 -0
  349. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/spelling.dic +0 -0
  350. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Config.py +0 -0
  351. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Dataset.py +0 -0
  352. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Fsa.py +0 -0
  353. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_GeneratingDataset.py +0 -0
  354. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_HDFDataset.py +0 -0
  355. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_LearningRateControl.py +0 -0
  356. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Log.py +0 -0
  357. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_MultiProcDataset.py +0 -0
  358. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Pretrain.py +0 -0
  359. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_ResNet.py +0 -0
  360. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_SprintDataset.py +0 -0
  361. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_SprintInterface.py +0 -0
  362. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFEngine.py +0 -0
  363. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFNativeOp.py +0 -0
  364. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFNetworkLayer.py +0 -0
  365. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFNetworkRecLayer.py +0 -0
  366. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFNetworkSigProcLayer.py +0 -0
  367. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFUpdater.py +0 -0
  368. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFUtil.py +0 -0
  369. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TF_determinism.py +0 -0
  370. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TaskSystem.py +0 -0
  371. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TaskSystem_SharedMem.py +0 -0
  372. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TranslationDataset.py +0 -0
  373. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_demos.py +0 -0
  374. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_fork_exec.py +0 -0
  375. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_hdf_dump.py +0 -0
  376. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_array.py +0 -0
  377. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_attention.py +0 -0
  378. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_base.py +0 -0
  379. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_cond.py +0 -0
  380. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_const.py +0 -0
  381. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_container.py +0 -0
  382. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_conv.py +0 -0
  383. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_encoder_conformer.py +0 -0
  384. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_gradient.py +0 -0
  385. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_label_smoothing.py +0 -0
  386. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_loop.py +0 -0
  387. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_math.py +0 -0
  388. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_normalization.py +0 -0
  389. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_piecewise_linear.py +0 -0
  390. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_rec.py +0 -0
  391. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_reduce.py +0 -0
  392. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_signal.py +0 -0
  393. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_tensor.py +0 -0
  394. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_tools.py +0 -0
  395. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_torch_dataset.py +0 -0
  396. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_torch_engine.py +0 -0
  397. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_torch_frontend.py +0 -0
  398. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_torch_internal_frontend.py +0 -0
  399. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/_setup_returnn_env.py +0 -0
  400. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/analyze-dataset-batches.py +0 -0
  401. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bliss-collect-seq-lens.py +0 -0
  402. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bliss-dump-text.py +0 -0
  403. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bliss-get-segment-names.py +0 -0
  404. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bliss-to-ogg-zip.py +0 -0
  405. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/calculate-word-error-rate.py +0 -0
  406. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/cleanup-old-models.py +0 -0
  407. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/collect-orth-symbols.py +0 -0
  408. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/collect-words.py +0 -0
  409. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/compile_native_op.py +0 -0
  410. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/compile_tf_graph.py +0 -0
  411. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/debug-dump-search-scores.py +0 -0
  412. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/debug-plot-search-scores.py +0 -0
  413. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-dataset-raw-strings.py +0 -0
  414. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-dataset.py +0 -0
  415. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-forward-stats.py +0 -0
  416. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-forward.py +0 -0
  417. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-network-json.py +0 -0
  418. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-pickle.py +0 -0
  419. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/extract_state_tying_from_dataset.py +0 -0
  420. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/get-attention-weights.py +0 -0
  421. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/get-best-model-epoch.py +0 -0
  422. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/hdf_dump.py +0 -0
  423. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/hdf_dump_translation_dataset.py +0 -0
  424. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/import-blocks-mt-model.py +0 -0
  425. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/import-t2t-mt-model.py +0 -0
  426. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/.gitignore +0 -0
  427. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/Makefile +0 -0
  428. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/README.md +0 -0
  429. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/README.md +0 -0
  430. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/libs_list +0 -0
  431. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  432. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
  433. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  434. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/state_vars_list +0 -0
  435. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  436. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/file.h +0 -0
  437. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  438. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  439. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/main.cc +0 -0
  440. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/rescorer.h +0 -0
  441. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/vocabulary.cc +0 -0
  442. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/vocabulary.h +0 -0
  443. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/tf_avg_checkpoints.py +0 -0
  444. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/tf_inspect_checkpoint.py +0 -0
  445. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/tf_inspect_summary_log.py +0 -0
  446. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/torch_avg_checkpoints.py +0 -0
  447. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/torch_export_to_onnx.py +0 -0
  448. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/torch_inspect_checkpoint.py +0 -0
  449. {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
@@ -6,6 +6,139 @@ or any changes which could potentially break or change the behavior of existing
6
6
  This is intentionally kept short. For a full change log, just see the Git log.
7
7
 
8
8
 
9
+ ## 2024-06-07: `VariableDataset`
10
+
11
+ Custom subdataset per subepoch based on user-provided function.
12
+ Can be useful for advanced training pipeline
13
+ where you create some HDFs on-the-fly (e.g. for alignments)
14
+ and then want to load them in later epochs.
15
+
16
+ ## 2024-05-28: [`DistributeFilesDataset`](https://github.com/rwth-i6/returnn/blob/master/returnn/datasets/distrib_files.py) ([PR #1521](https://github.com/rwth-i6/returnn/pull/1521), [issue #1519](https://github.com/rwth-i6/returnn/issues/1519))
17
+
18
+ `DistributeDataset` together with `FileCache`
19
+ allows to train on very large datasets which do not fit on the local disk.
20
+ `DistributeDataset` operates on a list of files,
21
+ and for each sub-epoch will only select a subset of the files,
22
+ and `FileCache` will cache the files locally.
23
+
24
+ It also was specifically designed with distributed training in mind.
25
+ The distributed random_seed_offset method can be used,
26
+ but sharding is also supported ([PR #1538](https://github.com/rwth-i6/returnn/pull/1538)).
27
+
28
+ ## 2023-11-09: `LearningRateControl` saves more meta info in learning-rate-file
29
+
30
+ Like effective learning rate (after `dynamic_learning_rate`),
31
+ training step, GPU, RETURNN version, etc.
32
+ (Was extended a bit over time.)
33
+
34
+ ## 2024-01-09: [Train proc manager](https://github.com/rwth-i6/returnn/blob/master/returnn/util/train_proc_manager.py)
35
+
36
+ Auto restart RETURNN on crashes under certain conditions
37
+ (e.g. it must have trained at least one epoch successfully since the most recent restart).
38
+
39
+ ## 2023-12-30: PyTorch handle OOM for forwarding, auto-split batch
40
+
41
+ This went through several iterations of approaches,
42
+ stumbling through a number of CPython and PyTorch bugs,
43
+ e.g. [CPython #113939](https://github.com/python/cpython/issues/113939),
44
+ [PyTorch #18853](https://github.com/pytorch/pytorch/issues/18853),
45
+ [PyTorch #27600](https://github.com/pytorch/pytorch/issues/27600).
46
+
47
+ ## 2023-12-23: PyTorch distributed training with param averaging
48
+
49
+ In the `torch_distributed` config dict: Set `"reduce_type": "param"` and `"param_sync_step": ...`.
50
+
51
+ ## 2023-10-24: [`watch_memory`](https://github.com/rwth-i6/returnn/blob/master/returnn/util/watch_memory.py): watches memory of all procs
52
+
53
+ ## 2023-10-03: RETURNN frontend (RF) native helpers ([PR #1403](https://github.com/rwth-i6/returnn/pull/1403))
54
+
55
+ ## 2023-06-09: PyTorch distributed training ([PR #1335](https://github.com/rwth-i6/returnn/pull/1335), [issue #1332](https://github.com/rwth-i6/returnn/issues/1332))
56
+
57
+ `torch_distributed` config setting.
58
+ Using the official PyTorch `DistributedDataParallel`, i.e. synchronized accumulated gradients.
59
+ Each worker uses a different `random_seed_offset` for the dataset.
60
+
61
+ ## 2023-05-15: PyTorch automatic mixed precision (AMP) support ([PR #1322](https://github.com/rwth-i6/returnn/pull/1322))
62
+
63
+ ## 2023-04-03: PyTorch `preload_from_files` support ([PR #1292](https://github.com/rwth-i6/returnn/pull/1292))
64
+
65
+ ## 2023-03-26: [`MultiProcDataset`](https://github.com/rwth-i6/returnn/blob/master/returnn/datasets/multi_proc.py)
66
+
67
+ ## 2023-02-24: Make [`Tensor` and `Dim`](https://returnn.readthedocs.io/en/latest/getting_started/data.html) backend independent ([PR #1261](https://github.com/rwth-i6/returnn/pull/1261), [issue #1165](https://github.com/rwth-i6/returnn/issues/1165))
68
+
69
+ * Rename `Data` to `Tensor`, `DimensionTag` to `Dim`.
70
+ * Before, in our `Tensor`, the `placeholder` (now `raw_tensor`) was either None (as a template)
71
+ or a TensorFlow tensor (`tf.Tensor`).
72
+ Now it can support any raw tensor type.
73
+ * Now `Tensor` and `Dim` are moved to `returnn.tensor`.
74
+
75
+ ## 2023-02-20: RETURNN frontend (RF) ([issue #1120](https://github.com/rwth-i6/returnn/issues/1120), [issue #1264](https://github.com/rwth-i6/returnn/issues/1264))
76
+
77
+ Modern alternative to the network dictionary to define models.
78
+ Using Python code to define the network,
79
+ very similar to how it is done in PyTorch or Keras or Flax.
80
+
81
+ This evolved from [`returnn_common.nn`](https://github.com/rwth-i6/returnn_common/tree/main/nn) ([example](https://github.com/rwth-i6/returnn_common/wiki/RETURNN-example-config)),
82
+ which provided already a very similar API.
83
+ But now, we build it such that we support multiple backends.
84
+ Specifically, the current supported (or planned) backends:
85
+
86
+ * PyTorch (fully supported)
87
+ * RETURNN network dictionary (TensorFlow) (fully supported)
88
+ (copied the `returnn_common.nn` code)
89
+ (this might be deprecated in the future)
90
+ * TensorFlow (directly) (mostly supported)
91
+ * NumPy (partially supported)
92
+ * JAX (planned)
93
+
94
+ ## 2023-02-03: Use `black`, drop Python 2 support ([PR #1255](https://github.com/rwth-i6/returnn/pull/1255), [issue #487](https://github.com/rwth-i6/returnn/issues/487), [issue #1158](https://github.com/rwth-i6/returnn/issues/1158))
95
+
96
+ ## 2022-10-24: Remove Theano backend ([PR #1164](https://github.com/rwth-i6/returnn/pull/1164))
97
+
98
+ ## 2022-09-12: PyTorch backend started ([issue #1120](https://github.com/rwth-i6/returnn/issues/1120))
99
+
100
+ This evolved over time.
101
+ It was planned from the beginning
102
+ to support pure PyTorch models defined by the user
103
+ but also RETURNN frontend (RF) models.
104
+
105
+ ## 2022-04-24: TF eager execution initial support
106
+
107
+ ## 2022-02-11: TF loss auto-flatten optimization ([PR #906](https://github.com/rwth-i6/returnn/pull/906))
108
+
109
+ ## 2021-09-12: TF generalized attention, `CumConcatLayer` ([PR #589](https://github.com/rwth-i6/returnn/pull/589), [issue #391](https://github.com/rwth-i6/returnn/issues/391))
110
+
111
+ Generalizes `SelfAttentionLayer` to allow for more custom variants.
112
+ The difficulties were to support this when being inside a `RecLayer`
113
+ and then when the optimization would move it outside the loop.
114
+ For this, we introduced `CumConcatLayer`.
115
+ [Example config for decoder self-attention](https://github.com/rwth-i6/returnn/issues/391#issuecomment-917517032).
116
+ This can also be used just in the encoder, i.e. outside a `RecLayer` anyway
117
+ via `ReinterpretDataLayer` to create a new dim tag.
118
+ [Example config for encoder self-attention](https://github.com/rwth-i6/returnn/issues/391#issuecomment-919873563).
119
+
120
+ ## 2021-08-25: Explicit `Data` dimension tags ([PR #579](https://github.com/rwth-i6/returnn/pull/579))
121
+
122
+ `Data` (later called `Tensor`) has `dim_tags` (later called `dims`)
123
+ to describe the full shape, i.e. the dims of each axis.
124
+ These are `DimensionTag` (later `Dim`) objects.
125
+ Before this change, we already had dim tags but only for dynamic dims.
126
+ Now they are consistently used for all dims.
127
+ This makes everything more consistent and more in line
128
+ with other named tensors / named dimensions frameworks.
129
+
130
+ ## 2021-06-11: [Behavior versions](https://returnn.readthedocs.io/en/latest/configuration_reference/behavior_version.html) ([PR #534](https://github.com/rwth-i6/returnn/pull/534), [issue #508](https://github.com/rwth-i6/returnn/issues/508))
131
+
132
+ Setting `behavior_version` in config control the behavior of RETURNN
133
+ and allows to update bad/buggy/broken behavior without changing behavior for existing setups.
134
+
135
+ ## 2021-06-04: Start of [`returnn_common.nn`](https://github.com/rwth-i6/returnn_common/tree/main/nn)
136
+
137
+ Allows to define the RETURNN network dictionary using a more modern Python API,
138
+ very similar to PyTorch or Keras.
139
+ [Example](https://github.com/rwth-i6/returnn_common/wiki/RETURNN-example-config).
140
+ Note that this later got merged into RETURNN frontend (RF).
141
+
9
142
  ## 2021-03-18: Subnetwork sub layer can be independent ([#473](https://github.com/rwth-i6/returnn/pull/473))
10
143
 
11
144
  This has an effect on recurrent subnetworks.
@@ -103,25 +236,25 @@ This will show the same information as before, but much more compact,
103
236
  and also in addition the dimension tags (`DimensionTag`),
104
237
  which also got improved in many further cases.
105
238
 
106
- ## 2019-08-07: overlay nets (`extra_nets`)
239
+ ## 2019-08-07: Overlay nets (`extra_nets`)
107
240
 
108
241
  You can have e.g. multiple additional networks which redefine
109
242
  existing layers (they would automatically share params),
110
243
  which can use different flags (e.g. enable the search flag).
111
244
 
112
- ## 2019-07: multiple stochastic (latent) variables
245
+ ## 2019-07: Multiple stochastic (latent) variables
113
246
 
114
247
  It was designed to support this from the very beginning,
115
248
  but the implementation was never fully finished for this.
116
249
  Now examples like hard attention work.
117
250
 
118
- ## 2019-05: better support for RETURNN as a framework
251
+ ## 2019-05: Better support for RETURNN as a framework
119
252
 
120
253
  `pip install returnn`, and then `import returnn`.
121
254
 
122
- ## 2019-03-29: remove hard Theano dependency
255
+ ## 2019-03-29: Remove hard Theano dependency
123
256
 
124
- ## 2019-03-24 and ongoing: automatic linter checks
257
+ ## 2019-03-24 and ongoing: Automatic linter checks
125
258
 
126
259
  Currently pylint and PyCharm inspection checks automatically run in Travis.
127
260
  Both have some false positives, but so far the PyCharm inspections seems much more sane.
@@ -180,16 +313,16 @@ and then later `SplitBatchTimeLayer` to get the time-axis back, it was likely in
180
313
 
181
314
  ## 2019-01-30: video: RETURNN overview
182
315
 
183
- ## 2018-08: multi-GPU support via [Horovod](https://github.com/horovod/horovod)
316
+ ## 2018-08: Multi-GPU support via [Horovod](https://github.com/horovod/horovod)
184
317
 
185
- ## 2017-05: flexible `RecLayer`, encoder-decoder attention, beam search (Albert Zeyer)
318
+ ## 2017-05: Flexible `RecLayer`, encoder-decoder attention, beam search (Albert Zeyer)
186
319
 
187
- ## 2016-12: start on [TensorFlow](https://www.tensorflow.org/) support (Albert Zeyer)
320
+ ## 2016-12: Start on [TensorFlow](https://www.tensorflow.org/) support (Albert Zeyer)
188
321
 
189
322
  Initial working support already finished within that month.
190
323
  TF 0.12.0.
191
324
 
192
- ## 2015-07: fast CUDA LSTM kernel (Paul Voigtlaender)
325
+ ## 2015-07: Fast CUDA LSTM kernel (Paul Voigtlaender)
193
326
  ## 2015-03: `SprintDataset`, interface to [RASR](https://www-i6.informatik.rwth-aachen.de/rwth-asr/) (Albert Zeyer)
194
327
  ## 2015-01: Albert Zeyer joined
195
328
  ## ~2013-2014 (?): Patrick Doetsch started the project (Theano)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20240620.105009
3
+ Version: 1.20240621.130142
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.20240621.130142'
2
+ long_version = '1.20240621.130142+git.08c1ad5'
@@ -161,7 +161,7 @@ class DistributeFilesDataset(CachedDataset2):
161
161
  self._file_sizes: Optional[Dict[str, int]] = None # key -> size. for equal distribution across sub epochs
162
162
  self._data_keys: Optional[List[str]] = None
163
163
  self._num_seqs: Optional[int] = None
164
- self._shard_index, self._num_shards = _get_rank_and_size() if distrib_shard_files else 0, 1
164
+ self._shard_index, self._num_shards = _get_rank_and_size() if distrib_shard_files else (0, 1)
165
165
 
166
166
  self._file_cache: Optional[_FileCacheProc] = None
167
167
  self._workers: Dict[int, _WorkerProcParent] = {} # epoch -> worker
@@ -19,6 +19,7 @@ import sys
19
19
  import numpy
20
20
 
21
21
  from returnn.log import log
22
+ from returnn.util.basic import NotSpecified
22
23
 
23
24
 
24
25
  class Vocabulary(object):
@@ -327,14 +328,48 @@ class SamplingBytePairEncoding(Vocabulary):
327
328
  This will encode the text on-the-fly with BPE.
328
329
  """
329
330
 
330
- def __init__(self, vocab_file, breadth_prob, seq_postfix=None, **kwargs):
331
+ def __init__(
332
+ self,
333
+ vocab_file: str,
334
+ breadth_prob: float,
335
+ seq_postfix: Optional[List[int]] = None,
336
+ label_postfix_merge_symbol: Optional[str] = NotSpecified,
337
+ word_prefix_symbol: Optional[str] = NotSpecified,
338
+ **kwargs,
339
+ ):
331
340
  """
332
- :param str vocab_file:
333
- :param float breadth_prob:
334
- :param list[int]|None seq_postfix: labels will be added to the seq in self.get_seq
341
+ :param vocab_file:
342
+ :param breadth_prob:
343
+ :param seq_postfix: labels will be added to the seq in self.get_seq
344
+ :param label_postfix_merge_symbol: If given, will use this as label postfix merge symbol,
345
+ i.e. when this occurs at the end of a label, it is supposed to be merged with the next label,
346
+ i.e. the space between them is removed and is not a word boundary.
347
+ If None, will not use any postfix merge symbol.
348
+ If not specified, and also word_prefix_symbol is not specified, will use "@@" by default here,
349
+ the standard from subword-nmt, and our original behavior.
350
+ :param word_prefix_symbol: If given, every new word starts with this symbol.
351
+ This also implies that there are no spaces between words
352
+ and this symbol is a placeholder for the space.
353
+ If None, will not use this logic.
354
+ For SentencePiece, you usually would use "▁" here.
335
355
  """
336
356
  super(SamplingBytePairEncoding, self).__init__(vocab_file=vocab_file, seq_postfix=seq_postfix, **kwargs)
337
- from returnn.util.bpe import SamplingBytePairEncoder
357
+ from returnn.util.bpe import SamplingBytePairEncoder, BpePostMergeSymbol, BpeOpts
358
+
359
+ if label_postfix_merge_symbol is NotSpecified and word_prefix_symbol is NotSpecified:
360
+ label_postfix_merge_symbol = BpePostMergeSymbol
361
+ word_prefix_symbol = None
362
+ else:
363
+ if label_postfix_merge_symbol is NotSpecified:
364
+ label_postfix_merge_symbol = None
365
+ if word_prefix_symbol is NotSpecified:
366
+ word_prefix_symbol = None
367
+ if word_prefix_symbol is not None:
368
+ # I'm not sure if this makes sense otherwise...
369
+ assert label_postfix_merge_symbol is None, (
370
+ f"{self}: word_prefix_symbol {word_prefix_symbol},"
371
+ f" label_postfix_merge_symbol {label_postfix_merge_symbol}"
372
+ )
338
373
 
339
374
  self.rnd = numpy.random.RandomState(0)
340
375
  self.bpe = SamplingBytePairEncoder(
@@ -342,6 +377,7 @@ class SamplingBytePairEncoding(Vocabulary):
342
377
  breadth_prob=breadth_prob,
343
378
  rnd=self.rnd,
344
379
  unknown_label=self.id_to_label(self.unknown_label_id) if self.unknown_label_id is not None else None,
380
+ opts=BpeOpts(label_postfix_merge_symbol=label_postfix_merge_symbol, word_prefix_symbol=word_prefix_symbol),
345
381
  )
346
382
 
347
383
  def set_random_seed(self, seed):
@@ -4,6 +4,7 @@ Provide basic Byte-Pair-Encoding (BPE) utilities.
4
4
 
5
5
  from __future__ import annotations
6
6
  from typing import Optional, List, Dict, Callable
7
+ from dataclasses import dataclass
7
8
  import re
8
9
  import numpy
9
10
 
@@ -227,70 +228,69 @@ class StandardBytePairEncoder:
227
228
  return output
228
229
 
229
230
 
231
+ @dataclass
232
+ class BpeOpts:
233
+ """
234
+ Options, should allow for both subword-nmt BPE and SentencePiece BPE/Unigram.
235
+ """
236
+
237
+ label_postfix_merge_symbol: Optional[str] = None # eg. "@@"
238
+ word_prefix_symbol: Optional[str] = None # eg. "▁"
239
+
240
+
230
241
  class PrefixTree:
231
242
  """
232
243
  Prefix tree / trie.
233
244
  This class represents both a single node and the tree.
234
245
  """
235
246
 
236
- def __init__(self, prefix: str = "", root: Optional[PrefixTree] = None):
247
+ def __init__(self, *, prefix: str = "", opts: BpeOpts):
237
248
  """
238
- :param prefix:
239
- :param root:
249
+ :param prefix: if this is not the root, the prefix to get here
240
250
  """
241
251
  self.prefix = prefix
242
252
  self.arcs: Dict[str, PrefixTree] = {} # single char (or BpePostMergeSymbol) -> sub tree
243
- self.finished = False # word finished here
253
+ self.finished = False # label finished here
244
254
  self.bpe_finished = False # partial word finished here with BpePostMergeSymbol at end
245
- self.is_root = not root
246
- self.root = root
255
+ self.opts = opts
247
256
 
248
- def add(self, postfix: str, root: Optional[PrefixTree] = None) -> PrefixTree:
257
+ def add(self, postfix: str) -> PrefixTree:
249
258
  """
250
259
  :param postfix:
251
- :param root:
252
260
  """
253
- if not root:
254
- if self.is_root:
255
- root = self
256
- else:
257
- assert self.root
258
- root = self.root
259
261
  self_ = self
262
+ opts = self.opts
263
+ label_postfix_merge_symbol = self.opts.label_postfix_merge_symbol
260
264
  while True:
261
- if postfix == BpePostMergeSymbol:
265
+ if self_ is self and opts.word_prefix_symbol and postfix.startswith(opts.word_prefix_symbol):
266
+ arc = opts.word_prefix_symbol
267
+ elif postfix == label_postfix_merge_symbol:
262
268
  arc = postfix
263
- postfix_ = ""
264
269
  else:
265
270
  arc = postfix[:1]
266
- postfix_ = postfix[1:]
271
+ postfix_ = postfix[len(arc) :]
267
272
  if arc in self_.arcs:
268
273
  child = self_.arcs[arc]
269
274
  else:
270
- child = PrefixTree(root=root, prefix=self_.prefix + arc)
275
+ child = PrefixTree(prefix=self_.prefix + arc, opts=opts)
271
276
  self_.arcs[arc] = child
272
- if arc == BpePostMergeSymbol and not postfix_:
277
+ if arc == label_postfix_merge_symbol and not postfix_:
273
278
  self_.bpe_finished = True
274
- if postfix_:
275
- self_ = child
276
- postfix = postfix_
277
- else:
279
+ if not postfix_:
278
280
  child.finished = True
279
281
  return child
282
+ self_ = child
283
+ postfix = postfix_
280
284
 
281
285
 
286
+ @dataclass
282
287
  class Hyp:
283
288
  """
284
289
  Represents a hypothesis in the search.
285
290
  """
286
291
 
287
- def __init__(self, bpe_sym_history, cur_node):
288
- """
289
- :param list[str] bpe_sym_history:
290
- :param PrefixTree cur_node:
291
- """
292
- self.bpe_sym_history = bpe_sym_history
293
- self.cur_node = cur_node
292
+ bpe_sym_history: List[str]
293
+ cur_node: PrefixTree
294
294
 
295
295
 
296
296
  class CharSyncSearch:
@@ -305,9 +305,15 @@ class CharSyncSearch:
305
305
  :param word_pos:
306
306
  """
307
307
  self.bpe = bpe
308
+ self.opts = bpe.opts
308
309
  self.word = word
309
310
  self.word_pos = word_pos
310
- self.hyps: List[Hyp] = [Hyp(bpe_sym_history=[], cur_node=bpe)]
311
+ self.hyps: List[Hyp] = [
312
+ Hyp(
313
+ bpe_sym_history=[],
314
+ cur_node=bpe if self.opts.word_prefix_symbol is None else bpe.arcs[self.opts.word_prefix_symbol],
315
+ )
316
+ ]
311
317
  self.final_bpe_seqs: Optional[List[List[str]]] = None
312
318
 
313
319
  def _get_finished(self):
@@ -329,10 +335,17 @@ class CharSyncSearch:
329
335
  if next_node:
330
336
  new_hyps.append(
331
337
  Hyp(
332
- bpe_sym_history=hyp.bpe_sym_history + [hyp.cur_node.prefix + BpePostMergeSymbol],
338
+ bpe_sym_history=hyp.bpe_sym_history
339
+ + [hyp.cur_node.prefix + self.opts.label_postfix_merge_symbol],
333
340
  cur_node=next_node,
334
341
  )
335
342
  )
343
+ if self.opts.word_prefix_symbol is not None and hyp.cur_node.finished:
344
+ next_node = self.bpe.arcs.get(char)
345
+ if next_node:
346
+ new_hyps.append(
347
+ Hyp(bpe_sym_history=hyp.bpe_sym_history + [hyp.cur_node.prefix], cur_node=next_node)
348
+ )
336
349
  next_node = hyp.cur_node.arcs.get(char)
337
350
  if next_node:
338
351
  new_hyps.append(Hyp(bpe_sym_history=hyp.bpe_sym_history, cur_node=next_node))
@@ -349,20 +362,15 @@ class CharSyncSearch:
349
362
  return self.final_bpe_seqs
350
363
 
351
364
 
365
+ @dataclass
352
366
  class HypInPos:
353
367
  """
354
368
  Represents a hypothesis in the search.
355
369
  """
356
370
 
357
- def __init__(self, bpe_sym_history, cur_node, pos):
358
- """
359
- :param list[str] bpe_sym_history:
360
- :param PrefixTree cur_node:
361
- :param int pos:
362
- """
363
- self.bpe_sym_history = bpe_sym_history
364
- self.cur_node = cur_node
365
- self.pos = pos
371
+ bpe_sym_history: List[str]
372
+ cur_node: PrefixTree
373
+ pos: int
366
374
 
367
375
 
368
376
  class DepthFirstSearch:
@@ -377,11 +385,18 @@ class DepthFirstSearch:
377
385
  :param sampler:
378
386
  """
379
387
  self.bpe = bpe
388
+ self.opts = bpe.opts
380
389
  self.word = word
381
390
  self.sampler = sampler
382
391
  self.hyps: List[HypInPos] = []
383
392
  self.final_bpe_seq: Optional[List[str]] = None
384
- self._add_hyp(HypInPos(bpe_sym_history=[], cur_node=bpe, pos=0))
393
+ self._add_hyp(
394
+ HypInPos(
395
+ bpe_sym_history=[],
396
+ cur_node=bpe if self.opts.word_prefix_symbol is None else bpe.arcs[self.opts.word_prefix_symbol],
397
+ pos=0,
398
+ )
399
+ )
385
400
 
386
401
  def _add_hyp(self, hyp: HypInPos):
387
402
  if hyp.pos >= len(self.word):
@@ -402,16 +417,26 @@ class DepthFirstSearch:
402
417
  if next_node:
403
418
  new_hyps.append(
404
419
  HypInPos(
405
- bpe_sym_history=hyp.bpe_sym_history + [hyp.cur_node.prefix + BpePostMergeSymbol],
420
+ bpe_sym_history=hyp.bpe_sym_history
421
+ + [hyp.cur_node.prefix + self.opts.label_postfix_merge_symbol],
406
422
  cur_node=next_node,
407
423
  pos=hyp.pos + 1,
408
424
  )
409
425
  )
426
+ if self.opts.word_prefix_symbol is not None and hyp.cur_node.finished:
427
+ next_node = self.bpe.arcs.get(char)
428
+ if next_node:
429
+ new_hyps.append(
430
+ HypInPos(
431
+ bpe_sym_history=hyp.bpe_sym_history + [hyp.cur_node.prefix], cur_node=next_node, pos=hyp.pos + 1
432
+ )
433
+ )
410
434
  next_node = hyp.cur_node.arcs.get(char)
411
435
  if next_node:
412
436
  new_hyps.append(HypInPos(bpe_sym_history=hyp.bpe_sym_history, cur_node=next_node, pos=hyp.pos + 1))
413
437
 
414
438
  # Note that the order we check them will make this a depth-first or breadth-first search.
439
+ # We pop(-1) from the hyps list. So the last entry we add here will be the next one we expand.
415
440
  if self.sampler and self.sampler():
416
441
  new_hyps = list(reversed(new_hyps))
417
442
  for hyp in new_hyps:
@@ -431,13 +456,22 @@ class SamplingBytePairEncoder:
431
456
  Will randomly sample from any possible BPE split.
432
457
  """
433
458
 
434
- def __init__(self, labels, breadth_prob, rnd, unknown_label=None):
435
- """
436
- :param list[str] labels: vocab
437
- :param float breadth_prob: 1.0 will lead to breadth-first search, 0.0 to depth-first search.
438
- other values are stochastic.
439
- :param numpy.random.RandomState rnd:
440
- :param str|None unknown_label:
459
+ def __init__(
460
+ self,
461
+ *,
462
+ labels: List[str],
463
+ breadth_prob: float,
464
+ rnd: numpy.random.RandomState,
465
+ unknown_label: Optional[str] = None,
466
+ opts: BpeOpts,
467
+ ):
468
+ """
469
+ :param labels: vocab
470
+ :param breadth_prob: 1.0 will lead to breadth-first search, 0.0 to depth-first search.
471
+ other values are stochastic.
472
+ :param rnd:
473
+ :param unknown_label:
474
+ :param opts:
441
475
  """
442
476
  self.labels = labels
443
477
  self.unknown_label = unknown_label
@@ -445,9 +479,10 @@ class SamplingBytePairEncoder:
445
479
  assert unknown_label in self.labels
446
480
  self.breadth_prob = breadth_prob
447
481
  self.rnd = rnd
482
+ self.opts = opts
448
483
 
449
484
  # build prefix tree
450
- bpe = PrefixTree()
485
+ bpe = PrefixTree(opts=opts)
451
486
  for bpe_sym in labels:
452
487
  bpe.add(bpe_sym)
453
488
  self._bpe_prefix_tree = bpe
@@ -514,9 +549,10 @@ def _demo():
514
549
 
515
550
  vocab = Vocabulary(vocab_file=args.vocab, unknown_label=None)
516
551
  rnd = numpy.random.RandomState(args.seed)
552
+ opts = BpeOpts(label_postfix_merge_symbol=BpePostMergeSymbol)
517
553
 
518
554
  if args.input:
519
- bpe_prefix_tree = PrefixTree()
555
+ bpe_prefix_tree = PrefixTree(opts=opts)
520
556
  for bpe_sym in vocab.labels:
521
557
  bpe_prefix_tree.add(bpe_sym)
522
558
 
@@ -533,7 +569,9 @@ def _demo():
533
569
  print("%s: %s" % (word, " ".join(greedy)))
534
570
  return
535
571
 
536
- bpe = SamplingBytePairEncoder(labels=vocab.labels, breadth_prob=args.breadth_prob, rnd=rnd, unknown_label=args.unk)
572
+ bpe = SamplingBytePairEncoder(
573
+ labels=vocab.labels, breadth_prob=args.breadth_prob, rnd=rnd, unknown_label=args.unk, opts=opts
574
+ )
537
575
  print("Reading from stdin:")
538
576
  while True:
539
577
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20240620.105009
3
+ Version: 1.20240621.130142
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