returnn 1.20250304.10039__tar.gz → 1.20250304.113330__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.20250304.10039/returnn.egg-info → returnn-1.20250304.113330}/PKG-INFO +1 -1
  2. returnn-1.20250304.113330/_setup_info_generated.py +2 -0
  3. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_backend.py +2 -2
  4. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/conv.py +175 -21
  5. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/_backend.py +2 -2
  6. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/layers/basic.py +120 -36
  7. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/util/basic.py +3 -2
  8. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/engine.py +29 -62
  9. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/frontend/_backend.py +8 -5
  10. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/basic.py +1 -1
  11. {returnn-1.20250304.10039 → returnn-1.20250304.113330/returnn.egg-info}/PKG-INFO +1 -1
  12. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_conv.py +91 -27
  13. returnn-1.20250304.10039/_setup_info_generated.py +0 -2
  14. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/.editorconfig +0 -0
  15. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/.gitignore +0 -0
  16. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/.gitmodules +0 -0
  17. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/.kateconfig +0 -0
  18. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/CHANGELOG.md +0 -0
  19. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/CODEOWNERS +0 -0
  20. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/CONTRIBUTING.md +0 -0
  21. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/LICENSE +0 -0
  22. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/MANIFEST.in +0 -0
  23. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/README.rst +0 -0
  24. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/__init__.py +0 -0
  25. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/12AX.cluster_map +0 -0
  26. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/_setup_returnn_env.py +0 -0
  27. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-fwd.config +0 -0
  28. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-horovod-mpi.py +0 -0
  29. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-horovod-mpi.py.sh +0 -0
  30. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-horovod-mpi.sh +0 -0
  31. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-hyper-param-tuning.config +0 -0
  32. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-iter-dataset.py +0 -0
  33. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-list-devices.py +0 -0
  34. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-lua-torch-layer.config +0 -0
  35. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-pretrain.config +0 -0
  36. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-record-and-push-to-webserver.py +0 -0
  37. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-returnn-as-framework.py +0 -0
  38. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-rf-pt-benchmark.py +0 -0
  39. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-rf.config +0 -0
  40. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-rhn-enwik8.config +0 -0
  41. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-sprint-interface.py +0 -0
  42. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-att-copy.config +0 -0
  43. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-attention.config +0 -0
  44. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
  45. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
  46. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-enc-dec.config +0 -0
  47. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-hard-att-copy.config +0 -0
  48. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-lstm-benchmark.py +0 -0
  49. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
  50. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
  51. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-native-lstm.12ax.config +0 -0
  52. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-native-lstm2.12ax.config +0 -0
  53. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
  54. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-neural-transducer.12ax.config +0 -0
  55. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-rec-explicit-lstm.config +0 -0
  56. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-rec-explicit-rnn.config +0 -0
  57. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-rec-self-att.config +0 -0
  58. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-search-compiled-graph.py +0 -0
  59. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
  60. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-timit-lstm-ctc.config +0 -0
  61. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-torch.config +0 -0
  62. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
  63. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/demo.sh +0 -0
  64. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
  65. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
  66. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
  67. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/README.txt +0 -0
  68. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/chars.txt +0 -0
  69. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/config_demo +0 -0
  70. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/config_fwd +0 -0
  71. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/config_real +0 -0
  72. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
  73. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/decode.py +0 -0
  74. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
  75. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/go.sh +0 -0
  76. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/lines.txt +0 -0
  77. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/split/eval.txt +0 -0
  78. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/split/train.txt +0 -0
  79. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/IAM/split/valid.txt +0 -0
  80. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/README.md +0 -0
  81. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/artificial/create_test_h5.py +0 -0
  82. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/artificial/forwardconfig +0 -0
  83. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/artificial/go.sh +0 -0
  84. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/artificial/trainconfig +0 -0
  85. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
  86. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
  87. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/artificial_rgb/go.sh +0 -0
  88. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
  89. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/pyproject.toml +0 -0
  90. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/requirements.txt +0 -0
  91. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/__init__.py +0 -0
  92. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/__main__.py +0 -0
  93. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/__old_mod_loader__.py +0 -0
  94. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/__setup__.py +0 -0
  95. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/config.py +0 -0
  96. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/__init__.py +0 -0
  97. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/audio.py +0 -0
  98. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/basic.py +0 -0
  99. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/bundle_file.py +0 -0
  100. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/cached.py +0 -0
  101. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/cached2.py +0 -0
  102. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/distrib_files.py +0 -0
  103. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/generating.py +0 -0
  104. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/hdf.py +0 -0
  105. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/lm.py +0 -0
  106. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/map.py +0 -0
  107. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/meta.py +0 -0
  108. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/multi_proc.py +0 -0
  109. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/normalization_data.py +0 -0
  110. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/numpy_dump.py +0 -0
  111. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/postprocessing.py +0 -0
  112. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/raw_wav.py +0 -0
  113. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/sprint.py +0 -0
  114. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/stereo.py +0 -0
  115. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/text_dict.py +0 -0
  116. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/util/__init__.py +0 -0
  117. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/util/feature_extraction.py +0 -0
  118. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/util/strings.py +0 -0
  119. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/datasets/util/vocabulary.py +0 -0
  120. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/engine/__init__.py +0 -0
  121. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/engine/base.py +0 -0
  122. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/engine/batch.py +0 -0
  123. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/__init__.py +0 -0
  124. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/__main__.py +0 -0
  125. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/.git +0 -0
  126. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
  127. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
  128. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
  129. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
  130. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
  131. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
  132. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
  133. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
  134. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
  135. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
  136. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
  137. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
  138. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
  139. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
  140. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
  141. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
  142. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
  143. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
  144. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
  145. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
  146. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
  147. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
  148. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
  149. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
  150. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/__init__.py +0 -0
  151. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/graph_editor/README.md +0 -0
  152. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/graph_editor/__init__.py +0 -0
  153. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/graph_editor/edit.py +0 -0
  154. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/graph_editor/reroute.py +0 -0
  155. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/graph_editor/select.py +0 -0
  156. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/graph_editor/subgraph.py +0 -0
  157. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/graph_editor/transform.py +0 -0
  158. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/extern/graph_editor/util.py +0 -0
  159. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/forward_iface.py +0 -0
  160. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/__init__.py +0 -0
  161. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_cache.py +0 -0
  162. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_native/__init__.py +0 -0
  163. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_native/backend.cpp +0 -0
  164. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_native/backend.hpp +0 -0
  165. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_native/module.cpp +0 -0
  166. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_native/module.hpp +0 -0
  167. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_native/py_utils.hpp +0 -0
  168. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_native/tensor_ops.cpp +0 -0
  169. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_native/tensor_ops.hpp +0 -0
  170. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_numpy_backend.py +0 -0
  171. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_random_journal.py +0 -0
  172. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/_utils.py +0 -0
  173. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/array_.py +0 -0
  174. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/attention.py +0 -0
  175. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/audio/__init__.py +0 -0
  176. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/audio/mel.py +0 -0
  177. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/audio/specaugment.py +0 -0
  178. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/backend.py +0 -0
  179. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/build_from_dict.py +0 -0
  180. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/cond.py +0 -0
  181. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/const.py +0 -0
  182. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/container.py +0 -0
  183. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/control_flow_ctx.py +0 -0
  184. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/conversions/__init__.py +0 -0
  185. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
  186. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/conversions/hf_llama.py +0 -0
  187. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/conversions/torch_nn.py +0 -0
  188. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/decoder/__init__.py +0 -0
  189. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/decoder/transformer.py +0 -0
  190. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/device.py +0 -0
  191. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/dims.py +0 -0
  192. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/dropout.py +0 -0
  193. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/dtype.py +0 -0
  194. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/encoder/__init__.py +0 -0
  195. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/encoder/base.py +0 -0
  196. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/encoder/conformer.py +0 -0
  197. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/encoder/conformer_v2.py +0 -0
  198. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/encoder/e_branchformer.py +0 -0
  199. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/encoder/transformer.py +0 -0
  200. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/gradient.py +0 -0
  201. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/graph.py +0 -0
  202. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/hooks.py +0 -0
  203. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/init.py +0 -0
  204. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/label_smoothing.py +0 -0
  205. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/linear.py +0 -0
  206. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/loop.py +0 -0
  207. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/loss.py +0 -0
  208. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/math_.py +0 -0
  209. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/matmul.py +0 -0
  210. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/module.py +0 -0
  211. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/nested.py +0 -0
  212. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/normalization.py +0 -0
  213. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/parameter.py +0 -0
  214. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/parametrizations.py +0 -0
  215. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/parametrize.py +0 -0
  216. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/piecewise_linear.py +0 -0
  217. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/rand.py +0 -0
  218. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/rec.py +0 -0
  219. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/reduce.py +0 -0
  220. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/run_ctx.py +0 -0
  221. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/signal.py +0 -0
  222. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/state.py +0 -0
  223. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/stepwise_scheduler.py +0 -0
  224. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/tensor_array.py +0 -0
  225. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/frontend/types.py +0 -0
  226. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/import_/__init__.py +0 -0
  227. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/import_/common.py +0 -0
  228. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/import_/git.py +0 -0
  229. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/import_/import_.py +0 -0
  230. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/learning_rate_control.py +0 -0
  231. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/log.py +0 -0
  232. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/native_op.cpp +0 -0
  233. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/native_op.py +0 -0
  234. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/pretrain.py +0 -0
  235. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/sprint/__init__.py +0 -0
  236. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/sprint/cache.py +0 -0
  237. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/sprint/control.py +0 -0
  238. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/sprint/error_signals.py +0 -0
  239. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/sprint/extern_interface.py +0 -0
  240. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/sprint/interface.py +0 -0
  241. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/README.md +0 -0
  242. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/__init__.py +0 -0
  243. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/_dim_extra.py +0 -0
  244. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/_tensor_extra.py +0 -0
  245. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/_tensor_mixin_base.py +0 -0
  246. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/_tensor_op_overloads.py +0 -0
  247. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/control_flow_ctx.py +0 -0
  248. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/dim.py +0 -0
  249. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/marked_dim.py +0 -0
  250. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/tensor.py +0 -0
  251. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/tensor_dict.py +0 -0
  252. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tensor/utils.py +0 -0
  253. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/__init__.py +0 -0
  254. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/compat.py +0 -0
  255. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/data_pipeline.py +0 -0
  256. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/distributed.py +0 -0
  257. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/engine.py +0 -0
  258. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/README.md +0 -0
  259. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/__init__.py +0 -0
  260. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/_utils.py +0 -0
  261. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/cond.py +0 -0
  262. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
  263. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
  264. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/dims.py +0 -0
  265. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/layer.py +0 -0
  266. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/loop.py +0 -0
  267. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/make_layer.py +0 -0
  268. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/masked_computation.py +0 -0
  269. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
  270. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
  271. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_low_level/__init__.py +0 -0
  272. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/frontend_low_level/_backend.py +0 -0
  273. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/horovod.py +0 -0
  274. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/hyper_param_tuning.py +0 -0
  275. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/layers/__init__.py +0 -0
  276. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/layers/base.py +0 -0
  277. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/layers/rec.py +0 -0
  278. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/layers/segmental_model.py +0 -0
  279. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/layers/signal_processing.py +0 -0
  280. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/layers/variable.py +0 -0
  281. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/native_op.py +0 -0
  282. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/network.py +0 -0
  283. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/sprint.py +0 -0
  284. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/updater.py +0 -0
  285. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/util/__init__.py +0 -0
  286. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/util/data.py +0 -0
  287. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/util/gradient_checkpoint.py +0 -0
  288. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/util/ken_lm.py +0 -0
  289. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/tf/util/open_fst.py +0 -0
  290. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/README.md +0 -0
  291. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/__init__.py +0 -0
  292. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/data/__init__.py +0 -0
  293. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/data/extern_data.py +0 -0
  294. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/data/pipeline.py +0 -0
  295. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/data/queued_data_iter.py +0 -0
  296. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
  297. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/data/tensor_utils.py +0 -0
  298. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/distributed.py +0 -0
  299. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/frontend/__init__.py +0 -0
  300. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/frontend/_rand.py +0 -0
  301. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/frontend/bridge.py +0 -0
  302. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/frontend/raw_ops.py +0 -0
  303. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/optim/README.md +0 -0
  304. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/optim/__init__.py +0 -0
  305. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/optim/lion.py +0 -0
  306. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/updater.py +0 -0
  307. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/README.md +0 -0
  308. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/__init__.py +0 -0
  309. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/array_.py +0 -0
  310. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/debug_inf_nan.py +0 -0
  311. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/diagnose_gpu.py +0 -0
  312. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/exception_helper.py +0 -0
  313. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/gradient_checkpoint.py +0 -0
  314. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/module.py +0 -0
  315. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/torch/util/scaled_gradient.py +0 -0
  316. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/__init__.py +0 -0
  317. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/better_exchook.py +0 -0
  318. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/bpe.py +0 -0
  319. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/debug.py +0 -0
  320. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/debug_helpers.py +0 -0
  321. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/file_cache.py +0 -0
  322. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/fsa.py +0 -0
  323. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/literal_py_to_pickle.py +0 -0
  324. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/lru_cache.py +0 -0
  325. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/math.py +0 -0
  326. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
  327. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/native_code_compiler.py +0 -0
  328. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/pprint.py +0 -0
  329. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/py-to-pickle.cpp +0 -0
  330. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/py_ext_mod_compiler.py +0 -0
  331. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/result_with_reason.py +0 -0
  332. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/sig_proc.py +0 -0
  333. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/task_system.py +0 -0
  334. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/train_proc_manager.py +0 -0
  335. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn/util/watch_memory.py +0 -0
  336. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn.egg-info/SOURCES.txt +0 -0
  337. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn.egg-info/dependency_links.txt +0 -0
  338. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn.egg-info/requires.txt +0 -0
  339. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/returnn.egg-info/top_level.txt +0 -0
  340. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/rnn.py +0 -0
  341. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/setup.cfg +0 -0
  342. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/setup.py +0 -0
  343. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/DummySprintExec.py +0 -0
  344. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm-inspection-profile.xml +0 -0
  345. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/.gitignore +0 -0
  346. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/.name +0 -0
  347. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
  348. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
  349. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
  350. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
  351. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
  352. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/misc.xml +0 -0
  353. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/modules.xml +0 -0
  354. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/returnn.iml +0 -0
  355. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
  356. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/_set_num_threads1.py +0 -0
  357. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/_setup_returnn_env.py +0 -0
  358. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/_setup_test_env.py +0 -0
  359. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/bpe-unicode-demo.codes +0 -0
  360. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/bpe-unicode-demo.vocab +0 -0
  361. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/lexicon_opt.fst +0 -0
  362. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/lexicon_opt.isyms +0 -0
  363. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/lexicon_opt.jpg +0 -0
  364. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/lexicon_opt.osyms +0 -0
  365. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/lint_common.py +0 -0
  366. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/pycharm-inspect.py +0 -0
  367. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/pylint.py +0 -0
  368. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/returnn-as-framework.py +0 -0
  369. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/rf_utils.py +0 -0
  370. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/spelling.dic +0 -0
  371. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_Config.py +0 -0
  372. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_Dataset.py +0 -0
  373. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_Fsa.py +0 -0
  374. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_GeneratingDataset.py +0 -0
  375. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_HDFDataset.py +0 -0
  376. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_LearningRateControl.py +0 -0
  377. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_Log.py +0 -0
  378. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_MultiProcDataset.py +0 -0
  379. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_Pretrain.py +0 -0
  380. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_ResNet.py +0 -0
  381. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_SprintDataset.py +0 -0
  382. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_SprintInterface.py +0 -0
  383. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TFEngine.py +0 -0
  384. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TFNativeOp.py +0 -0
  385. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TFNetworkLayer.py +0 -0
  386. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TFNetworkRecLayer.py +0 -0
  387. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TFNetworkSigProcLayer.py +0 -0
  388. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TFUpdater.py +0 -0
  389. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TFUtil.py +0 -0
  390. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TF_determinism.py +0 -0
  391. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TaskSystem.py +0 -0
  392. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TaskSystem_SharedMem.py +0 -0
  393. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_TranslationDataset.py +0 -0
  394. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_Util.py +0 -0
  395. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_demos.py +0 -0
  396. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_fork_exec.py +0 -0
  397. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_hdf_dump.py +0 -0
  398. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_array.py +0 -0
  399. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_attention.py +0 -0
  400. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_base.py +0 -0
  401. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_cond.py +0 -0
  402. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_const.py +0 -0
  403. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_container.py +0 -0
  404. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_decoder_transformer.py +0 -0
  405. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_encoder_conformer.py +0 -0
  406. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_gradient.py +0 -0
  407. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_label_smoothing.py +0 -0
  408. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_loop.py +0 -0
  409. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_math.py +0 -0
  410. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_normalization.py +0 -0
  411. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_piecewise_linear.py +0 -0
  412. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_rec.py +0 -0
  413. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_reduce.py +0 -0
  414. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_rf_signal.py +0 -0
  415. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_tensor.py +0 -0
  416. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_threading.py +0 -0
  417. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_tools.py +0 -0
  418. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_torch_dataset.py +0 -0
  419. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_torch_engine.py +0 -0
  420. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_torch_frontend.py +0 -0
  421. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_torch_internal_frontend.py +0 -0
  422. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/test_torch_util.py +0 -0
  423. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tests/torch_utils.py +0 -0
  424. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/_setup_returnn_env.py +0 -0
  425. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/analyze-dataset-batches.py +0 -0
  426. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/bliss-collect-seq-lens.py +0 -0
  427. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/bliss-dump-text.py +0 -0
  428. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/bliss-get-segment-names.py +0 -0
  429. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/bliss-to-ogg-zip.py +0 -0
  430. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/bpe-create-lexicon.py +0 -0
  431. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/calculate-word-error-rate.py +0 -0
  432. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/cleanup-old-models.py +0 -0
  433. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/collect-orth-symbols.py +0 -0
  434. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/collect-words.py +0 -0
  435. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/compile_native_op.py +0 -0
  436. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/compile_tf_graph.py +0 -0
  437. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/debug-dump-search-scores.py +0 -0
  438. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/debug-plot-search-scores.py +0 -0
  439. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/dump-dataset-raw-strings.py +0 -0
  440. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/dump-dataset.py +0 -0
  441. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/dump-forward-stats.py +0 -0
  442. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/dump-forward.py +0 -0
  443. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/dump-network-json.py +0 -0
  444. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/dump-pickle.py +0 -0
  445. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/extract_state_tying_from_dataset.py +0 -0
  446. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/get-attention-weights.py +0 -0
  447. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/get-best-model-epoch.py +0 -0
  448. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/hdf_dump.py +0 -0
  449. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/hdf_dump_translation_dataset.py +0 -0
  450. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/import-blocks-mt-model.py +0 -0
  451. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/import-t2t-mt-model.py +0 -0
  452. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/.gitignore +0 -0
  453. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/Makefile +0 -0
  454. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/README.md +0 -0
  455. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/example/README.md +0 -0
  456. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/example/libs_list +0 -0
  457. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
  458. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
  459. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
  460. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/example/state_vars_list +0 -0
  461. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/example/tensor_names_list +0 -0
  462. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/file.h +0 -0
  463. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
  464. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
  465. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/main.cc +0 -0
  466. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/rescorer.h +0 -0
  467. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/vocabulary.cc +0 -0
  468. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/lattice_rescorer/vocabulary.h +0 -0
  469. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/tf_avg_checkpoints.py +0 -0
  470. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/tf_inspect_checkpoint.py +0 -0
  471. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/tf_inspect_summary_log.py +0 -0
  472. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/torch_avg_checkpoints.py +0 -0
  473. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/torch_export_to_onnx.py +0 -0
  474. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/torch_inspect_checkpoint.py +0 -0
  475. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
  476. {returnn-1.20250304.10039 → returnn-1.20250304.113330}/tools/torch_scale_tuning.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: returnn
3
- Version: 1.20250304.10039
3
+ Version: 1.20250304.113330
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.20250304.113330'
2
+ long_version = '1.20250304.113330+git.acf09da'
@@ -1223,7 +1223,7 @@ class Backend(Generic[T]):
1223
1223
  out_spatial_dims: Optional[Sequence[Dim]] = None,
1224
1224
  filter: Tensor,
1225
1225
  filter_size: Sequence[Dim], # to have the order well-defined
1226
- padding: str,
1226
+ padding: Union[str, int, Sequence[int]],
1227
1227
  strides: Optional[Union[int, Sequence[int]]] = None,
1228
1228
  dilation_rate: Optional[Union[int, Sequence[int]]] = None,
1229
1229
  groups: Optional[int] = None,
@@ -1258,7 +1258,7 @@ class Backend(Generic[T]):
1258
1258
  *,
1259
1259
  mode: str,
1260
1260
  pool_size: Sequence[int],
1261
- padding: str = "valid",
1261
+ padding: Union[str, int, Sequence[int]] = "valid",
1262
1262
  dilation_rate: Union[Sequence[int], int] = 1,
1263
1263
  strides: Sequence[int],
1264
1264
  in_spatial_dims: Sequence[Dim],
@@ -181,15 +181,46 @@ def conv(
181
181
  in_spatial_dims: Sequence[Dim],
182
182
  out_spatial_dims: Optional[Sequence[Dim]] = None,
183
183
  filter: Tensor,
184
- filter_size: Sequence[Dim], # to have the order well-defined
185
- padding: str,
184
+ filter_size: Sequence[Dim],
185
+ padding: Union[str, int, Sequence[int]],
186
186
  strides: Optional[Union[int, Sequence[int]]] = None,
187
187
  dilation_rate: Optional[Union[int, Sequence[int]]] = None,
188
188
  groups: Optional[int] = None,
189
189
  bias: Optional[Tensor] = None,
190
190
  use_mask: Optional[bool] = None,
191
191
  ) -> Tuple[Tensor, Sequence[Dim]]:
192
- """convolution"""
192
+ """
193
+ Generic N-D convolution.
194
+
195
+ :param source:
196
+ :param in_dim: input channels
197
+ :param out_dim: output channels
198
+ :param in_spatial_dims: On what dimensions to operate on.
199
+ The number of specified dims (1, 2 or 3) specifies whether this is 1D, 2D or 3D convolution.
200
+ The order is consistent with the order of the ``filter_size``, ``strides``, etc.
201
+ :param out_spatial_dims:
202
+ :param filter:
203
+ :param filter_size: defines the order of dims in ``filter``
204
+ such that it matches the order of ``in_spatial_dims``.
205
+ :param padding: "valid" or "same" or int. "valid" is like padding=0.
206
+ padding="same" will pad such that the output has the same spatial dimensions as the input
207
+ (in case of stride=1), or otherwise ceildiv(input, stride).
208
+ The specific padding in padding="same" with stride>1 has changed with behavior version >=24
209
+ (or global config option ``rf_use_consistent_same_padding``)
210
+ and is now consistent independent of dimension size.
211
+ See :func:`_consistent_same_padding` for more details.
212
+ :param strides: the default (if it is None) is 1
213
+ :param dilation_rate:
214
+ :param groups:
215
+ :param bias:
216
+ :param use_mask: Whether to mask the input tensor based on seq lengths
217
+ such that the padding in the padded tensor is ignored
218
+ (it will mask with 0).
219
+ With behavior version >=23, this is enabled by default,
220
+ or configured with global config option ``rf_use_mask``.
221
+ (Also see :func:`use_mask_default`).
222
+ :return: out, out_spatial_dims
223
+ """
193
224
  if any(in_spatial_dim.need_masking() for in_spatial_dim in in_spatial_dims):
194
225
  if use_mask is None:
195
226
  use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
@@ -198,6 +229,10 @@ def conv(
198
229
  for in_spatial_dim in in_spatial_dims:
199
230
  if in_spatial_dim not in source.dims:
200
231
  raise ValueError(f"conv: source {source} does not have spatial dim {in_spatial_dim}")
232
+ if padding == "same" and _any_is_non_default(strides, default=1) and _should_use_consistent_same_padding():
233
+ source, in_spatial_dims, padding = _consistent_same_padding(
234
+ source, in_spatial_dims=in_spatial_dims, filter_size=filter_size, dilation_rate=dilation_rate, pad_value=0
235
+ )
201
236
  # noinspection PyProtectedMember
202
237
  out, out_spatial_dims = source._raw_backend.conv(
203
238
  source,
@@ -359,6 +394,9 @@ def transposed_conv(
359
394
  use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
360
395
  if use_mask:
361
396
  source = source.copy_masked(0, dims=in_spatial_dims)
397
+ if padding == "same" and _any_is_non_default(strides, default=1) and _should_use_consistent_same_padding():
398
+ # I don't really know what this should mean here... Investigate this further...
399
+ raise NotImplementedError("consistent same padding not implemented for transposed conv")
362
400
  # noinspection PyProtectedMember
363
401
  out, out_spatial_dims = source._raw_backend.transposed_conv(
364
402
  source=source,
@@ -409,7 +447,7 @@ def pool(
409
447
  nd: Optional[int] = None,
410
448
  mode: str,
411
449
  pool_size: Union[Sequence[int], int],
412
- padding: str = "valid",
450
+ padding: Union[str, int, Sequence[int]] = "valid",
413
451
  dilation_rate: Union[Sequence[int], int] = 1,
414
452
  strides: Optional[Union[Sequence[int], int]] = None,
415
453
  in_spatial_dims: Union[Sequence[Dim], Dim],
@@ -417,19 +455,29 @@ def pool(
417
455
  use_mask: Optional[bool] = None,
418
456
  ) -> Tuple[Tensor, Sequence[Dim]]:
419
457
  """
420
- A generic N-D pooling layer.
421
- This would usually be done after a convolution for down-sampling.
458
+ Generic N-D pooling.
422
459
 
423
460
  :param source:
424
461
  :param nd:
425
462
  :param mode: "max" or "avg"
426
463
  :param pool_size: shape of the window of each reduce
427
- :param padding: "valid" or "same"
464
+ :param padding: "valid" or "same" or int. "valid" is like padding=0.
465
+ padding="same" will pad such that the output has the same spatial dimensions as the input
466
+ (in case of stride=1), or otherwise ceildiv(input, stride).
467
+ The specific padding in padding="same" with stride>1 has changed with behavior version >=24
468
+ (or global config option ``rf_use_consistent_same_padding``)
469
+ and is now consistent independent of dimension size.
470
+ See :func:`_consistent_same_padding` for more details.
428
471
  :param dilation_rate:
429
- :param strides: in contrast to tf.nn.pool, the default (if it is None) will be set to pool_size
472
+ :param strides: the default (if it is None) will be set to pool_size (in contrast to :func:`conv`)
430
473
  :param in_spatial_dims:
431
474
  :param out_spatial_dims:
432
- :param use_mask:
475
+ :param use_mask: Whether to mask the input tensor based on seq lengths
476
+ such that the padding in the padded tensor is ignored
477
+ (for max-pooling, it will mask with -inf, for avg-pooling with 0).
478
+ With behavior version >=23, this is enabled by default,
479
+ or configured with global config option ``rf_use_mask``.
480
+ (Also see :func:`use_mask_default`).
433
481
  :return: out, out_spatial_dims
434
482
  """
435
483
  if isinstance(in_spatial_dims, Dim):
@@ -451,8 +499,7 @@ def pool(
451
499
  strides = pool_size
452
500
  elif isinstance(strides, int):
453
501
  strides = [strides] * nd
454
- assert isinstance(strides, (list, tuple))
455
- assert len(strides) == nd
502
+ assert isinstance(strides, (list, tuple)) and len(strides) == nd and all(isinstance(s, int) for s in strides)
456
503
 
457
504
  if any(in_spatial_dim.need_masking() for in_spatial_dim in in_spatial_dims):
458
505
  if use_mask is None:
@@ -462,6 +509,15 @@ def pool(
462
509
  else:
463
510
  use_mask = False
464
511
 
512
+ if padding == "same" and _any_is_non_default(strides, default=1) and _should_use_consistent_same_padding():
513
+ source, in_spatial_dims, padding = _consistent_same_padding(
514
+ source,
515
+ in_spatial_dims=in_spatial_dims,
516
+ filter_size=pool_size,
517
+ dilation_rate=dilation_rate,
518
+ pad_value={"max": float("-inf"), "avg": 0}[mode],
519
+ )
520
+
465
521
  # noinspection PyProtectedMember
466
522
  out, out_spatial_dims = source._raw_backend.pool(
467
523
  source=source,
@@ -642,7 +698,7 @@ def make_conv_out_spatial_dims(
642
698
  in_spatial_dims: Sequence[Dim],
643
699
  *,
644
700
  filter_size: Union[Sequence[Union[int, Dim]], int, Dim],
645
- padding: str,
701
+ padding: Union[str, int, Sequence[int]],
646
702
  strides: Union[Sequence[int], int] = 1,
647
703
  dilation_rate: Union[Sequence[int], int] = 1,
648
704
  description_prefix: Optional[str] = None,
@@ -658,11 +714,15 @@ def make_conv_out_spatial_dims(
658
714
  if isinstance(dilation_rate, int):
659
715
  dilation_rate = [dilation_rate] * nd
660
716
  assert nd == len(in_spatial_dims) == len(filter_size) == len(strides) == len(dilation_rate)
661
- assert padding.lower() in ("valid", "same")
717
+ if isinstance(padding, (int, str)):
718
+ padding = [padding] * nd
719
+ padding = [p.lower() if isinstance(p, str) else p for p in padding]
662
720
  out_spatial_dims = []
663
721
  for i in range(nd):
664
722
  in_spatial_dim = in_spatial_dims[i]
665
- if filter_size[i] == strides[i] == 1 or (strides[i] == 1 and padding.lower() == "same"):
723
+ if (filter_size[i] == strides[i] == 1 and padding[i] in ("valid", "same", 0)) or (
724
+ strides[i] == 1 and padding[i] == "same"
725
+ ):
666
726
  out_spatial_dims.append(in_spatial_dim)
667
727
  else:
668
728
  out_spatial_dim = _calc_out_dim(
@@ -670,7 +730,7 @@ def make_conv_out_spatial_dims(
670
730
  filter_size=filter_size[i],
671
731
  stride=strides[i],
672
732
  dilation_rate=dilation_rate[i],
673
- padding=padding,
733
+ padding=padding[i],
674
734
  )
675
735
  assert isinstance(out_spatial_dim, Dim)
676
736
  if description_prefix and out_spatial_dim != in_spatial_dim:
@@ -681,7 +741,7 @@ def make_conv_out_spatial_dims(
681
741
  filter_size=filter_size[i],
682
742
  stride=strides[i],
683
743
  dilation_rate=dilation_rate[i],
684
- padding=padding,
744
+ padding=padding[i],
685
745
  )
686
746
  out_spatial_dims.append(out_spatial_dim)
687
747
  return out_spatial_dims
@@ -695,7 +755,7 @@ def _calc_out_dim(in_dim, filter_size, stride, padding, dilation_rate=1):
695
755
  :param int filter_size: e.g. 2, for the corresponding axis
696
756
  :param int stride: e.g. 1, for the corresponding axis
697
757
  :param int dilation_rate: e.g. 1
698
- :param str padding: "valid" or "same"
758
+ :param str|int padding: "valid" or "same" or int
699
759
  :return: the output dimension
700
760
  :rtype: T
701
761
  """
@@ -712,13 +772,16 @@ def _calc_out_dim(in_dim, filter_size, stride, padding, dilation_rate=1):
712
772
  return rf.ceil_divide(a, b)
713
773
  return -(-a // b)
714
774
 
715
- padding = padding.upper()
775
+ padding = padding.lower() if isinstance(padding, str) else padding
716
776
  # See tf.compat.v1.nn.convolution() documentation for more.
717
- if padding == "SAME":
777
+ if padding == "same":
718
778
  if isinstance(in_dim, Dim):
719
779
  return in_dim.ceildiv_right(stride)
720
780
  return ceildiv(in_dim, stride)
721
- elif padding == "VALID":
781
+ elif padding == "valid" or isinstance(padding, int):
782
+ if isinstance(padding, int) and padding != 0:
783
+ assert padding > 0
784
+ in_dim = padding + in_dim + padding
722
785
  if isinstance(in_dim, Dim):
723
786
  filter_left_dilated = (filter_size - 1) * dilation_rate // 2
724
787
  filter_right_dilated = (filter_size - 1) * dilation_rate - filter_left_dilated
@@ -726,4 +789,95 @@ def _calc_out_dim(in_dim, filter_size, stride, padding, dilation_rate=1):
726
789
  return valid_part.ceildiv_right(stride)
727
790
  return ceildiv(in_dim - (filter_size - 1) * dilation_rate, stride)
728
791
  else:
729
- raise Exception("invalid padding %r" % padding)
792
+ raise ValueError(f"invalid padding {padding!r} (type {type(padding).__name__})")
793
+
794
+
795
+ def _should_use_consistent_same_padding() -> bool:
796
+ """
797
+ :return: whether to use the new consistent same padding with :func:`_consistent_same_padding`.
798
+
799
+ This is only needed for the case when we have striding and padding="same".
800
+ See :func:`_consistent_same_padding` for more details.
801
+
802
+ Check the global RETURNN config for the ``rf_use_consistent_same_padding``
803
+ on how we should handle the ``padding="same"`` case for convolution/pooling when there is striding.
804
+ If that is not specified, with behavior version >=24, we will use the new consistent same padding,
805
+ with behavior version <=23, we will not use it.
806
+
807
+ See issue `#1693 <https://github.com/rwth-i6/returnn/issues/1693>`__.
808
+ """
809
+ from returnn.config import get_global_config
810
+
811
+ config = get_global_config(raise_exception=False)
812
+ config_value = None
813
+ if config:
814
+ if "rf_use_consistent_same_padding" in config.typed_dict:
815
+ config_value = config.typed_dict["rf_use_consistent_same_padding"]
816
+ assert config_value is None or isinstance(config_value, bool)
817
+ elif "rf_use_consistent_same_padding" in config.dict:
818
+ config_value = config.bool("rf_use_consistent_same_padding", None)
819
+ if config_value is not None:
820
+ return config_value
821
+
822
+ from returnn.util.basic import BehaviorVersion
823
+
824
+ return BehaviorVersion.get() >= 24
825
+
826
+
827
+ def _consistent_same_padding(
828
+ source: Tensor,
829
+ *,
830
+ in_spatial_dims: Sequence[Dim],
831
+ filter_size: Optional[Union[int, Dim, Sequence[int], Sequence[Dim]]],
832
+ dilation_rate: Optional[Union[int, Sequence[int]]] = None,
833
+ pad_value: Union[int, float],
834
+ ) -> Tuple[Tensor, Sequence[Dim], Union[int, Sequence[int]]]:
835
+ """
836
+ In case of striding and padding="same", the standard padding that we do (following TensorFlow)
837
+ depends on the current dimension size.
838
+ It adds padding left and right such that the first and last window
839
+ will have the same amount of padding (+-1).
840
+ With stride=1, this is the standard (filter_size-1)/2 left and right padding,
841
+ but with stride>1, this is not the case anymore.
842
+ (See also the explanation and calculation of padding in :func:`returnn.torch.frontend._backend.TorchBackend.conv`.)
843
+ However, the problem with this behavior is with batching:
844
+ The padding now depends on the longest sequence in the batch,
845
+ and thus is arbitrary for any of the other sequences.
846
+
847
+ The new consistent same padding adds padding independent of the current dimension size (largest seq in batch).
848
+ We just do the same as with stride=1, i.e. (filter_size-1)/2 left and right padding.
849
+
850
+ :return: source or padded source, in_spatial_dims or new in_spatial_dims, new padding on top of the output
851
+ """
852
+ filter_size = _make_sequence(filter_size or 1, nd=len(in_spatial_dims))
853
+ dilation_rate = _make_sequence(dilation_rate or 1, nd=len(in_spatial_dims))
854
+ filter_size_ints = [s.dimension if isinstance(s, Dim) else s for s in filter_size]
855
+ if all(s % 2 == 1 for s in filter_size_ints):
856
+ # In this case, we can pass padding as integer to the backend, so that it adds the same padding left/right.
857
+ return source, in_spatial_dims, [(s // 2) * d for s, d in zip(filter_size_ints, dilation_rate)]
858
+ # Need to use the custom padding here.
859
+ paddings = []
860
+ for s, d in zip(filter_size, dilation_rate):
861
+ pad_left = (s - 1) * d // 2
862
+ pad_right = (s - 1) * d - pad_left
863
+ paddings.append((pad_left, pad_right))
864
+ # We expect that masking was already done before (or we don't care about it), thus handle_dynamic_dims=False.
865
+ source, in_spatial_dims = rf.pad(
866
+ source, axes=in_spatial_dims, padding=paddings, value=pad_value, handle_dynamic_dims=False
867
+ )
868
+ return source, in_spatial_dims, 0
869
+
870
+
871
+ def _make_sequence(value: Union[int, Sequence[int]], *, nd: int) -> Sequence[int]:
872
+ if isinstance(value, int):
873
+ return [value] * nd
874
+ assert len(value) == nd
875
+ return value
876
+
877
+
878
+ def _any_is_non_default(single_or_seq: Optional[Union[int, Sequence[int]]], *, default: int) -> bool:
879
+ if single_or_seq is None:
880
+ return False
881
+ if isinstance(single_or_seq, int):
882
+ return single_or_seq != default
883
+ return any(i != default for i in single_or_seq)
@@ -998,7 +998,7 @@ class ReturnnLayersBackend(Backend[Layer]):
998
998
  out_spatial_dims: Optional[Sequence[Dim]] = None,
999
999
  filter: Tensor,
1000
1000
  filter_size: Sequence[Dim], # to have the order well-defined
1001
- padding: str,
1001
+ padding: Union[str, int, Sequence[int]],
1002
1002
  strides: Optional[Union[int, Sequence[int]]] = None,
1003
1003
  dilation_rate: Optional[Union[int, Sequence[int]]] = None,
1004
1004
  groups: Optional[int] = None,
@@ -1088,7 +1088,7 @@ class ReturnnLayersBackend(Backend[Layer]):
1088
1088
  *,
1089
1089
  mode: str,
1090
1090
  pool_size: Sequence[int],
1091
- padding: str = "valid",
1091
+ padding: Union[str, int, Sequence[int]] = "valid",
1092
1092
  dilation_rate: Union[Sequence[int], int] = 1,
1093
1093
  strides: Sequence[int],
1094
1094
  in_spatial_dims: Sequence[Dim],