returnn 1.20250226.115259__tar.gz → 1.20250226.183415__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (476) hide show
  1. {returnn-1.20250226.115259/returnn.egg-info → returnn-1.20250226.183415}/PKG-INFO +1 -1
  2. returnn-1.20250226.183415/_setup_info_generated.py +2 -0
  3. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_numpy_backend.py +29 -0
  4. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/array_.py +22 -5
  5. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/conv.py +38 -12
  6. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/dims.py +40 -0
  7. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/normalization.py +3 -4
  8. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/signal.py +8 -0
  9. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/_dim_extra.py +0 -4
  10. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/_tensor_extra.py +1 -1
  11. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/tensor_dict.py +15 -1
  12. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/basic.py +1 -1
  13. {returnn-1.20250226.115259 → returnn-1.20250226.183415/returnn.egg-info}/PKG-INFO +1 -1
  14. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/rf_utils.py +101 -9
  15. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_array.py +8 -1
  16. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_encoder_conformer.py +4 -1
  17. returnn-1.20250226.115259/_setup_info_generated.py +0 -2
  18. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/.editorconfig +0 -0
  19. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/.gitignore +0 -0
  20. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/.gitmodules +0 -0
  21. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/.kateconfig +0 -0
  22. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/CHANGELOG.md +0 -0
  23. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/CODEOWNERS +0 -0
  24. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/CONTRIBUTING.md +0 -0
  25. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/LICENSE +0 -0
  26. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/MANIFEST.in +0 -0
  27. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/README.rst +0 -0
  28. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/__init__.py +0 -0
  29. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/12AX.cluster_map +0 -0
  30. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/_setup_returnn_env.py +0 -0
  31. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-fwd.config +0 -0
  32. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-horovod-mpi.py +0 -0
  33. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-horovod-mpi.py.sh +0 -0
  34. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-horovod-mpi.sh +0 -0
  35. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-hyper-param-tuning.config +0 -0
  36. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-iter-dataset.py +0 -0
  37. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-list-devices.py +0 -0
  38. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-lua-torch-layer.config +0 -0
  39. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-pretrain.config +0 -0
  40. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-record-and-push-to-webserver.py +0 -0
  41. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-returnn-as-framework.py +0 -0
  42. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-rf-pt-benchmark.py +0 -0
  43. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-rf.config +0 -0
  44. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-rhn-enwik8.config +0 -0
  45. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-sprint-interface.py +0 -0
  46. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-att-copy.config +0 -0
  47. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-attention.config +0 -0
  48. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  49. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  50. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-enc-dec.config +0 -0
  51. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-hard-att-copy.config +0 -0
  52. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-lstm-benchmark.py +0 -0
  53. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  54. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  55. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-native-lstm.12ax.config +0 -0
  56. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  57. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  58. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  59. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  60. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  61. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-rec-self-att.config +0 -0
  62. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-search-compiled-graph.py +0 -0
  63. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  64. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-timit-lstm-ctc.config +0 -0
  65. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-torch.config +0 -0
  66. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  67. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/demo.sh +0 -0
  68. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  69. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  70. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  71. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/README.txt +0 -0
  72. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/chars.txt +0 -0
  73. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/config_demo +0 -0
  74. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/config_fwd +0 -0
  75. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/config_real +0 -0
  76. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  77. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/decode.py +0 -0
  78. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  79. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/go.sh +0 -0
  80. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/lines.txt +0 -0
  81. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/split/eval.txt +0 -0
  82. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/split/train.txt +0 -0
  83. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/IAM/split/valid.txt +0 -0
  84. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/README.md +0 -0
  85. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  86. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/artificial/forwardconfig +0 -0
  87. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/artificial/go.sh +0 -0
  88. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/artificial/trainconfig +0 -0
  89. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  90. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  91. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  92. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  93. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/pyproject.toml +0 -0
  94. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/requirements.txt +0 -0
  95. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/__init__.py +0 -0
  96. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/__main__.py +0 -0
  97. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/__old_mod_loader__.py +0 -0
  98. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/__setup__.py +0 -0
  99. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/config.py +0 -0
  100. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/__init__.py +0 -0
  101. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/audio.py +0 -0
  102. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/basic.py +0 -0
  103. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/bundle_file.py +0 -0
  104. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/cached.py +0 -0
  105. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/cached2.py +0 -0
  106. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/distrib_files.py +0 -0
  107. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/generating.py +0 -0
  108. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/hdf.py +0 -0
  109. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/lm.py +0 -0
  110. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/map.py +0 -0
  111. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/meta.py +0 -0
  112. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/multi_proc.py +0 -0
  113. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/normalization_data.py +0 -0
  114. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/numpy_dump.py +0 -0
  115. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/postprocessing.py +0 -0
  116. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/raw_wav.py +0 -0
  117. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/sprint.py +0 -0
  118. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/stereo.py +0 -0
  119. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/text_dict.py +0 -0
  120. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/util/__init__.py +0 -0
  121. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/util/feature_extraction.py +0 -0
  122. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/util/strings.py +0 -0
  123. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/datasets/util/vocabulary.py +0 -0
  124. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/engine/__init__.py +0 -0
  125. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/engine/base.py +0 -0
  126. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/engine/batch.py +0 -0
  127. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/__init__.py +0 -0
  128. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/__main__.py +0 -0
  129. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  130. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  131. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  132. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  133. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  134. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  135. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  136. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  137. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  138. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  139. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  140. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  141. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  142. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  143. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  144. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  145. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  146. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  147. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  148. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  149. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  150. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  151. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  152. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  153. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  154. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/__init__.py +0 -0
  155. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/graph_editor/README.md +0 -0
  156. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/graph_editor/__init__.py +0 -0
  157. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/graph_editor/edit.py +0 -0
  158. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/graph_editor/reroute.py +0 -0
  159. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/graph_editor/select.py +0 -0
  160. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/graph_editor/subgraph.py +0 -0
  161. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/graph_editor/transform.py +0 -0
  162. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/extern/graph_editor/util.py +0 -0
  163. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/forward_iface.py +0 -0
  164. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/__init__.py +0 -0
  165. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_backend.py +0 -0
  166. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_cache.py +0 -0
  167. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_native/__init__.py +0 -0
  168. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_native/backend.cpp +0 -0
  169. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_native/backend.hpp +0 -0
  170. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_native/module.cpp +0 -0
  171. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_native/module.hpp +0 -0
  172. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_native/py_utils.hpp +0 -0
  173. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  174. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  175. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_random_journal.py +0 -0
  176. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/_utils.py +0 -0
  177. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/attention.py +0 -0
  178. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/audio/__init__.py +0 -0
  179. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/audio/mel.py +0 -0
  180. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/audio/specaugment.py +0 -0
  181. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/backend.py +0 -0
  182. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/build_from_dict.py +0 -0
  183. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/cond.py +0 -0
  184. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/const.py +0 -0
  185. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/container.py +0 -0
  186. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/control_flow_ctx.py +0 -0
  187. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/conversions/__init__.py +0 -0
  188. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
  189. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/conversions/hf_llama.py +0 -0
  190. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/conversions/torch_nn.py +0 -0
  191. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/decoder/__init__.py +0 -0
  192. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/decoder/transformer.py +0 -0
  193. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/device.py +0 -0
  194. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/dropout.py +0 -0
  195. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/dtype.py +0 -0
  196. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/encoder/__init__.py +0 -0
  197. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/encoder/base.py +0 -0
  198. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/encoder/conformer.py +0 -0
  199. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/encoder/conformer_v2.py +0 -0
  200. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/encoder/e_branchformer.py +0 -0
  201. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/encoder/transformer.py +0 -0
  202. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/gradient.py +0 -0
  203. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/graph.py +0 -0
  204. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/hooks.py +0 -0
  205. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/init.py +0 -0
  206. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/label_smoothing.py +0 -0
  207. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/linear.py +0 -0
  208. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/loop.py +0 -0
  209. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/loss.py +0 -0
  210. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/math_.py +0 -0
  211. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/matmul.py +0 -0
  212. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/module.py +0 -0
  213. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/nested.py +0 -0
  214. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/parameter.py +0 -0
  215. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/parametrizations.py +0 -0
  216. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/parametrize.py +0 -0
  217. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/piecewise_linear.py +0 -0
  218. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/rand.py +0 -0
  219. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/rec.py +0 -0
  220. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/reduce.py +0 -0
  221. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/run_ctx.py +0 -0
  222. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/state.py +0 -0
  223. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/stepwise_scheduler.py +0 -0
  224. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/tensor_array.py +0 -0
  225. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/frontend/types.py +0 -0
  226. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/import_/__init__.py +0 -0
  227. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/import_/common.py +0 -0
  228. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/import_/git.py +0 -0
  229. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/import_/import_.py +0 -0
  230. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/learning_rate_control.py +0 -0
  231. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/log.py +0 -0
  232. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/native_op.cpp +0 -0
  233. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/native_op.py +0 -0
  234. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/pretrain.py +0 -0
  235. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/sprint/__init__.py +0 -0
  236. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/sprint/cache.py +0 -0
  237. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/sprint/control.py +0 -0
  238. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/sprint/error_signals.py +0 -0
  239. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/sprint/extern_interface.py +0 -0
  240. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/sprint/interface.py +0 -0
  241. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/README.md +0 -0
  242. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/__init__.py +0 -0
  243. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/_tensor_mixin_base.py +0 -0
  244. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/_tensor_op_overloads.py +0 -0
  245. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/control_flow_ctx.py +0 -0
  246. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/dim.py +0 -0
  247. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/marked_dim.py +0 -0
  248. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/tensor.py +0 -0
  249. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tensor/utils.py +0 -0
  250. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/__init__.py +0 -0
  251. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/compat.py +0 -0
  252. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/data_pipeline.py +0 -0
  253. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/distributed.py +0 -0
  254. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/engine.py +0 -0
  255. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/README.md +0 -0
  256. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/__init__.py +0 -0
  257. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/_backend.py +0 -0
  258. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/_utils.py +0 -0
  259. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/cond.py +0 -0
  260. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  261. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  262. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/dims.py +0 -0
  263. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/layer.py +0 -0
  264. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/loop.py +0 -0
  265. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/make_layer.py +0 -0
  266. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  267. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  268. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  269. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_low_level/__init__.py +0 -0
  270. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/frontend_low_level/_backend.py +0 -0
  271. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/horovod.py +0 -0
  272. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/hyper_param_tuning.py +0 -0
  273. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/layers/__init__.py +0 -0
  274. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/layers/base.py +0 -0
  275. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/layers/basic.py +0 -0
  276. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/layers/rec.py +0 -0
  277. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/layers/segmental_model.py +0 -0
  278. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/layers/signal_processing.py +0 -0
  279. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/layers/variable.py +0 -0
  280. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/native_op.py +0 -0
  281. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/network.py +0 -0
  282. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/sprint.py +0 -0
  283. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/updater.py +0 -0
  284. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/util/__init__.py +0 -0
  285. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/util/basic.py +0 -0
  286. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/util/data.py +0 -0
  287. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/util/gradient_checkpoint.py +0 -0
  288. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/util/ken_lm.py +0 -0
  289. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/tf/util/open_fst.py +0 -0
  290. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/README.md +0 -0
  291. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/__init__.py +0 -0
  292. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/data/__init__.py +0 -0
  293. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/data/extern_data.py +0 -0
  294. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/data/pipeline.py +0 -0
  295. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/data/queued_data_iter.py +0 -0
  296. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  297. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/data/tensor_utils.py +0 -0
  298. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/distributed.py +0 -0
  299. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/engine.py +0 -0
  300. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/frontend/__init__.py +0 -0
  301. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/frontend/_backend.py +0 -0
  302. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/frontend/_rand.py +0 -0
  303. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/frontend/bridge.py +0 -0
  304. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/frontend/raw_ops.py +0 -0
  305. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/optim/README.md +0 -0
  306. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/optim/__init__.py +0 -0
  307. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/optim/lion.py +0 -0
  308. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/updater.py +0 -0
  309. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/README.md +0 -0
  310. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/__init__.py +0 -0
  311. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/array_.py +0 -0
  312. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/debug_inf_nan.py +0 -0
  313. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/diagnose_gpu.py +0 -0
  314. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/exception_helper.py +0 -0
  315. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/gradient_checkpoint.py +0 -0
  316. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/module.py +0 -0
  317. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/torch/util/scaled_gradient.py +0 -0
  318. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/__init__.py +0 -0
  319. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/better_exchook.py +0 -0
  320. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/bpe.py +0 -0
  321. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/debug.py +0 -0
  322. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/debug_helpers.py +0 -0
  323. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/file_cache.py +0 -0
  324. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/fsa.py +0 -0
  325. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/literal_py_to_pickle.py +0 -0
  326. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/lru_cache.py +0 -0
  327. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/math.py +0 -0
  328. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  329. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/native_code_compiler.py +0 -0
  330. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/pprint.py +0 -0
  331. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/py-to-pickle.cpp +0 -0
  332. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/py_ext_mod_compiler.py +0 -0
  333. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/result_with_reason.py +0 -0
  334. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/sig_proc.py +0 -0
  335. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/task_system.py +0 -0
  336. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/train_proc_manager.py +0 -0
  337. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn/util/watch_memory.py +0 -0
  338. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn.egg-info/SOURCES.txt +0 -0
  339. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn.egg-info/dependency_links.txt +0 -0
  340. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn.egg-info/requires.txt +0 -0
  341. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/returnn.egg-info/top_level.txt +0 -0
  342. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/rnn.py +0 -0
  343. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/setup.cfg +0 -0
  344. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/setup.py +0 -0
  345. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/DummySprintExec.py +0 -0
  346. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm-inspection-profile.xml +0 -0
  347. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/.gitignore +0 -0
  348. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/.name +0 -0
  349. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  350. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  351. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  352. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  353. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  354. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/misc.xml +0 -0
  355. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/modules.xml +0 -0
  356. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/returnn.iml +0 -0
  357. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  358. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/_set_num_threads1.py +0 -0
  359. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/_setup_returnn_env.py +0 -0
  360. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/_setup_test_env.py +0 -0
  361. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/bpe-unicode-demo.codes +0 -0
  362. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/bpe-unicode-demo.vocab +0 -0
  363. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/lexicon_opt.fst +0 -0
  364. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/lexicon_opt.isyms +0 -0
  365. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/lexicon_opt.jpg +0 -0
  366. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/lexicon_opt.osyms +0 -0
  367. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/lint_common.py +0 -0
  368. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/pycharm-inspect.py +0 -0
  369. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/pylint.py +0 -0
  370. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/returnn-as-framework.py +0 -0
  371. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/spelling.dic +0 -0
  372. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_Config.py +0 -0
  373. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_Dataset.py +0 -0
  374. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_Fsa.py +0 -0
  375. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_GeneratingDataset.py +0 -0
  376. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_HDFDataset.py +0 -0
  377. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_LearningRateControl.py +0 -0
  378. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_Log.py +0 -0
  379. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_MultiProcDataset.py +0 -0
  380. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_Pretrain.py +0 -0
  381. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_ResNet.py +0 -0
  382. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_SprintDataset.py +0 -0
  383. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_SprintInterface.py +0 -0
  384. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TFEngine.py +0 -0
  385. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TFNativeOp.py +0 -0
  386. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TFNetworkLayer.py +0 -0
  387. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TFNetworkRecLayer.py +0 -0
  388. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TFNetworkSigProcLayer.py +0 -0
  389. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TFUpdater.py +0 -0
  390. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TFUtil.py +0 -0
  391. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TF_determinism.py +0 -0
  392. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TaskSystem.py +0 -0
  393. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TaskSystem_SharedMem.py +0 -0
  394. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_TranslationDataset.py +0 -0
  395. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_Util.py +0 -0
  396. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_demos.py +0 -0
  397. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_fork_exec.py +0 -0
  398. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_hdf_dump.py +0 -0
  399. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_attention.py +0 -0
  400. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_base.py +0 -0
  401. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_cond.py +0 -0
  402. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_const.py +0 -0
  403. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_container.py +0 -0
  404. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_conv.py +0 -0
  405. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_decoder_transformer.py +0 -0
  406. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_gradient.py +0 -0
  407. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_label_smoothing.py +0 -0
  408. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_loop.py +0 -0
  409. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_math.py +0 -0
  410. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_normalization.py +0 -0
  411. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_piecewise_linear.py +0 -0
  412. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_rec.py +0 -0
  413. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_reduce.py +0 -0
  414. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_rf_signal.py +0 -0
  415. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_tensor.py +0 -0
  416. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_threading.py +0 -0
  417. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_tools.py +0 -0
  418. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_torch_dataset.py +0 -0
  419. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_torch_engine.py +0 -0
  420. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_torch_frontend.py +0 -0
  421. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_torch_internal_frontend.py +0 -0
  422. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/test_torch_util.py +0 -0
  423. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tests/torch_utils.py +0 -0
  424. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/_setup_returnn_env.py +0 -0
  425. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/analyze-dataset-batches.py +0 -0
  426. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/bliss-collect-seq-lens.py +0 -0
  427. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/bliss-dump-text.py +0 -0
  428. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/bliss-get-segment-names.py +0 -0
  429. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/bliss-to-ogg-zip.py +0 -0
  430. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/bpe-create-lexicon.py +0 -0
  431. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/calculate-word-error-rate.py +0 -0
  432. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/cleanup-old-models.py +0 -0
  433. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/collect-orth-symbols.py +0 -0
  434. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/collect-words.py +0 -0
  435. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/compile_native_op.py +0 -0
  436. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/compile_tf_graph.py +0 -0
  437. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/debug-dump-search-scores.py +0 -0
  438. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/debug-plot-search-scores.py +0 -0
  439. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/dump-dataset-raw-strings.py +0 -0
  440. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/dump-dataset.py +0 -0
  441. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/dump-forward-stats.py +0 -0
  442. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/dump-forward.py +0 -0
  443. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/dump-network-json.py +0 -0
  444. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/dump-pickle.py +0 -0
  445. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/extract_state_tying_from_dataset.py +0 -0
  446. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/get-attention-weights.py +0 -0
  447. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/get-best-model-epoch.py +0 -0
  448. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/hdf_dump.py +0 -0
  449. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/hdf_dump_translation_dataset.py +0 -0
  450. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/import-blocks-mt-model.py +0 -0
  451. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/import-t2t-mt-model.py +0 -0
  452. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/.gitignore +0 -0
  453. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/Makefile +0 -0
  454. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/README.md +0 -0
  455. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/example/README.md +0 -0
  456. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/example/libs_list +0 -0
  457. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  458. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
  459. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  460. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/example/state_vars_list +0 -0
  461. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  462. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/file.h +0 -0
  463. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  464. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  465. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/main.cc +0 -0
  466. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/rescorer.h +0 -0
  467. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/vocabulary.cc +0 -0
  468. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/lattice_rescorer/vocabulary.h +0 -0
  469. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/tf_avg_checkpoints.py +0 -0
  470. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/tf_inspect_checkpoint.py +0 -0
  471. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/tf_inspect_summary_log.py +0 -0
  472. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/torch_avg_checkpoints.py +0 -0
  473. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/torch_export_to_onnx.py +0 -0
  474. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/torch_inspect_checkpoint.py +0 -0
  475. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
  476. {returnn-1.20250226.115259 → returnn-1.20250226.183415}/tools/torch_scale_tuning.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20250226.115259
3
+ Version: 1.20250226.183415
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.20250226.183415'
2
+ long_version = '1.20250226.183415+git.ba9d72e'
@@ -159,6 +159,35 @@ class NumpyBackend(Backend[numpy.ndarray]):
159
159
  res = numpy.array(res)
160
160
  return res
161
161
 
162
+ @staticmethod
163
+ def where(
164
+ cond: Tensor,
165
+ true_: Union[Tensor, rf.RawTensorTypes],
166
+ false_: Union[Tensor, rf.RawTensorTypes],
167
+ *,
168
+ allow_broadcast_all_sources: bool = False,
169
+ ) -> Tensor:
170
+ """where"""
171
+ if isinstance(true_, Tensor):
172
+ dtype = true_.dtype
173
+ elif isinstance(false_, Tensor):
174
+ dtype = false_.dtype
175
+ else:
176
+ dtype = None
177
+ true_ = rf.convert_to_tensor(true_, _backend=NumpyBackend, dtype=dtype)
178
+ false_ = rf.convert_to_tensor(false_, _backend=NumpyBackend, dtype=dtype)
179
+ out = Tensor.get_common_data(
180
+ [true_, false_, cond], allow_broadcast_all_sources=allow_broadcast_all_sources, name="where"
181
+ )
182
+ out.dtype = true_.dtype
183
+ out.sparse_dim = true_.sparse_dim or false_.sparse_dim
184
+ out.feature_dim = true_.feature_dim or false_.feature_dim
185
+ cond_bc_raw = cond.copy_compatible_to_dims_raw(out.dims)
186
+ true_bc_raw = true_.copy_compatible_to_dims_raw(out.dims)
187
+ false_bc_raw = false_.copy_compatible_to_dims_raw(out.dims)
188
+ out.raw_tensor = numpy.where(cond_bc_raw, true_bc_raw, false_bc_raw)
189
+ return out
190
+
162
191
  @staticmethod
163
192
  def range_over_dim(dim: Dim, *, dtype: Optional[str] = None, device: Optional[str] = None) -> Tensor[numpy.ndarray]:
164
193
  """
@@ -325,6 +325,7 @@ def window(
325
325
  padding: str = "same",
326
326
  pad_value: Optional[Union[int, float]] = None,
327
327
  stride: int = 1,
328
+ use_mask: Optional[bool] = None,
328
329
  ) -> Tuple[Tensor, Dim]:
329
330
  """
330
331
  Follows the same idea as RETURNN tf_util.windowed,
@@ -338,8 +339,14 @@ def window(
338
339
  :param padding: "same" or "valid"
339
340
  :param pad_value:
340
341
  :param stride:
342
+ :param use_mask: whether we should mask to make sure the zero padding is correct
341
343
  :return: out, out_spatial_dim
342
344
  """
345
+ if spatial_dim.need_masking():
346
+ if use_mask is None:
347
+ use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
348
+ if use_mask:
349
+ source = source.copy_masked(0, dims=[spatial_dim])
343
350
  assert window_dim.dimension is not None
344
351
  if padding == "same":
345
352
  out_spatial_dim = spatial_dim
@@ -784,6 +791,7 @@ def scatter(
784
791
  mode: str = "sum",
785
792
  fill_value: Optional[Union[int, float]] = None,
786
793
  out_dim: Optional[Union[Dim, Sequence[Dim]]] = None,
794
+ use_mask: Optional[bool] = None,
787
795
  ) -> Tensor:
788
796
  """
789
797
  Scatters into new zero-tensor.
@@ -806,6 +814,7 @@ def scatter(
806
814
  If not given, will be automatically determined as the sparse_dim from indices.
807
815
  If multiple out dims, use indices into the merged out dims,
808
816
  and then we use :func:`rf.split_dims` afterwards.
817
+ :param use_mask:
809
818
  :return: [batch_dims..., out_dim(s)..., feature_dims...]
810
819
  """
811
820
  if mode == "logsumexp":
@@ -826,24 +835,32 @@ def scatter(
826
835
  fill_value = 0
827
836
  elif mode == "max":
828
837
  if "int" in source.dtype:
829
- import numpy
830
-
831
838
  fill_value = numpy.iinfo(source.raw_tensor.dtype).min
832
839
  else:
833
840
  fill_value = float("-inf")
834
841
  elif mode == "min":
835
842
  if "int" in source.dtype:
836
- import numpy
837
-
838
843
  fill_value = numpy.iinfo(source.raw_tensor.dtype).max
839
844
  else:
840
845
  fill_value = float("inf")
841
846
  else:
842
847
  raise ValueError(f"scatter: invalid mode {mode!r}")
848
+ indices_dim = indices_dim if isinstance(indices_dim, (list, tuple)) else [indices_dim]
849
+ if any(dim.need_masking() for dim in indices_dim):
850
+ if use_mask is None:
851
+ use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
852
+ if use_mask:
853
+ source = source.copy_masked(fill_value, dims=indices_dim)
854
+ else:
855
+ use_mask = False
843
856
  # noinspection PyProtectedMember
844
- return source._raw_backend.scatter(
857
+ out = source._raw_backend.scatter(
845
858
  source, indices=indices, indices_dim=indices_dim, mode=mode, fill_value=fill_value, out_dim=out_dim
846
859
  )
860
+ if use_mask and mode != "sum":
861
+ # Make sure we don't leave any infinities in the output.
862
+ out = out.copy_masked(0, dims=[out_dim])
863
+ return out
847
864
 
848
865
 
849
866
  def scatter_argmax(
@@ -34,8 +34,8 @@ class _ConvOrTransposedConv(rf.Module):
34
34
  Base class for both convolution and transposed convolution.
35
35
  """
36
36
 
37
- nd: Optional[int] = None
38
- _transposed: bool
37
+ nd: Optional[int] = None # set in the subclasses, e.g. 1 for Conv1d, etc
38
+ _transposed: bool # set in the subclasses _Conv or _TransposedConv
39
39
  groups: Optional[int] = None
40
40
 
41
41
  def __init__(
@@ -187,8 +187,14 @@ def conv(
187
187
  dilation_rate: Optional[Union[int, Sequence[int]]] = None,
188
188
  groups: Optional[int] = None,
189
189
  bias: Optional[Tensor] = None,
190
+ use_mask: Optional[bool] = None,
190
191
  ) -> Tuple[Tensor, Sequence[Dim]]:
191
192
  """convolution"""
193
+ if any(in_spatial_dim.need_masking() for in_spatial_dim in in_spatial_dims):
194
+ if use_mask is None:
195
+ use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
196
+ if use_mask:
197
+ source = source.copy_masked(0, dims=in_spatial_dims)
192
198
  for in_spatial_dim in in_spatial_dims:
193
199
  if in_spatial_dim not in source.dims:
194
200
  raise ValueError(f"conv: source {source} does not have spatial dim {in_spatial_dim}")
@@ -345,8 +351,14 @@ def transposed_conv(
345
351
  output_padding: Optional[Union[Sequence[Optional[int]], int]] = None,
346
352
  strides: Optional[Sequence[int]] = None,
347
353
  bias: Optional[Tensor] = None,
354
+ use_mask: Optional[bool] = None,
348
355
  ) -> Tuple[Tensor, Sequence[Dim]]:
349
356
  """transposed conv"""
357
+ if any(in_spatial_dim.need_masking() for in_spatial_dim in in_spatial_dims):
358
+ if use_mask is None:
359
+ use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
360
+ if use_mask:
361
+ source = source.copy_masked(0, dims=in_spatial_dims)
350
362
  # noinspection PyProtectedMember
351
363
  out, out_spatial_dims = source._raw_backend.transposed_conv(
352
364
  source=source,
@@ -394,6 +406,7 @@ class TransposedConv3d(_TransposedConv):
394
406
  def pool(
395
407
  source: Tensor,
396
408
  *,
409
+ nd: Optional[int] = None,
397
410
  mode: str,
398
411
  pool_size: Union[Sequence[int], int],
399
412
  padding: str = "valid",
@@ -401,22 +414,23 @@ def pool(
401
414
  strides: Optional[Union[Sequence[int], int]] = None,
402
415
  in_spatial_dims: Union[Sequence[Dim], Dim],
403
416
  out_spatial_dims: Optional[Union[Sequence[Dim], Dim]] = None,
404
- nd: Optional[int] = None,
417
+ use_mask: Optional[bool] = None,
405
418
  ) -> Tuple[Tensor, Sequence[Dim]]:
406
419
  """
407
420
  A generic N-D pooling layer.
408
421
  This would usually be done after a convolution for down-sampling.
409
422
 
410
- :param Tensor source:
423
+ :param source:
411
424
  :param nd:
412
- :param str mode: "max" or "avg"
413
- :param tuple[int] pool_size: shape of the window of each reduce
414
- :param str padding: "valid" or "same"
415
- :param tuple[int]|int dilation_rate:
416
- :param tuple[int]|int|None strides: in contrast to tf.nn.pool, the default (if it is None) will be set to pool_size
417
- :param Sequence[Dim] in_spatial_dims:
418
- :param Sequence[Dim]|None out_spatial_dims:
419
- :return: layer, out_spatial_dims
425
+ :param mode: "max" or "avg"
426
+ :param pool_size: shape of the window of each reduce
427
+ :param padding: "valid" or "same"
428
+ :param dilation_rate:
429
+ :param strides: in contrast to tf.nn.pool, the default (if it is None) will be set to pool_size
430
+ :param in_spatial_dims:
431
+ :param out_spatial_dims:
432
+ :param use_mask:
433
+ :return: out, out_spatial_dims
420
434
  """
421
435
  if isinstance(in_spatial_dims, Dim):
422
436
  in_spatial_dims = [in_spatial_dims]
@@ -440,6 +454,14 @@ def pool(
440
454
  assert isinstance(strides, (list, tuple))
441
455
  assert len(strides) == nd
442
456
 
457
+ if any(in_spatial_dim.need_masking() for in_spatial_dim in in_spatial_dims):
458
+ if use_mask is None:
459
+ use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
460
+ if use_mask:
461
+ source = source.copy_masked({"max": float("-inf"), "avg": 0}[mode], dims=in_spatial_dims)
462
+ else:
463
+ use_mask = False
464
+
443
465
  # noinspection PyProtectedMember
444
466
  out, out_spatial_dims = source._raw_backend.pool(
445
467
  source=source,
@@ -451,6 +473,10 @@ def pool(
451
473
  in_spatial_dims=in_spatial_dims,
452
474
  out_spatial_dims=out_spatial_dims,
453
475
  )
476
+ if use_mask and mode == "max":
477
+ # We masked with -inf for max-pooling to get correct pooling at the boundaries.
478
+ # However, the resulting tensor might have -inf in it, and it is better to mask it out.
479
+ out = out.copy_masked(0, dims=out_spatial_dims)
454
480
  return out, out_spatial_dims
455
481
 
456
482
 
@@ -22,6 +22,7 @@ __all__ = [
22
22
  "num_elements_of_shape",
23
23
  "masked_fraction_of_shape",
24
24
  "last_frame_position_of_dim",
25
+ "use_mask_default",
25
26
  ]
26
27
 
27
28
 
@@ -305,3 +306,42 @@ def last_frame_position_of_dim(
305
306
  pos = rf.maximum(pos, 0)
306
307
  pos.sparse_dim = dim
307
308
  return pos
309
+
310
+
311
+ def use_mask_default(
312
+ *, default: Optional[bool] = None, default_false_for_behavior_version_up_to: Optional[int] = None
313
+ ) -> Optional[bool]:
314
+ """
315
+ Check the global RETURNN config for the ``rf_use_mask``
316
+ on what default we should use for the ``use_mask`` argument in various functions
317
+ (e.g. :func:`conv`, :func:`pool`, :func:`reduce`, :func:`matmul`, ...).
318
+
319
+ See issue `#1691 <https://github.com/rwth-i6/returnn/issues/1691>`__.
320
+
321
+ :param default: what to return if it is not defined in the config,
322
+ and ``default_false_for_behavior_version_up_to`` does not apply.
323
+ :param default_false_for_behavior_version_up_to: if it is not defined in the config,
324
+ and if this is set, and the behavior version is less or equal,
325
+ then return False by default, i.e. do not use the mask by default, if it is not defined in the config.
326
+ This takes precedence over `default`.
327
+ :return: what to use for the ``use_mask`` argument by default
328
+ """
329
+ from returnn.config import get_global_config
330
+
331
+ config = get_global_config(raise_exception=False)
332
+ config_value = None
333
+ if config:
334
+ if "rf_use_mask" in config.typed_dict:
335
+ config_value = config.typed_dict["rf_use_mask"]
336
+ assert config_value is None or isinstance(config_value, bool)
337
+ elif "rf_use_mask" in config.dict:
338
+ config_value = config.bool("rf_use_mask", None)
339
+ if config_value is not None:
340
+ return config_value
341
+
342
+ if default_false_for_behavior_version_up_to is not None:
343
+ from returnn.util.basic import BehaviorVersion
344
+
345
+ if BehaviorVersion.get() <= default_false_for_behavior_version_up_to:
346
+ return False
347
+ return default
@@ -218,10 +218,9 @@ class BatchNorm(rf.Module):
218
218
 
219
219
  if any(d.need_masking() for d in source.dims if d != self.in_dim):
220
220
  if self.use_mask is None:
221
- raise ValueError(
222
- f"{self}: use_mask must be specified if the input {source} has any dynamic spatial dims"
223
- )
224
- use_mask = self.use_mask
221
+ use_mask = rf.use_mask_default(default=True)
222
+ else:
223
+ use_mask = self.use_mask
225
224
  else:
226
225
  use_mask = False # not needed. False because this potentially enables an efficient fused op.
227
226
 
@@ -6,6 +6,7 @@ stft etc
6
6
  from __future__ import annotations
7
7
  from typing import Optional, Tuple
8
8
  from returnn.tensor import Tensor, Dim
9
+ import returnn.frontend as rf
9
10
 
10
11
 
11
12
  __all__ = ["stft"]
@@ -23,6 +24,7 @@ def stft(
23
24
  window_enforce_even: bool = True,
24
25
  out_spatial_dim: Optional[Dim] = None,
25
26
  out_dim: Optional[Dim] = None,
27
+ use_mask: Optional[bool] = None,
26
28
  ) -> Tuple[Tensor, Dim, Dim]:
27
29
  """
28
30
  Calculate the short-time Fourier transform (STFT) of a signal.
@@ -65,8 +67,14 @@ def stft(
65
67
  but in most other frameworks, the behavior matches to window_enforce_even=False.
66
68
  :param out_spatial_dim:
67
69
  :param out_dim:
70
+ :param use_mask:
68
71
  :return: (stft, out_spatial_dim, out_dim)
69
72
  """
73
+ if in_spatial_dim.need_masking():
74
+ if use_mask is None:
75
+ use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
76
+ if use_mask:
77
+ x = x.copy_masked(0, dims=[in_spatial_dim])
70
78
  fft_length = fft_length or frame_length
71
79
  if out_dim is None:
72
80
  out_dim = Dim(fft_length // 2 + 1, name="stft-freq")
@@ -422,14 +422,10 @@ class _DimMixin:
422
422
  :param func: operates inplace
423
423
  """
424
424
  dyn_size_ext = self.dyn_size_ext.copy() if self.dyn_size_ext is not None else None
425
- dyn_size_ext_max = self._dyn_size_max_value if self._dyn_size_max_value is not None else None
426
425
  self.reset_raw(only_self=True)
427
426
  if dyn_size_ext is not None:
428
427
  func(dyn_size_ext)
429
- if dyn_size_ext_max is not None:
430
- func(dyn_size_ext_max)
431
428
  self.dyn_size_ext = dyn_size_ext
432
- self._dyn_size_max_value = dyn_size_ext_max
433
429
 
434
430
  def _can_use_in_ctx(self, ctx):
435
431
  """
@@ -2966,7 +2966,7 @@ class _TensorMixin(_TensorMixinBase):
2966
2966
  mask = None
2967
2967
  for axis in axes:
2968
2968
  mask_ = self._dims[axis].get_mask(dim_order=self.dims, device=self.device)
2969
- mask = rf.logical_and(mask, mask_) if mask is not None else mask_
2969
+ mask = rf.combine_bc(mask, "logical_and", mask_) if mask is not None else mask_
2970
2970
  assert isinstance(mask, _t.Tensor)
2971
2971
  res = rf.where(mask, self, mask_value)
2972
2972
  if use_padding_info:
@@ -9,7 +9,7 @@ We also might have model_outputs in the user config.
9
9
  """
10
10
 
11
11
  from __future__ import annotations
12
- from typing import Optional, Union, Any, Type, Dict, Sequence
12
+ from typing import Optional, Union, Any, Type, Dict, Sequence, List
13
13
  from .tensor import Tensor
14
14
  from .dim import Dim
15
15
 
@@ -160,6 +160,20 @@ class TensorDict:
160
160
  assert dim.size == raw_tensor_dict[key_]
161
161
  visited_dims.add(dim)
162
162
 
163
+ def all_dims(self) -> List[Dim]:
164
+ """
165
+ :return: list of dims
166
+ """
167
+ visited_dims = set()
168
+ out = []
169
+ for key, value in self.data.items():
170
+ for dim in value.dims:
171
+ if dim in visited_dims:
172
+ continue
173
+ out.append(dim)
174
+ visited_dims.add(dim)
175
+ return out
176
+
163
177
 
164
178
  def _convert_to_tensor(opts: _TensorT, *, name: Optional[str] = None) -> Tensor:
165
179
  """
@@ -219,7 +219,7 @@ class BehaviorVersion:
219
219
  See :ref:`behavior_version`.
220
220
  """
221
221
 
222
- _latest_behavior_version = 22
222
+ _latest_behavior_version = 23
223
223
  _behavior_version = None # type: typing.Optional[int]
224
224
  _min_behavior_version = 0 # type: int
225
225
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20250226.115259
3
+ Version: 1.20250226.183415
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
@@ -13,7 +13,7 @@ import numpy.testing
13
13
  from returnn.config import Config, global_config_ctx
14
14
  from returnn.util.pprint import pprint
15
15
  import returnn.frontend as rf
16
- from returnn.tensor import Tensor, Dim, TensorDict
16
+ from returnn.tensor import Tensor, Dim, TensorDict, batch_dim
17
17
  from returnn.tensor.utils import tensor_dict_fill_random_numpy_
18
18
  import returnn.torch.frontend as rft
19
19
  from returnn.torch.data.tensor_utils import tensor_dict_numpy_to_torch_, tensor_dict_torch_to_numpy_
@@ -57,9 +57,11 @@ def run_model(
57
57
  dyn_dim_min_sizes: Optional[Dict[Dim, int]] = None,
58
58
  test_tensorflow: bool = True,
59
59
  allow_inf_nan_in_output: bool = False,
60
+ test_single_batch_entry: bool = False, # can later enable this globally
60
61
  ) -> TensorDict:
61
62
  """run"""
62
63
  print(f"* run_model with dyn_dim_max_sizes={dyn_dim_max_sizes!r}")
64
+ extern_data_dims = extern_data.all_dims()
63
65
  extern_data.reset_content()
64
66
  tensor_dict_fill_random_numpy_(
65
67
  extern_data, dyn_dim_max_sizes=dyn_dim_max_sizes, dyn_dim_min_sizes=dyn_dim_min_sizes
@@ -85,6 +87,21 @@ def run_model(
85
87
  )
86
88
  raise Exception(f"Non-finite values in output: {non_finite_outputs}. See log above.")
87
89
 
90
+ if test_single_batch_entry and batch_dim in extern_data_dims:
91
+ dyn_dims = [
92
+ d
93
+ for d in extern_data_dims
94
+ if d.dyn_size_ext is not None
95
+ and d.dyn_size_ext.dims == (batch_dim,)
96
+ and d.dyn_size_ext.raw_tensor.min() != d.dyn_size_ext.raw_tensor.max()
97
+ ]
98
+ if dyn_dims: # e.g. the typical time dim with dyn size shape [batch_dim]
99
+ batch_idx = dyn_dims[0].dyn_size_ext.raw_tensor.argmin().item()
100
+ print(f"** run with PyTorch backend with single batch entry for some smaller sequence {batch_idx=}")
101
+ for d in dyn_dims:
102
+ print(f" {d}: {d.dyn_size_ext.raw_tensor}")
103
+ _run_model_torch_single_batch(extern_data, get_model, forward_step, batch_idx=batch_idx, ref_output=out_pt)
104
+
88
105
  if not test_tensorflow:
89
106
  return out_pt
90
107
  if disable_tf:
@@ -125,6 +142,7 @@ def run_model(
125
142
  assert set(out_pt_raw.keys()) == set(out_tf_raw.keys())
126
143
  for k, v_pt in out_pt_raw.items():
127
144
  v_tf = out_tf_raw[k]
145
+ print(f" comparing {k!r} {_array_repr(v_pt)} PT vs TF")
128
146
  numpy.testing.assert_allclose(v_pt, v_tf, atol=1e-5, rtol=1e-5, err_msg=f"output {k!r} differs")
129
147
  return out_pt
130
148
 
@@ -222,6 +240,72 @@ def run_model_torch_train(
222
240
  return res
223
241
 
224
242
 
243
+ def _run_model_torch_single_batch(
244
+ extern_data: TensorDict,
245
+ get_model: rf.GetModelFunc,
246
+ forward_step: rf.StepFunc,
247
+ *,
248
+ batch_idx: int,
249
+ ref_output: TensorDict,
250
+ ):
251
+ """
252
+ Restrict batch_dim to batch_idx only.
253
+ This is somewhat hacky:
254
+ We want to keep the same dim tags.
255
+ Thus, we overwrite all the data by the sliced data.
256
+ We also want to keep the batch_dim for the forward_step as the user code probably expects it.
257
+ Afterward, we want to recover the original data.
258
+ """
259
+ # Store original data to be able to recover it later.
260
+ extern_data_raw = extern_data.as_raw_tensor_dict(expected_value_type=numpy.ndarray)
261
+
262
+ # noinspection PyShadowingNames
263
+ def _get_slices(x: Tensor) -> Tuple[slice, ...]:
264
+ slices = []
265
+ for dim in x.dims:
266
+ if dim == batch_dim:
267
+ slices.append(slice(batch_idx, batch_idx + 1))
268
+ elif dim.dyn_size_ext is not None and batch_dim in dim.dyn_size_ext.dims:
269
+ slices.append(slice(0, dim.dyn_size_ext.raw_tensor.max().item()))
270
+ else:
271
+ slices.append(slice(None))
272
+ return tuple(slices)
273
+
274
+ # inplace
275
+ # noinspection PyShadowingNames
276
+ def tensor_numpy_restrict_batch_dim_(x: Tensor[numpy.ndarray]):
277
+ if batch_dim not in x.dims:
278
+ return
279
+ if x.raw_tensor is not None:
280
+ assert isinstance(x.raw_tensor, numpy.ndarray)
281
+ x.raw_tensor = x.raw_tensor[_get_slices(x)]
282
+
283
+ batch_dim.reset_eager()
284
+ batch_dim.dyn_size_ext = Tensor("batch_size", dims=(), dtype="int32", raw_tensor=numpy.array(1, dtype="int32"))
285
+ for dim in extern_data.all_dims():
286
+ dim.transform_tensors(tensor_numpy_restrict_batch_dim_)
287
+ for v in extern_data.data.values():
288
+ tensor_numpy_restrict_batch_dim_(v)
289
+
290
+ output = _run_model_torch(extern_data, get_model, forward_step)
291
+ for key, ref_output_ in ref_output.data.items():
292
+ output_ = output.data[key]
293
+ if batch_dim not in ref_output_.dims:
294
+ continue
295
+ batch_axis = ref_output_.dims.index(batch_dim)
296
+ assert output_.dims[batch_axis] == batch_dim and len(output_.dims) == len(ref_output_.dims)
297
+ # Slice the raw ref output to be able to match it to the raw single output.
298
+ ref_output_raw = ref_output_.raw_tensor[_get_slices(output_)]
299
+ single_output_raw = output_.raw_tensor
300
+ numpy.testing.assert_allclose(
301
+ ref_output_raw, single_output_raw, atol=1e-5, rtol=1e-5, err_msg=f"output {key!r} differs"
302
+ )
303
+
304
+ # Recover original data.
305
+ extern_data.reset_content()
306
+ extern_data.assign_from_raw_tensor_dict_(extern_data_raw)
307
+
308
+
225
309
  def _run_model_net_dict_tf(
226
310
  extern_data: TensorDict, get_model: rf.GetModelFunc, forward_step: rf.StepFunc
227
311
  ) -> TensorDict:
@@ -349,15 +433,9 @@ def _pad_mask_zeros(x: Union[TensorDict, Tensor, Dim]):
349
433
  return
350
434
 
351
435
  assert isinstance(x, Tensor)
352
- for i, d in enumerate(x.dims):
436
+ x.raw_tensor = x.copy_masked(0).raw_tensor
437
+ for d in x.dims:
353
438
  _pad_mask_zeros(d)
354
- if d.need_masking():
355
- mask = x.get_sequence_mask_tensor(i)
356
- if not set(mask.dims).issubset(set(x.dims)):
357
- print(f"Warning: cannot apply mask {mask} for dim {d} on tensor {x}.")
358
- continue
359
- mask_raw = mask.copy_compatible_to_dims_raw(x.dims)
360
- x.raw_tensor = numpy.where(mask_raw, x.raw_tensor, numpy.zeros((), dtype=x.raw_tensor.dtype))
361
439
 
362
440
 
363
441
  def _check_dim(d_pt: Dim, d_tf: Dim):
@@ -403,3 +481,17 @@ def _walk_dims(start: Dim, *, func=print):
403
481
  for k, v in dim_extra.same_for_batch_ctx.items():
404
482
  k: Any
405
483
  queue.append((path + ("_extra.same_for_batch_ctx", k), v))
484
+
485
+
486
+ def _array_repr(x: Union[numpy.ndarray, numpy.number]) -> str:
487
+ if not isinstance(x, numpy.ndarray):
488
+ return f"<{type(x).__name__} {x!r}>"
489
+
490
+ try:
491
+ import lovely_numpy
492
+
493
+ return f"<{lovely_numpy.lovely(x)}>"
494
+ except ImportError:
495
+ if x.size <= 10:
496
+ return repr(x)
497
+ return f"<array shape={x.shape} dtype={x.dtype} min={x.min()} max={x.max()}>"
@@ -193,9 +193,16 @@ def test_pad_packed_batched():
193
193
  in_ = out_dict["in"]
194
194
  flat = out_dict["flat"]
195
195
  out = out_dict["out"]
196
- print(in_.raw_tensor.shape, flat.raw_tensor.shape, out.raw_tensor.shape)
196
+ print("in:", in_, in_.raw_tensor.shape)
197
+ print("in time1:", in_.dims[1].dyn_size)
198
+ print("in time2:", in_.dims[2].dyn_size)
199
+ print("flat:", flat, flat.raw_tensor.shape)
200
+ print("out:", out, out.raw_tensor.shape)
201
+ print("in raw:")
197
202
  print(in_.raw_tensor)
203
+ print("flat raw:")
198
204
  print(flat.raw_tensor)
205
+ print("out raw:")
199
206
  print(out.raw_tensor)
200
207
  np.testing.assert_array_equal(in_.raw_tensor, out.raw_tensor)
201
208
 
@@ -78,6 +78,7 @@ def test_e_branchformer():
78
78
  import torch
79
79
  import returnn.frontend as rf
80
80
  from returnn.util.debug import PyTracer, check_py_traces_rf_to_pt_equal
81
+ from returnn.config import global_config_ctx, Config
81
82
 
82
83
  rf.select_backend_torch()
83
84
  rf.set_random_seed(42)
@@ -300,7 +301,9 @@ def test_e_branchformer():
300
301
  ],
301
302
  Tensor,
302
303
  ) as trace_rf, torch.no_grad():
303
- enc_out, _ = model_rf(enc_in, in_spatial_dim=enc_spatial_dim)
304
+ # ESPnet E-Branchformer does not use masking properly. Keep it disabled here as well.
305
+ with global_config_ctx(Config({"rf_use_mask": False})):
306
+ enc_out, _ = model_rf(enc_in, in_spatial_dim=enc_spatial_dim)
304
307
  enc_out = enc_out.copy_transpose((batch_dim, enc_spatial_dim, model_dim))
305
308
  enc_out = enc_out.copy_masked(0.0)
306
309
 
@@ -1,2 +0,0 @@
1
- version = '1.20250226.115259'
2
- long_version = '1.20250226.115259+git.0d32534'