returnn 1.20240620.64807__tar.gz → 1.20240620.201955__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.64807/returnn.egg-info → returnn-1.20240620.201955}/PKG-INFO +1 -1
  2. returnn-1.20240620.201955/_setup_info_generated.py +2 -0
  3. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/util/vocabulary.py +41 -5
  4. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/bpe.py +91 -53
  5. {returnn-1.20240620.64807 → returnn-1.20240620.201955/returnn.egg-info}/PKG-INFO +1 -1
  6. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_Util.py +132 -2
  7. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/bpe-create-lexicon.py +1 -1
  8. returnn-1.20240620.64807/_setup_info_generated.py +0 -2
  9. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/.editorconfig +0 -0
  10. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/.gitignore +0 -0
  11. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/.gitmodules +0 -0
  12. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/.kateconfig +0 -0
  13. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/CHANGELOG.md +0 -0
  14. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/CODEOWNERS +0 -0
  15. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/CONTRIBUTING.md +0 -0
  16. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/LICENSE +0 -0
  17. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/MANIFEST.in +0 -0
  18. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/README.rst +0 -0
  19. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/__init__.py +0 -0
  20. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/12AX.cluster_map +0 -0
  21. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/_setup_returnn_env.py +0 -0
  22. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-fwd.config +0 -0
  23. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-horovod-mpi.py +0 -0
  24. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-horovod-mpi.py.sh +0 -0
  25. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-horovod-mpi.sh +0 -0
  26. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-hyper-param-tuning.config +0 -0
  27. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-iter-dataset.py +0 -0
  28. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-list-devices.py +0 -0
  29. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-lua-torch-layer.config +0 -0
  30. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-pretrain.config +0 -0
  31. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-record-and-push-to-webserver.py +0 -0
  32. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-returnn-as-framework.py +0 -0
  33. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-rf-pt-benchmark.py +0 -0
  34. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-rf.config +0 -0
  35. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-rhn-enwik8.config +0 -0
  36. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-sprint-interface.py +0 -0
  37. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-att-copy.config +0 -0
  38. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-attention.config +0 -0
  39. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  40. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  41. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-enc-dec.config +0 -0
  42. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-hard-att-copy.config +0 -0
  43. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-lstm-benchmark.py +0 -0
  44. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  45. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  46. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-native-lstm.12ax.config +0 -0
  47. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  48. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  49. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  50. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  51. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  52. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-rec-self-att.config +0 -0
  53. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-search-compiled-graph.py +0 -0
  54. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  55. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-timit-lstm-ctc.config +0 -0
  56. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-torch.config +0 -0
  57. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  58. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/demo.sh +0 -0
  59. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  60. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  61. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  62. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/README.txt +0 -0
  63. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/chars.txt +0 -0
  64. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/config_demo +0 -0
  65. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/config_fwd +0 -0
  66. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/config_real +0 -0
  67. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  68. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/decode.py +0 -0
  69. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  70. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/go.sh +0 -0
  71. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/lines.txt +0 -0
  72. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/split/eval.txt +0 -0
  73. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/split/train.txt +0 -0
  74. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/IAM/split/valid.txt +0 -0
  75. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/README.md +0 -0
  76. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  77. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/artificial/forwardconfig +0 -0
  78. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/artificial/go.sh +0 -0
  79. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/artificial/trainconfig +0 -0
  80. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  81. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  82. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  83. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  84. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/pyproject.toml +0 -0
  85. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/requirements.txt +0 -0
  86. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/__init__.py +0 -0
  87. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/__main__.py +0 -0
  88. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/__old_mod_loader__.py +0 -0
  89. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/__setup__.py +0 -0
  90. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/config.py +0 -0
  91. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/__init__.py +0 -0
  92. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/audio.py +0 -0
  93. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/basic.py +0 -0
  94. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/bundle_file.py +0 -0
  95. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/cached.py +0 -0
  96. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/cached2.py +0 -0
  97. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/distrib_files.py +0 -0
  98. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/generating.py +0 -0
  99. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/hdf.py +0 -0
  100. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/lm.py +0 -0
  101. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/map.py +0 -0
  102. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/meta.py +0 -0
  103. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/multi_proc.py +0 -0
  104. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/normalization_data.py +0 -0
  105. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/numpy_dump.py +0 -0
  106. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/raw_wav.py +0 -0
  107. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/sprint.py +0 -0
  108. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/stereo.py +0 -0
  109. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/util/__init__.py +0 -0
  110. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/util/feature_extraction.py +0 -0
  111. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/datasets/util/strings.py +0 -0
  112. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/engine/__init__.py +0 -0
  113. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/engine/base.py +0 -0
  114. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/engine/batch.py +0 -0
  115. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/__init__.py +0 -0
  116. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/__main__.py +0 -0
  117. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  118. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  119. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  120. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  121. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  122. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  123. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  124. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  125. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  126. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  127. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  128. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  129. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  130. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  131. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  132. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  133. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  134. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  135. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  136. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  137. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  138. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  139. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  140. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  141. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  142. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/__init__.py +0 -0
  143. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/graph_editor/README.md +0 -0
  144. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/graph_editor/__init__.py +0 -0
  145. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/graph_editor/edit.py +0 -0
  146. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/graph_editor/reroute.py +0 -0
  147. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/graph_editor/select.py +0 -0
  148. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/graph_editor/subgraph.py +0 -0
  149. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/graph_editor/transform.py +0 -0
  150. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/extern/graph_editor/util.py +0 -0
  151. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/forward_iface.py +0 -0
  152. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/__init__.py +0 -0
  153. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_backend.py +0 -0
  154. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_native/__init__.py +0 -0
  155. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_native/backend.cpp +0 -0
  156. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_native/backend.hpp +0 -0
  157. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_native/module.cpp +0 -0
  158. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_native/module.hpp +0 -0
  159. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_native/py_utils.hpp +0 -0
  160. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  161. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  162. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_numpy_backend.py +0 -0
  163. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_random_journal.py +0 -0
  164. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/_utils.py +0 -0
  165. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/array_.py +0 -0
  166. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/attention.py +0 -0
  167. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/audio/__init__.py +0 -0
  168. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/audio/mel.py +0 -0
  169. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/audio/specaugment.py +0 -0
  170. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/backend.py +0 -0
  171. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/build_from_dict.py +0 -0
  172. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/cond.py +0 -0
  173. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/const.py +0 -0
  174. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/container.py +0 -0
  175. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/control_flow_ctx.py +0 -0
  176. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/conv.py +0 -0
  177. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/decoder/__init__.py +0 -0
  178. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/decoder/transformer.py +0 -0
  179. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/device.py +0 -0
  180. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/dims.py +0 -0
  181. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/dropout.py +0 -0
  182. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/dtype.py +0 -0
  183. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/encoder/__init__.py +0 -0
  184. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/encoder/base.py +0 -0
  185. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/encoder/conformer.py +0 -0
  186. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/gradient.py +0 -0
  187. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/graph.py +0 -0
  188. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/hooks.py +0 -0
  189. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/init.py +0 -0
  190. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/label_smoothing.py +0 -0
  191. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/linear.py +0 -0
  192. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/loop.py +0 -0
  193. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/loss.py +0 -0
  194. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/math_.py +0 -0
  195. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/matmul.py +0 -0
  196. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/module.py +0 -0
  197. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/normalization.py +0 -0
  198. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/parameter.py +0 -0
  199. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/piecewise_linear.py +0 -0
  200. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/rand.py +0 -0
  201. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/rec.py +0 -0
  202. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/reduce.py +0 -0
  203. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/run_ctx.py +0 -0
  204. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/signal.py +0 -0
  205. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/state.py +0 -0
  206. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/stepwise_scheduler.py +0 -0
  207. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/tensor_array.py +0 -0
  208. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/frontend/types.py +0 -0
  209. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/import_/__init__.py +0 -0
  210. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/import_/common.py +0 -0
  211. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/import_/git.py +0 -0
  212. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/import_/import_.py +0 -0
  213. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/learning_rate_control.py +0 -0
  214. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/log.py +0 -0
  215. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/native_op.cpp +0 -0
  216. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/native_op.py +0 -0
  217. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/pretrain.py +0 -0
  218. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/sprint/__init__.py +0 -0
  219. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/sprint/cache.py +0 -0
  220. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/sprint/control.py +0 -0
  221. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/sprint/error_signals.py +0 -0
  222. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/sprint/extern_interface.py +0 -0
  223. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/sprint/interface.py +0 -0
  224. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/README.md +0 -0
  225. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/__init__.py +0 -0
  226. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/_dim_extra.py +0 -0
  227. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/_tensor_extra.py +0 -0
  228. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/_tensor_mixin_base.py +0 -0
  229. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/_tensor_op_overloads.py +0 -0
  230. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/control_flow_ctx.py +0 -0
  231. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/dim.py +0 -0
  232. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/marked_dim.py +0 -0
  233. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/tensor.py +0 -0
  234. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/tensor_dict.py +0 -0
  235. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tensor/utils.py +0 -0
  236. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/__init__.py +0 -0
  237. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/compat.py +0 -0
  238. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/data_pipeline.py +0 -0
  239. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/distributed.py +0 -0
  240. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/engine.py +0 -0
  241. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/README.md +0 -0
  242. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/__init__.py +0 -0
  243. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/_backend.py +0 -0
  244. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/_utils.py +0 -0
  245. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/cond.py +0 -0
  246. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  247. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  248. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/dims.py +0 -0
  249. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/layer.py +0 -0
  250. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/loop.py +0 -0
  251. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/make_layer.py +0 -0
  252. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  253. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  254. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  255. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_low_level/__init__.py +0 -0
  256. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/frontend_low_level/_backend.py +0 -0
  257. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/horovod.py +0 -0
  258. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/hyper_param_tuning.py +0 -0
  259. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/layers/__init__.py +0 -0
  260. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/layers/base.py +0 -0
  261. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/layers/basic.py +0 -0
  262. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/layers/rec.py +0 -0
  263. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/layers/segmental_model.py +0 -0
  264. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/layers/signal_processing.py +0 -0
  265. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/layers/variable.py +0 -0
  266. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/native_op.py +0 -0
  267. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/network.py +0 -0
  268. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/sprint.py +0 -0
  269. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/updater.py +0 -0
  270. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/util/__init__.py +0 -0
  271. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/util/basic.py +0 -0
  272. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/util/data.py +0 -0
  273. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/util/gradient_checkpoint.py +0 -0
  274. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/util/ken_lm.py +0 -0
  275. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/tf/util/open_fst.py +0 -0
  276. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/README.md +0 -0
  277. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/__init__.py +0 -0
  278. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/data/__init__.py +0 -0
  279. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/data/extern_data.py +0 -0
  280. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/data/pipeline.py +0 -0
  281. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/data/queued_data_iter.py +0 -0
  282. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  283. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/data/tensor_utils.py +0 -0
  284. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/distributed.py +0 -0
  285. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/engine.py +0 -0
  286. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/frontend/__init__.py +0 -0
  287. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/frontend/_backend.py +0 -0
  288. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/frontend/_rand.py +0 -0
  289. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/frontend/bridge.py +0 -0
  290. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/frontend/raw_ops.py +0 -0
  291. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/updater.py +0 -0
  292. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/util/README.md +0 -0
  293. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/util/__init__.py +0 -0
  294. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/util/diagnose_gpu.py +0 -0
  295. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/torch/util/scaled_gradient.py +0 -0
  296. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/__init__.py +0 -0
  297. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/basic.py +0 -0
  298. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/better_exchook.py +0 -0
  299. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/debug.py +0 -0
  300. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/debug_helpers.py +0 -0
  301. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/file_cache.py +0 -0
  302. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/fsa.py +0 -0
  303. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/literal_py_to_pickle.py +0 -0
  304. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/math.py +0 -0
  305. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  306. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/native_code_compiler.py +0 -0
  307. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/pprint.py +0 -0
  308. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/py-to-pickle.cpp +0 -0
  309. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/py_compat.py +0 -0
  310. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/py_ext_mod_compiler.py +0 -0
  311. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/result_with_reason.py +0 -0
  312. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/sig_proc.py +0 -0
  313. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/task_system.py +0 -0
  314. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/train_proc_manager.py +0 -0
  315. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn/util/watch_memory.py +0 -0
  316. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn.egg-info/SOURCES.txt +0 -0
  317. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn.egg-info/dependency_links.txt +0 -0
  318. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/returnn.egg-info/top_level.txt +0 -0
  319. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/rnn.py +0 -0
  320. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/setup.cfg +0 -0
  321. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/setup.py +0 -0
  322. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/DummySprintExec.py +0 -0
  323. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm-inspection-profile.xml +0 -0
  324. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/.gitignore +0 -0
  325. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/.name +0 -0
  326. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  327. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  328. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  329. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  330. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  331. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/misc.xml +0 -0
  332. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/modules.xml +0 -0
  333. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/returnn.iml +0 -0
  334. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  335. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/_set_num_threads1.py +0 -0
  336. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/_setup_returnn_env.py +0 -0
  337. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/_setup_test_env.py +0 -0
  338. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/bpe-unicode-demo.codes +0 -0
  339. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/bpe-unicode-demo.vocab +0 -0
  340. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/lexicon_opt.fst +0 -0
  341. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/lexicon_opt.isyms +0 -0
  342. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/lexicon_opt.jpg +0 -0
  343. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/lexicon_opt.osyms +0 -0
  344. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/lint_common.py +0 -0
  345. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/pycharm-inspect.py +0 -0
  346. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/pylint.py +0 -0
  347. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/returnn-as-framework.py +0 -0
  348. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/rf_utils.py +0 -0
  349. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/spelling.dic +0 -0
  350. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_Config.py +0 -0
  351. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_Dataset.py +0 -0
  352. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_Fsa.py +0 -0
  353. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_GeneratingDataset.py +0 -0
  354. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_HDFDataset.py +0 -0
  355. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_LearningRateControl.py +0 -0
  356. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_Log.py +0 -0
  357. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_MultiProcDataset.py +0 -0
  358. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_Pretrain.py +0 -0
  359. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_ResNet.py +0 -0
  360. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_SprintDataset.py +0 -0
  361. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_SprintInterface.py +0 -0
  362. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TFEngine.py +0 -0
  363. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TFNativeOp.py +0 -0
  364. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TFNetworkLayer.py +0 -0
  365. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TFNetworkRecLayer.py +0 -0
  366. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TFNetworkSigProcLayer.py +0 -0
  367. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TFUpdater.py +0 -0
  368. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TFUtil.py +0 -0
  369. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TF_determinism.py +0 -0
  370. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TaskSystem.py +0 -0
  371. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TaskSystem_SharedMem.py +0 -0
  372. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_TranslationDataset.py +0 -0
  373. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_demos.py +0 -0
  374. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_fork_exec.py +0 -0
  375. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_hdf_dump.py +0 -0
  376. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_array.py +0 -0
  377. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_attention.py +0 -0
  378. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_base.py +0 -0
  379. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_cond.py +0 -0
  380. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_const.py +0 -0
  381. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_container.py +0 -0
  382. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_conv.py +0 -0
  383. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_encoder_conformer.py +0 -0
  384. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_gradient.py +0 -0
  385. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_label_smoothing.py +0 -0
  386. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_loop.py +0 -0
  387. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_math.py +0 -0
  388. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_normalization.py +0 -0
  389. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_piecewise_linear.py +0 -0
  390. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_rec.py +0 -0
  391. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_reduce.py +0 -0
  392. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_rf_signal.py +0 -0
  393. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_tensor.py +0 -0
  394. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_tools.py +0 -0
  395. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_torch_dataset.py +0 -0
  396. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_torch_engine.py +0 -0
  397. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_torch_frontend.py +0 -0
  398. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tests/test_torch_internal_frontend.py +0 -0
  399. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/_setup_returnn_env.py +0 -0
  400. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/analyze-dataset-batches.py +0 -0
  401. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/bliss-collect-seq-lens.py +0 -0
  402. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/bliss-dump-text.py +0 -0
  403. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/bliss-get-segment-names.py +0 -0
  404. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/bliss-to-ogg-zip.py +0 -0
  405. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/calculate-word-error-rate.py +0 -0
  406. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/cleanup-old-models.py +0 -0
  407. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/collect-orth-symbols.py +0 -0
  408. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/collect-words.py +0 -0
  409. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/compile_native_op.py +0 -0
  410. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/compile_tf_graph.py +0 -0
  411. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/debug-dump-search-scores.py +0 -0
  412. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/debug-plot-search-scores.py +0 -0
  413. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/dump-dataset-raw-strings.py +0 -0
  414. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/dump-dataset.py +0 -0
  415. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/dump-forward-stats.py +0 -0
  416. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/dump-forward.py +0 -0
  417. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/dump-network-json.py +0 -0
  418. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/dump-pickle.py +0 -0
  419. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/extract_state_tying_from_dataset.py +0 -0
  420. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/get-attention-weights.py +0 -0
  421. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/get-best-model-epoch.py +0 -0
  422. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/hdf_dump.py +0 -0
  423. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/hdf_dump_translation_dataset.py +0 -0
  424. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/import-blocks-mt-model.py +0 -0
  425. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/import-t2t-mt-model.py +0 -0
  426. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/.gitignore +0 -0
  427. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/Makefile +0 -0
  428. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/README.md +0 -0
  429. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/example/README.md +0 -0
  430. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/example/libs_list +0 -0
  431. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  432. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/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.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  434. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/example/state_vars_list +0 -0
  435. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  436. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/file.h +0 -0
  437. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  438. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  439. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/main.cc +0 -0
  440. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/rescorer.h +0 -0
  441. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/vocabulary.cc +0 -0
  442. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/lattice_rescorer/vocabulary.h +0 -0
  443. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/tf_avg_checkpoints.py +0 -0
  444. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/tf_inspect_checkpoint.py +0 -0
  445. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/tf_inspect_summary_log.py +0 -0
  446. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/torch_avg_checkpoints.py +0 -0
  447. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/torch_export_to_onnx.py +0 -0
  448. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/tools/torch_inspect_checkpoint.py +0 -0
  449. {returnn-1.20240620.64807 → returnn-1.20240620.201955}/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.20240620.64807
3
+ Version: 1.20240620.201955
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.20240620.201955'
2
+ long_version = '1.20240620.201955+git.7a0206a'
@@ -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.64807
3
+ Version: 1.20240620.201955
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
@@ -638,9 +638,9 @@ def test_expand_env_vars():
638
638
 
639
639
 
640
640
  def test_bpe_PrefixTree():
641
- from returnn.util.bpe import PrefixTree, BpePostMergeSymbol
641
+ from returnn.util.bpe import PrefixTree, BpeOpts, BpePostMergeSymbol
642
642
 
643
- tree = PrefixTree()
643
+ tree = PrefixTree(opts=BpeOpts(label_postfix_merge_symbol=BpePostMergeSymbol))
644
644
  tree.add("hello")
645
645
  tree.add("helo" + BpePostMergeSymbol)
646
646
  assert not tree.finished and not tree.bpe_finished
@@ -663,6 +663,136 @@ def test_bpe_PrefixTree():
663
663
  assert set(node_o_post.arcs.keys()) == set()
664
664
 
665
665
 
666
+ def test_bpe_PrefixTree_word_prefix():
667
+ from returnn.util.bpe import PrefixTree, BpeOpts
668
+
669
+ tree = PrefixTree(opts=BpeOpts(word_prefix_symbol="▁"))
670
+ tree.add("▁hello")
671
+ tree.add("▁hel")
672
+ tree.add("lo")
673
+ tree.add("▁hi")
674
+ assert not tree.finished and not tree.bpe_finished
675
+ assert set(tree.arcs.keys()) == {"▁", "l"}
676
+ node = tree.arcs["▁"]
677
+ assert not node.finished and not node.bpe_finished
678
+ assert set(node.arcs.keys()) == {"h"}
679
+ node = node.arcs["h"]
680
+ assert not node.finished and not node.bpe_finished
681
+ assert set(node.arcs.keys()) == {"e", "i"}
682
+ node_ = node.arcs["i"]
683
+ assert node_.finished and not node_.bpe_finished and not node_.arcs
684
+ node = node.arcs["e"]
685
+ assert not node.finished and not node.bpe_finished
686
+ assert set(node.arcs.keys()) == {"l"}
687
+ node = node.arcs["l"]
688
+ assert node.finished and not node.bpe_finished
689
+ assert set(node.arcs.keys()) == {"l"}
690
+ node = node.arcs["l"]
691
+ assert not node.finished and not node.bpe_finished
692
+ assert set(node.arcs.keys()) == {"o"}
693
+ node = node.arcs["o"]
694
+ assert node.finished and not node.bpe_finished and not node.arcs
695
+
696
+
697
+ def test_bpe_DepthFirstSearch():
698
+ import itertools
699
+ from returnn.util.bpe import PrefixTree, BpeOpts, DepthFirstSearch
700
+
701
+ tree = PrefixTree(opts=BpeOpts(label_postfix_merge_symbol="@@"))
702
+ tree.add("llo")
703
+ tree.add("helo@@")
704
+ tree.add("he@@")
705
+
706
+ dfs = DepthFirstSearch(tree, "hello")
707
+ assert_equal(dfs.search(), ["he@@", "llo"])
708
+ dfs = DepthFirstSearch(tree, "helo")
709
+ assert_equal(dfs.search(), None)
710
+ dfs = DepthFirstSearch(tree, "x")
711
+ assert_equal(dfs.search(), None)
712
+ dfs = DepthFirstSearch(tree, "llo")
713
+ assert_equal(dfs.search(), ["llo"])
714
+
715
+ tree.add("hello")
716
+ dfs = DepthFirstSearch(tree, "hello")
717
+ assert_equal(dfs.search(), ["hello"])
718
+ dfs = DepthFirstSearch(tree, "hello", sampler=lambda: True)
719
+ assert_equal(dfs.search(), ["he@@", "llo"])
720
+
721
+ tree.add("hel@@")
722
+ tree.add("lo")
723
+ dfs = DepthFirstSearch(tree, "hello")
724
+ assert_equal(dfs.search(), ["hello"])
725
+ dfs = DepthFirstSearch(tree, "hello", sampler=lambda: True)
726
+ assert_equal(dfs.search(), ["he@@", "llo"])
727
+ dfs = DepthFirstSearch(tree, "hello", sampler=lambda _it=itertools.count(): next(_it) in {3})
728
+ assert_equal(dfs.search(), ["hel@@", "lo"])
729
+
730
+
731
+ def test_bpe_DepthFirstSearch_word_prefix():
732
+ import itertools
733
+ from returnn.util.bpe import PrefixTree, BpeOpts, DepthFirstSearch
734
+
735
+ tree = PrefixTree(opts=BpeOpts(word_prefix_symbol="▁"))
736
+ tree.add("▁hello")
737
+ tree.add("▁hel")
738
+ tree.add("lo")
739
+
740
+ search = DepthFirstSearch(tree, "hello")
741
+ assert_equal(search.search(), ["▁hello"])
742
+ search = DepthFirstSearch(tree, "hello", sampler=lambda: True)
743
+ assert_equal(search.search(), ["▁hel", "lo"])
744
+
745
+ tree.add("▁he")
746
+ tree.add("llo")
747
+ search = DepthFirstSearch(tree, "hello", sampler=lambda: True)
748
+ assert_equal(search.search(), ["▁he", "llo"])
749
+ search = DepthFirstSearch(tree, "hello", sampler=lambda _it=itertools.count(): next(_it) in {3})
750
+ assert_equal(search.search(), ["▁hel", "lo"])
751
+
752
+
753
+ def test_bpe_CharSyncSearch():
754
+ from returnn.util.bpe import PrefixTree, BpeOpts, CharSyncSearch
755
+
756
+ tree = PrefixTree(opts=BpeOpts(label_postfix_merge_symbol="@@"))
757
+ tree.add("llo")
758
+ tree.add("helo@@")
759
+ tree.add("he@@")
760
+
761
+ search = CharSyncSearch(tree, "hello")
762
+ assert_equal(search.search(), [["he@@", "llo"]])
763
+ search = CharSyncSearch(tree, "helo")
764
+ assert_equal(search.search(), [])
765
+ search = CharSyncSearch(tree, "x")
766
+ assert_equal(search.search(), [])
767
+ search = CharSyncSearch(tree, "llo")
768
+ assert_equal(search.search(), [["llo"]])
769
+
770
+ tree.add("hello")
771
+ search = CharSyncSearch(tree, "hello")
772
+ assert_equal(search.search(), [["he@@", "llo"], ["hello"]])
773
+
774
+
775
+ def test_bpe_CharSyncSearch_word_prefix():
776
+ from returnn.util.bpe import PrefixTree, BpeOpts, CharSyncSearch
777
+
778
+ tree = PrefixTree(opts=BpeOpts(word_prefix_symbol="▁"))
779
+ tree.add("▁hello")
780
+ tree.add("▁hel")
781
+ tree.add("lo")
782
+ tree.add("▁hi")
783
+
784
+ search = CharSyncSearch(tree, "hello")
785
+ assert_equal(search.search(), [["▁hel", "lo"], ["▁hello"]])
786
+ search = CharSyncSearch(tree, "helo")
787
+ assert_equal(search.search(), [])
788
+ search = CharSyncSearch(tree, "x")
789
+ assert_equal(search.search(), [])
790
+ search = CharSyncSearch(tree, "lo")
791
+ assert_equal(search.search(), [])
792
+ search = CharSyncSearch(tree, "hi")
793
+ assert_equal(search.search(), [["▁hi"]])
794
+
795
+
666
796
  def test_file_cache():
667
797
  from returnn.util.file_cache import FileCache, CachedFile
668
798
 
@@ -96,7 +96,7 @@ def main():
96
96
  print("Words: num %i, first %r" % (len(words), words[0]))
97
97
 
98
98
  print("Build BPE prefix tree...")
99
- bpe = bpe_utils.PrefixTree()
99
+ bpe = bpe_utils.PrefixTree(opts=bpe_utils.BpeOpts(label_postfix_merge_symbol=bpe_utils.BpePostMergeSymbol))
100
100
  for bpe_sym in bpe_syms:
101
101
  bpe.add(bpe_sym)
102
102
 
@@ -1,2 +0,0 @@
1
- version = '1.20240620.064807'
2
- long_version = '1.20240620.064807+git.ab33b05'