returnn 1.20250116.102559__tar.gz → 1.20250117.155146__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.
- {returnn-1.20250116.102559/returnn.egg-info → returnn-1.20250117.155146}/PKG-INFO +1 -1
- returnn-1.20250117.155146/_setup_info_generated.py +2 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/basic.py +1 -0
- returnn-1.20250117.155146/returnn/datasets/text_dict.py +259 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/util/vocabulary.py +9 -4
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/array_.py +30 -3
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/_tensor_extra.py +40 -32
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/tensor.py +2 -2
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/basic.py +19 -5
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/_backend.py +6 -1
- {returnn-1.20250116.102559 → returnn-1.20250117.155146/returnn.egg-info}/PKG-INFO +1 -1
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn.egg-info/SOURCES.txt +1 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFNetworkLayer.py +75 -11
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_array.py +76 -1
- returnn-1.20250116.102559/_setup_info_generated.py +0 -2
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/.editorconfig +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/.gitignore +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/.gitmodules +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/.kateconfig +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/CHANGELOG.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/CODEOWNERS +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/CONTRIBUTING.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/LICENSE +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/MANIFEST.in +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/README.rst +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/12AX.cluster_map +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/_setup_returnn_env.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-fwd.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-horovod-mpi.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-horovod-mpi.py.sh +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-horovod-mpi.sh +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-hyper-param-tuning.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-iter-dataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-list-devices.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-lua-torch-layer.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-pretrain.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-record-and-push-to-webserver.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-returnn-as-framework.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-rf-pt-benchmark.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-rf.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-rhn-enwik8.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-sprint-interface.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-att-copy.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-attention.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-enc-dec.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-hard-att-copy.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-lstm-benchmark.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-native-lstm.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-native-lstm2.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-neural-transducer.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-rec-explicit-lstm.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-rec-explicit-rnn.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-rec-self-att.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-search-compiled-graph.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-timit-lstm-ctc.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-torch.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/demo.sh +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/README.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/chars.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/config_demo +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/config_fwd +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/config_real +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/decode.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/go.sh +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/lines.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/split/eval.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/split/train.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/IAM/split/valid.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial/create_test_h5.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial/forwardconfig +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial/go.sh +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial/trainconfig +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial_rgb/go.sh +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/pyproject.toml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/requirements.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/__main__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/__old_mod_loader__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/__setup__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/config.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/audio.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/bundle_file.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/cached.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/cached2.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/distrib_files.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/generating.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/hdf.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/lm.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/map.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/meta.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/multi_proc.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/normalization_data.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/numpy_dump.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/postprocessing.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/raw_wav.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/sprint.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/stereo.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/util/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/util/feature_extraction.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/datasets/util/strings.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/engine/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/engine/base.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/engine/batch.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/__main__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/.git +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/edit.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/reroute.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/select.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/subgraph.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/transform.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/extern/graph_editor/util.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/forward_iface.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_backend.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_cache.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/backend.cpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/backend.hpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/module.cpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/module.hpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/py_utils.hpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/tensor_ops.cpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_native/tensor_ops.hpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_numpy_backend.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_random_journal.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/_utils.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/attention.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/audio/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/audio/mel.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/audio/specaugment.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/backend.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/build_from_dict.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/cond.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/const.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/container.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/control_flow_ctx.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conv.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conversions/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conversions/hf_llama.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/conversions/torch_nn.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/decoder/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/decoder/transformer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/device.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/dims.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/dropout.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/dtype.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/base.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/conformer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/conformer_v2.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/e_branchformer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/encoder/transformer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/gradient.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/graph.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/hooks.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/init.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/label_smoothing.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/linear.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/loop.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/loss.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/math_.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/matmul.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/module.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/normalization.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/parameter.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/parametrizations.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/parametrize.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/piecewise_linear.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/rand.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/rec.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/reduce.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/run_ctx.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/signal.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/state.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/stepwise_scheduler.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/tensor_array.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/frontend/types.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/import_/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/import_/common.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/import_/git.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/import_/import_.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/learning_rate_control.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/log.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/native_op.cpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/native_op.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/pretrain.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/cache.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/control.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/error_signals.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/extern_interface.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/sprint/interface.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/_dim_extra.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/_tensor_mixin_base.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/_tensor_op_overloads.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/control_flow_ctx.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/dim.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/marked_dim.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/tensor_dict.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tensor/utils.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/compat.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/data_pipeline.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/distributed.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/engine.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/_backend.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/_utils.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/cond.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/dims.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/layer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/loop.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/make_layer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/masked_computation.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_low_level/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/frontend_low_level/_backend.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/horovod.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/hyper_param_tuning.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/base.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/rec.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/segmental_model.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/signal_processing.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/layers/variable.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/native_op.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/network.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/sprint.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/updater.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/basic.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/data.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/gradient_checkpoint.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/ken_lm.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/tf/util/open_fst.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/extern_data.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/pipeline.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/queued_data_iter.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/data/tensor_utils.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/distributed.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/engine.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/_rand.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/bridge.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/frontend/raw_ops.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/optim/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/optim/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/optim/lion.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/updater.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/array_.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/debug_inf_nan.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/diagnose_gpu.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/exception_helper.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/gradient_checkpoint.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/module.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/torch/util/scaled_gradient.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/__init__.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/basic.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/better_exchook.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/bpe.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/debug.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/debug_helpers.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/file_cache.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/fsa.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/literal_py_to_pickle.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/lru_cache.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/math.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/native_code_compiler.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/pprint.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/py-to-pickle.cpp +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/py_compat.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/py_ext_mod_compiler.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/result_with_reason.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/sig_proc.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/task_system.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/train_proc_manager.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn/util/watch_memory.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn.egg-info/dependency_links.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/returnn.egg-info/top_level.txt +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/rnn.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/setup.cfg +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/setup.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/DummySprintExec.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm-inspection-profile.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/.gitignore +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/.name +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/misc.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/modules.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/returnn.iml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/_set_num_threads1.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/_setup_returnn_env.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/_setup_test_env.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/bpe-unicode-demo.codes +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/bpe-unicode-demo.vocab +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lexicon_opt.fst +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lexicon_opt.isyms +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lexicon_opt.jpg +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lexicon_opt.osyms +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/lint_common.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/pycharm-inspect.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/pylint.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/returnn-as-framework.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/rf_utils.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/spelling.dic +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Config.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Dataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Fsa.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_GeneratingDataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_HDFDataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_LearningRateControl.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Log.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_MultiProcDataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Pretrain.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_ResNet.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_SprintDataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_SprintInterface.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFEngine.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFNativeOp.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFNetworkRecLayer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFNetworkSigProcLayer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFUpdater.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TFUtil.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TF_determinism.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TaskSystem.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TaskSystem_SharedMem.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_TranslationDataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_Util.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_demos.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_fork_exec.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_hdf_dump.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_attention.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_base.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_cond.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_const.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_container.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_conv.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_decoder_transformer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_encoder_conformer.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_gradient.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_label_smoothing.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_loop.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_math.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_normalization.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_piecewise_linear.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_rec.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_reduce.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_rf_signal.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_tensor.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_threading.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_tools.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_dataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_engine.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_frontend.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_internal_frontend.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/test_torch_util.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tests/torch_utils.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/_setup_returnn_env.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/analyze-dataset-batches.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bliss-collect-seq-lens.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bliss-dump-text.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bliss-get-segment-names.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bliss-to-ogg-zip.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/bpe-create-lexicon.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/calculate-word-error-rate.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/cleanup-old-models.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/collect-orth-symbols.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/collect-words.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/compile_native_op.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/compile_tf_graph.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/debug-dump-search-scores.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/debug-plot-search-scores.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-dataset-raw-strings.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-dataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-forward-stats.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-forward.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-network-json.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/dump-pickle.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/extract_state_tying_from_dataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/get-attention-weights.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/get-best-model-epoch.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/hdf_dump.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/hdf_dump_translation_dataset.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/import-blocks-mt-model.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/import-t2t-mt-model.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/.gitignore +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/Makefile +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/README.md +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/libs_list +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/state_vars_list +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/example/tensor_names_list +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/file.h +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/main.cc +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/rescorer.h +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/vocabulary.cc +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/lattice_rescorer/vocabulary.h +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/tf_avg_checkpoints.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/tf_inspect_checkpoint.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/tf_inspect_summary_log.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/torch_avg_checkpoints.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/torch_export_to_onnx.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/torch_inspect_checkpoint.py +0 -0
- {returnn-1.20250116.102559 → returnn-1.20250117.155146}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
|
@@ -1456,6 +1456,7 @@ def get_dataset_class(name: Union[str, Type[Dataset]]) -> Optional[Type[Dataset]
|
|
|
1456
1456
|
"multi_proc",
|
|
1457
1457
|
"distrib_files",
|
|
1458
1458
|
"postprocessing",
|
|
1459
|
+
"text_dict",
|
|
1459
1460
|
]
|
|
1460
1461
|
for mod_name in mod_names:
|
|
1461
1462
|
mod = import_module("returnn.datasets.%s" % mod_name)
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"""
|
|
2
|
+
:class:`TextDictDataset`
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
from typing import Optional, Union, Any, Sequence, Tuple, List, Dict
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
from returnn.log import log
|
|
10
|
+
from .basic import DatasetSeq
|
|
11
|
+
from .cached2 import CachedDataset2
|
|
12
|
+
from .util.vocabulary import Vocabulary
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TextDictDataset(CachedDataset2):
|
|
16
|
+
"""
|
|
17
|
+
This dataset can read files in the format as usually generated from RETURNN search,
|
|
18
|
+
i.e. with beam like (item_format = "list_with_scores")::
|
|
19
|
+
|
|
20
|
+
{
|
|
21
|
+
seq_tag: [(score1, text1), (score2, text2), ...],
|
|
22
|
+
...
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
Or without beam like (item_format = "single")::
|
|
26
|
+
|
|
27
|
+
{
|
|
28
|
+
seq_tag: text,
|
|
29
|
+
...
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
The data keys:
|
|
33
|
+
|
|
34
|
+
data: The single (or best) sequence (encoded via vocab).
|
|
35
|
+
data_flat: for list_with_scores, all sequences concatenated (encoded via vocab), in the given order
|
|
36
|
+
data_seq_lens: for list_with_scores, the sequence lengths of each seq in data_flat
|
|
37
|
+
scores: for list_with_scores, the scores of each seq in data_flat
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
*,
|
|
43
|
+
filename: str,
|
|
44
|
+
item_format: str = "list_with_scores",
|
|
45
|
+
vocab: Union[Vocabulary, Dict[str, Any]],
|
|
46
|
+
**kwargs,
|
|
47
|
+
):
|
|
48
|
+
"""
|
|
49
|
+
:param filename: text dict file. can be gzipped.
|
|
50
|
+
:param item_format: "list_with_scores" or "single"
|
|
51
|
+
:param vocab: to encode the text as a label sequence. See :class:`Vocabulary.create_vocab`.
|
|
52
|
+
"""
|
|
53
|
+
super().__init__(**kwargs)
|
|
54
|
+
self.filename = filename
|
|
55
|
+
self.item_format = item_format
|
|
56
|
+
self.vocab = vocab if isinstance(vocab, Vocabulary) else Vocabulary.create_vocab(**vocab)
|
|
57
|
+
self.num_inputs = self.vocab.num_labels
|
|
58
|
+
self.num_outputs = {}
|
|
59
|
+
self.labels = {}
|
|
60
|
+
if item_format == "list_with_scores":
|
|
61
|
+
self.num_outputs.update(
|
|
62
|
+
{
|
|
63
|
+
"data": (self.vocab.num_labels, 1),
|
|
64
|
+
"data_flat": (self.vocab.num_labels, 1),
|
|
65
|
+
"data_seq_lens": (1, 1),
|
|
66
|
+
"scores": (1, 1),
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
self.labels.update({"data_flat": self.vocab.labels})
|
|
70
|
+
elif item_format == "single":
|
|
71
|
+
self.num_outputs.update({"data": (self.vocab.num_labels, 1)})
|
|
72
|
+
self.labels.update({"data": self.vocab.labels})
|
|
73
|
+
else:
|
|
74
|
+
raise ValueError(f"invalid item_format {item_format!r}")
|
|
75
|
+
self._data_values: Optional[List[Union[List[Tuple[float, str]], str]]] = None # lazily loaded
|
|
76
|
+
self._seq_tags: Optional[List[str]] = None # lazily loaded
|
|
77
|
+
self._seq_order: Optional[Sequence[int]] = None # via init_seq_order
|
|
78
|
+
|
|
79
|
+
def _load(self):
|
|
80
|
+
if self._data_values is not None:
|
|
81
|
+
return
|
|
82
|
+
|
|
83
|
+
if self.filename.endswith(".gz"):
|
|
84
|
+
import gzip
|
|
85
|
+
|
|
86
|
+
txt = gzip.GzipFile(self.filename, "rb").read()
|
|
87
|
+
else:
|
|
88
|
+
txt = open(self.filename, "rb").read()
|
|
89
|
+
|
|
90
|
+
from returnn.util.literal_py_to_pickle import literal_eval
|
|
91
|
+
|
|
92
|
+
# Note: literal_py_to_pickle.literal_eval is quite efficient.
|
|
93
|
+
# However, currently, it does not support inf/nan literals,
|
|
94
|
+
# so it might break for some input.
|
|
95
|
+
# We might want to put a simple fallback to eval here if needed.
|
|
96
|
+
# Or maybe extend literal_py_to_pickle.literal_eval to support inf/nan literals.
|
|
97
|
+
try:
|
|
98
|
+
data: Dict[str, Any] = literal_eval(txt)
|
|
99
|
+
except Exception as exc:
|
|
100
|
+
print(f"{self}: Warning: literal_py_to_pickle.literal_eval failed:", file=log.v3)
|
|
101
|
+
print(f" {type(exc).__name__}: {exc}", file=log.v3)
|
|
102
|
+
print(" Fallback to eval...", file=log.v3)
|
|
103
|
+
data: Dict[str, Any] = eval(txt)
|
|
104
|
+
assert data is not None
|
|
105
|
+
assert isinstance(data, dict)
|
|
106
|
+
assert len(data) > 0
|
|
107
|
+
# Check some data.
|
|
108
|
+
key, value = next(iter(data.items()))
|
|
109
|
+
assert isinstance(key, str), f"{self}: expected seq tag as keys, got {key!r} ({type(key)})" # seq tag
|
|
110
|
+
if self.item_format == "single":
|
|
111
|
+
assert isinstance(value, str), f"{self}: expected str ({self.item_format}), got {value!r} ({type(value)})"
|
|
112
|
+
elif self.item_format == "list_with_scores":
|
|
113
|
+
assert isinstance(value, list), f"{self}: expected list ({self.item_format}), got {value!r} ({type(value)})"
|
|
114
|
+
assert len(value) > 0, f"{self}: expected non-empty list ({self.item_format}), got {value!r} for seq {key}"
|
|
115
|
+
value0 = value[0]
|
|
116
|
+
assert (
|
|
117
|
+
isinstance(value0, tuple)
|
|
118
|
+
and len(value0) == 2
|
|
119
|
+
and isinstance(value0[0], float)
|
|
120
|
+
and isinstance(value0[1], str)
|
|
121
|
+
), f"{self}: expected (score,text) tuples ({self.item_format}), got {value0!r} ({type(value0)})"
|
|
122
|
+
else:
|
|
123
|
+
raise ValueError(f"invalid item_format {self.item_format!r}")
|
|
124
|
+
self._data_values = list(data.values())
|
|
125
|
+
self._seq_tags = list(data.keys())
|
|
126
|
+
|
|
127
|
+
def init_seq_order(self, epoch=None, seq_list=None, seq_order=None):
|
|
128
|
+
"""init seq order"""
|
|
129
|
+
super().init_seq_order(epoch=epoch, seq_list=seq_list, seq_order=seq_order)
|
|
130
|
+
if epoch is None and seq_list is None and seq_order is None:
|
|
131
|
+
self._num_seqs = 0
|
|
132
|
+
return True
|
|
133
|
+
|
|
134
|
+
random_seed = self._get_random_seed_for_epoch(epoch=epoch)
|
|
135
|
+
self.vocab.set_random_seed(random_seed)
|
|
136
|
+
|
|
137
|
+
if self.item_format == "single":
|
|
138
|
+
|
|
139
|
+
def _get_seq_len(i: int) -> int:
|
|
140
|
+
return len(self._data_values[i])
|
|
141
|
+
|
|
142
|
+
elif self.item_format == "list_with_scores":
|
|
143
|
+
|
|
144
|
+
def _get_seq_len(i: int) -> int:
|
|
145
|
+
values = self._data_values[i]
|
|
146
|
+
return sum(len(text) for _, text in values)
|
|
147
|
+
|
|
148
|
+
else:
|
|
149
|
+
raise ValueError(f"invalid item_format {self.item_format!r}")
|
|
150
|
+
|
|
151
|
+
if seq_order is not None:
|
|
152
|
+
self._seq_order = seq_order
|
|
153
|
+
elif seq_list is not None:
|
|
154
|
+
raise NotImplementedError(f"{self}: seq_list not supported yet")
|
|
155
|
+
else:
|
|
156
|
+
self._load()
|
|
157
|
+
num_seqs = len(self._data_values)
|
|
158
|
+
self._seq_order = self.get_seq_order_for_epoch(epoch=epoch, num_seqs=num_seqs, get_seq_len=_get_seq_len)
|
|
159
|
+
self._num_seqs = len(self._seq_order)
|
|
160
|
+
|
|
161
|
+
def _collect_single_seq(self, seq_idx: int) -> Optional[DatasetSeq]:
|
|
162
|
+
orig_seq_idx = self._seq_order[seq_idx]
|
|
163
|
+
seq_tag = self._seq_tags[orig_seq_idx]
|
|
164
|
+
data = self._data_values[orig_seq_idx]
|
|
165
|
+
|
|
166
|
+
res = {}
|
|
167
|
+
labels_dtype = self.get_data_dtype("data")
|
|
168
|
+
if self.item_format == "single":
|
|
169
|
+
res["data"] = np.array(self.vocab.get_seq(data), dtype=labels_dtype)
|
|
170
|
+
elif self.item_format == "list_with_scores":
|
|
171
|
+
_, best = max(data, key=lambda x: x[0])
|
|
172
|
+
res["data"] = np.array(self.vocab.get_seq(best), dtype=labels_dtype)
|
|
173
|
+
labels = [self.vocab.get_seq(txt) for _, txt in data]
|
|
174
|
+
res["data_flat"] = np.array(sum(labels, []), dtype=labels_dtype)
|
|
175
|
+
res["data_seq_lens"] = np.array([len(seq) for seq in labels], dtype=self.get_data_dtype("data_seq_lens"))
|
|
176
|
+
res["scores"] = np.array([score for score, _ in data], dtype=self.get_data_dtype("scores"))
|
|
177
|
+
else:
|
|
178
|
+
raise ValueError(f"invalid item_format {self.item_format!r}")
|
|
179
|
+
return DatasetSeq(seq_idx=seq_idx, features=res, seq_tag=seq_tag)
|
|
180
|
+
|
|
181
|
+
def supports_sharding(self) -> bool:
|
|
182
|
+
""":return: whether this dataset supports sharding"""
|
|
183
|
+
return True
|
|
184
|
+
|
|
185
|
+
def supports_seq_order_sorting(self) -> bool:
|
|
186
|
+
"""supports sorting"""
|
|
187
|
+
return True
|
|
188
|
+
|
|
189
|
+
def get_current_seq_order(self) -> Sequence[int]:
|
|
190
|
+
""":return: seq order"""
|
|
191
|
+
assert self._seq_order is not None, "init_seq_order not called"
|
|
192
|
+
return self._seq_order
|
|
193
|
+
|
|
194
|
+
def have_corpus_seq_idx(self) -> bool:
|
|
195
|
+
"""
|
|
196
|
+
:return: whether we can use :func:`get_corpus_seq_idx`
|
|
197
|
+
"""
|
|
198
|
+
return True
|
|
199
|
+
|
|
200
|
+
def get_corpus_seq_idx(self, seq_idx: int) -> int:
|
|
201
|
+
"""
|
|
202
|
+
:param seq_idx:
|
|
203
|
+
"""
|
|
204
|
+
assert self._seq_order is not None, "init_seq_order not called"
|
|
205
|
+
return self._seq_order[seq_idx]
|
|
206
|
+
|
|
207
|
+
def get_tag(self, seq_idx: int) -> str:
|
|
208
|
+
"""
|
|
209
|
+
:param seq_idx:
|
|
210
|
+
:return: seq tag
|
|
211
|
+
"""
|
|
212
|
+
self._load()
|
|
213
|
+
return self._seq_tags[self._seq_order[seq_idx]]
|
|
214
|
+
|
|
215
|
+
def get_all_tags(self) -> List[str]:
|
|
216
|
+
""":return: all tags"""
|
|
217
|
+
self._load()
|
|
218
|
+
return self._seq_tags
|
|
219
|
+
|
|
220
|
+
def get_total_num_seqs(self, *, fast: bool = False) -> int:
|
|
221
|
+
""":return: total num seqs in dataset (not for (sub)epoch)"""
|
|
222
|
+
self._load()
|
|
223
|
+
return len(self._data_values)
|
|
224
|
+
|
|
225
|
+
def get_data_dim(self, key: str) -> int:
|
|
226
|
+
""":return: dim of data entry with `key`"""
|
|
227
|
+
if key == "data" or key == "data_flat":
|
|
228
|
+
return self.vocab.num_labels
|
|
229
|
+
elif key == "data_seq_lens":
|
|
230
|
+
return 1
|
|
231
|
+
elif key == "scores":
|
|
232
|
+
return 1
|
|
233
|
+
else:
|
|
234
|
+
raise ValueError(f"{self}: unknown data key: {key}")
|
|
235
|
+
|
|
236
|
+
def get_data_dtype(self, key: str) -> str:
|
|
237
|
+
""":return: dtype of data entry with `key`"""
|
|
238
|
+
if key == "data" or key == "data_flat":
|
|
239
|
+
return "int32"
|
|
240
|
+
elif key == "data_seq_lens":
|
|
241
|
+
return "int32"
|
|
242
|
+
elif key == "scores":
|
|
243
|
+
return "float32"
|
|
244
|
+
else:
|
|
245
|
+
raise ValueError(f"{self}: unknown data key: {key}")
|
|
246
|
+
|
|
247
|
+
def get_data_keys(self) -> List[str]:
|
|
248
|
+
""":return: available data keys"""
|
|
249
|
+
return list(self.num_outputs.keys())
|
|
250
|
+
|
|
251
|
+
def get_data_shape(self, key: str) -> List[str]:
|
|
252
|
+
"""
|
|
253
|
+
:returns get_data(*, key).shape[1:], i.e. num-frames excluded
|
|
254
|
+
"""
|
|
255
|
+
return [] # all are scalar or sparse
|
|
256
|
+
|
|
257
|
+
def is_data_sparse(self, key: str) -> bool:
|
|
258
|
+
""":return: whether data entry with `key` is sparse"""
|
|
259
|
+
return key == "data" or key == "data_flat"
|
|
@@ -123,8 +123,6 @@ class Vocabulary:
|
|
|
123
123
|
Sets self.vocab, self.labels, self.num_labels.
|
|
124
124
|
"""
|
|
125
125
|
filename = self.vocab_file
|
|
126
|
-
import pickle
|
|
127
|
-
|
|
128
126
|
if self._labels is not None:
|
|
129
127
|
self._vocab = {label: i for i, label in enumerate(self._labels)}
|
|
130
128
|
self.num_labels = len(self._labels)
|
|
@@ -132,10 +130,17 @@ class Vocabulary:
|
|
|
132
130
|
self._vocab, self._labels = self._cache[filename]
|
|
133
131
|
self.num_labels = len(self._labels)
|
|
134
132
|
else:
|
|
135
|
-
if filename
|
|
133
|
+
if filename.endswith(".pkl"):
|
|
134
|
+
import pickle
|
|
135
|
+
|
|
136
136
|
d = pickle.load(open(filename, "rb"))
|
|
137
137
|
else:
|
|
138
|
-
|
|
138
|
+
if filename.endswith(".gz"):
|
|
139
|
+
import gzip
|
|
140
|
+
|
|
141
|
+
file_content = gzip.open(filename, "rt").read()
|
|
142
|
+
else:
|
|
143
|
+
file_content = open(filename, "r").read()
|
|
139
144
|
if file_content.startswith("{"):
|
|
140
145
|
d = eval(file_content)
|
|
141
146
|
else:
|
|
@@ -578,7 +578,7 @@ def masked_select(
|
|
|
578
578
|
return tensor._raw_backend.masked_select(tensor, mask=mask, dims=dims, out_dim=out_dim)
|
|
579
579
|
# Separate implementation for the case where we have a subset of the mask dims, specifically one single dim.
|
|
580
580
|
# See https://github.com/rwth-i6/returnn/issues/1605 for discussion.
|
|
581
|
-
mask = mask.copy_masked(mask_value=False
|
|
581
|
+
mask = mask.copy_masked(mask_value=False)
|
|
582
582
|
if len(dims) > 1:
|
|
583
583
|
# Flatten it, in the specified order.
|
|
584
584
|
tensor, in_dim = rf.merge_dims(tensor, dims=dims)
|
|
@@ -615,8 +615,33 @@ def masked_scatter(
|
|
|
615
615
|
:param in_dim: the dim of the source which should be scattered into the mask.
|
|
616
616
|
:return: [dims..., F...]
|
|
617
617
|
"""
|
|
618
|
-
|
|
619
|
-
|
|
618
|
+
mask_dims_set = set(mask.dims)
|
|
619
|
+
dims_set = set(dims)
|
|
620
|
+
if not dims_set.issubset(mask_dims_set):
|
|
621
|
+
raise ValueError(f"masked_scatter: dims {dims} not subset of mask dims {mask.dims}")
|
|
622
|
+
if not dims_set:
|
|
623
|
+
raise ValueError(f"masked_scatter: dims {dims} empty")
|
|
624
|
+
if dims_set == mask_dims_set:
|
|
625
|
+
# noinspection PyProtectedMember
|
|
626
|
+
return source._raw_backend.masked_scatter(source, backup=backup, mask=mask, dims=dims, in_dim=in_dim)
|
|
627
|
+
# Separate implementation for the case where we have a subset of the mask dims.
|
|
628
|
+
# Keep this consistent to masked_select above.
|
|
629
|
+
mask = mask.copy_masked(mask_value=False)
|
|
630
|
+
if len(dims) > 1:
|
|
631
|
+
# Flatten it, in the specified order.
|
|
632
|
+
mask_, dim_ = rf.merge_dims(mask, dims=dims)
|
|
633
|
+
else:
|
|
634
|
+
mask_ = mask
|
|
635
|
+
(dim_,) = dims
|
|
636
|
+
dim_: Dim
|
|
637
|
+
idxs = rf.cumsum(rf.cast(mask_, "int32"), spatial_dim=dim_) # [dim_] -> idx in dim_/in_dim + 1
|
|
638
|
+
idxs = rf.split_dims(idxs, dims=dims, axis=dim_) # [dims...]
|
|
639
|
+
idxs = rf.where(mask, idxs - 1, 0) # [dim_] -> idx in in_dim
|
|
640
|
+
res = rf.gather(source, axis=in_dim, indices=idxs)
|
|
641
|
+
if backup is None:
|
|
642
|
+
backup = 0
|
|
643
|
+
res = rf.where(mask, res, backup)
|
|
644
|
+
return res
|
|
620
645
|
|
|
621
646
|
|
|
622
647
|
def sequence_mask(dims: Union[Dim, Sequence[Dim]], *, device: Optional[str] = None) -> Tensor:
|
|
@@ -733,6 +758,8 @@ def scatter(
|
|
|
733
758
|
with mode=="sum",
|
|
734
759
|
or otherwise it will take the max/min.
|
|
735
760
|
|
|
761
|
+
``scatter`` is the inverse of :func:`gather`.
|
|
762
|
+
|
|
736
763
|
(TF segment_sum can be implemented via this.)
|
|
737
764
|
|
|
738
765
|
:param source: [batch_dims..., indices_dim(s)..., feature_dims...]
|
|
@@ -174,23 +174,17 @@ class _TensorMixin(_TensorMixinBase):
|
|
|
174
174
|
This is deprecated. Rather, the placeholder should be created outside and passed in.
|
|
175
175
|
:param str|dict[str]|returnn.datasets.util.vocabulary.Vocabulary|None vocab: vocab of the feature dim
|
|
176
176
|
or sparse dim.
|
|
177
|
-
This is deprecated. Rather, the vocab is part of the :class:`Dim`.
|
|
178
177
|
:param dict[int|str,Dim]|None same_dim_tags_as: will mark our dimension tags to be the same
|
|
179
178
|
"""
|
|
180
179
|
assert isinstance(self, _t.Tensor)
|
|
181
180
|
shape, sparse, dim, batch_dim_axis, dim_tags # noqa # unused here, handled in infer_dim_tags
|
|
182
181
|
|
|
183
182
|
if vocab is not None:
|
|
184
|
-
from returnn.datasets.util.vocabulary import Vocabulary
|
|
185
|
-
|
|
186
|
-
if isinstance(vocab, str):
|
|
187
|
-
vocab = Vocabulary(vocab)
|
|
188
|
-
elif isinstance(vocab, dict):
|
|
189
|
-
vocab = Vocabulary.create_vocab(**vocab)
|
|
190
|
-
assert isinstance(vocab, Vocabulary)
|
|
191
183
|
assert self.sparse, "%s should represent indices of %s" % (self, vocab)
|
|
192
|
-
|
|
193
|
-
|
|
184
|
+
if not self.sparse_dim.vocab: # might already have been set earlier
|
|
185
|
+
vocab = _get_vocab(vocab)
|
|
186
|
+
assert self.dim == vocab.num_labels, "%s dims do not match with vocab %s" % (self, vocab)
|
|
187
|
+
self.sparse_dim.vocab = vocab
|
|
194
188
|
|
|
195
189
|
if kwargs:
|
|
196
190
|
self._extra = _TensorExtra(tensor=self, **kwargs)
|
|
@@ -3421,39 +3415,42 @@ def infer_sparse_dim(
|
|
|
3421
3415
|
*,
|
|
3422
3416
|
name: str,
|
|
3423
3417
|
sparse: Optional[bool] = None,
|
|
3424
|
-
sparse_dim,
|
|
3425
3418
|
dim=NotSpecified,
|
|
3419
|
+
vocab=None,
|
|
3426
3420
|
**_other_kwargs,
|
|
3427
3421
|
) -> Optional[Dim]:
|
|
3428
3422
|
"""
|
|
3423
|
+
Called when sparse_dim is None,
|
|
3424
|
+
but we assume it is sparse
|
|
3425
|
+
|
|
3429
3426
|
:param name:
|
|
3430
3427
|
:param sparse:
|
|
3431
|
-
:param sparse_dim:
|
|
3432
3428
|
:param dim:
|
|
3429
|
+
:param vocab:
|
|
3433
3430
|
:return: sparse dim
|
|
3434
3431
|
"""
|
|
3435
3432
|
if sparse is None:
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
)
|
|
3433
|
+
if vocab is None:
|
|
3434
|
+
return None
|
|
3435
|
+
sparse = True
|
|
3436
|
+
assert isinstance(sparse, bool)
|
|
3437
|
+
if not sparse:
|
|
3438
|
+
return None
|
|
3439
|
+
vocab = _get_vocab(vocab) if vocab else None
|
|
3440
|
+
if vocab:
|
|
3441
|
+
if dim is NotSpecified or dim is None:
|
|
3442
|
+
dim = vocab.num_labels
|
|
3447
3443
|
else:
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3444
|
+
assert dim == vocab.num_labels
|
|
3445
|
+
assert dim is not NotSpecified, "need dim (num classes) if sparse"
|
|
3446
|
+
assert dim is None or isinstance(dim, int)
|
|
3447
|
+
sparse_dim = Dim(
|
|
3448
|
+
kind=Dim.Types.Feature,
|
|
3449
|
+
dimension=dim,
|
|
3450
|
+
description="%s:sparse-dim" % name,
|
|
3451
|
+
auto_generated=True,
|
|
3452
|
+
vocab=vocab,
|
|
3453
|
+
)
|
|
3457
3454
|
return sparse_dim
|
|
3458
3455
|
|
|
3459
3456
|
|
|
@@ -3535,6 +3532,17 @@ def infer_dim_tags(
|
|
|
3535
3532
|
return dims
|
|
3536
3533
|
|
|
3537
3534
|
|
|
3535
|
+
def _get_vocab(vocab):
|
|
3536
|
+
from returnn.datasets.util.vocabulary import Vocabulary
|
|
3537
|
+
|
|
3538
|
+
if isinstance(vocab, str):
|
|
3539
|
+
vocab = Vocabulary(vocab)
|
|
3540
|
+
elif isinstance(vocab, dict):
|
|
3541
|
+
vocab = Vocabulary.create_vocab(**vocab)
|
|
3542
|
+
assert isinstance(vocab, Vocabulary)
|
|
3543
|
+
return vocab
|
|
3544
|
+
|
|
3545
|
+
|
|
3538
3546
|
class _SizePlaceholderProxy:
|
|
3539
3547
|
"""
|
|
3540
3548
|
This is a proxy object to emulate the original Tensor.size_placeholder behavior,
|
|
@@ -84,8 +84,8 @@ class Tensor(_TensorMixin, _TensorOpOverloadsMixin, Generic[RawTensorType]):
|
|
|
84
84
|
- v2: time_dim_axis, feature_dim_axis are None by default.
|
|
85
85
|
:param kwargs: see :func:`_handle_extra_kwargs`, :func:`infer_dim_tags`
|
|
86
86
|
"""
|
|
87
|
-
if "sparse" in kwargs and sparse_dim is None:
|
|
88
|
-
sparse_dim = _tensor_extra.infer_sparse_dim(name=name,
|
|
87
|
+
if ("sparse" in kwargs or "vocab" in kwargs) and sparse_dim is None:
|
|
88
|
+
sparse_dim = _tensor_extra.infer_sparse_dim(name=name, **kwargs)
|
|
89
89
|
if dims is not None:
|
|
90
90
|
assert "shape" not in kwargs and "dim_tags" not in kwargs # probably old code got this wrong
|
|
91
91
|
if version is None:
|
|
@@ -8,10 +8,11 @@ from typing import Optional, Union, Sequence, List, Tuple, Dict
|
|
|
8
8
|
import typing
|
|
9
9
|
import tensorflow as tf
|
|
10
10
|
import contextlib
|
|
11
|
+
from returnn.tensor import Tensor, Dim
|
|
11
12
|
import returnn.tf.compat as tf_compat
|
|
12
13
|
import returnn.tf.util.basic as tf_util
|
|
13
14
|
from returnn.util.basic import unicode, NotSpecified
|
|
14
|
-
from returnn.tf.util.data import Data, SearchBeam,
|
|
15
|
+
from returnn.tf.util.data import Data, SearchBeam, FeatureDim, SpatialDim
|
|
15
16
|
from returnn.tf.util.basic import OutputWithActivation, dimshuffle, swapaxes
|
|
16
17
|
from returnn.log import log
|
|
17
18
|
from .base import LayerBase, Loss, InternalLayer, SearchChoices
|
|
@@ -8445,7 +8446,7 @@ class TimeChunkingLayer(_ConcatInputLayer):
|
|
|
8445
8446
|
x = x.copy_with_batch_dim_axis(1)
|
|
8446
8447
|
self.input_data = x
|
|
8447
8448
|
in_dim = x.dim_tags[0]
|
|
8448
|
-
x_t = x.placeholder
|
|
8449
|
+
x_t = x.placeholder # [T,B,...]
|
|
8449
8450
|
if in_dim.dyn_size is not None:
|
|
8450
8451
|
index = tf.cast(tf_util.sequence_mask_time_major(in_dim.dyn_size), tf.float32)
|
|
8451
8452
|
else:
|
|
@@ -8458,13 +8459,14 @@ class TimeChunkingLayer(_ConcatInputLayer):
|
|
|
8458
8459
|
from returnn.tf.native_op import chunk
|
|
8459
8460
|
|
|
8460
8461
|
out, oindex = chunk(x_t, index=index, chunk_step=chunk_step, chunk_size=chunk_size)
|
|
8462
|
+
# out shape (chunk_size, n_batch * n_chunks, n_dim), oindex shape (chunk_size, n_batch * n_chunks)
|
|
8461
8463
|
if ext_rem_shape:
|
|
8462
|
-
out = tf.reshape(out, tf.concat([tf.shape(oindex), ext_rem_shape], axis=0))
|
|
8464
|
+
out = tf.reshape(out, tf.concat([tf.shape(oindex), ext_rem_shape], axis=0)) # [C_size,B*C,...]
|
|
8463
8465
|
self.output.placeholder = out
|
|
8464
8466
|
out.set_shape(self.output.batch_shape)
|
|
8465
8467
|
out_dim = self.output.dim_tags[0]
|
|
8466
8468
|
if out_dim.dimension is None and out_dim.dyn_size is None:
|
|
8467
|
-
out_dim.dyn_size = tf.reduce_sum(tf.cast(oindex, tf.int32), axis=0)
|
|
8469
|
+
out_dim.dyn_size = tf.reduce_sum(tf.cast(oindex, tf.int32), axis=0) # [B*C]
|
|
8468
8470
|
|
|
8469
8471
|
@classmethod
|
|
8470
8472
|
def get_out_data_from_opts(cls, name, sources, axis="T", out_dim=None, **kwargs):
|
|
@@ -8480,8 +8482,20 @@ class TimeChunkingLayer(_ConcatInputLayer):
|
|
|
8480
8482
|
in_dim = data.dim_tags[axis]
|
|
8481
8483
|
data = data.copy_move_axis(old_axis=axis, new_axis=0) # (T,...)
|
|
8482
8484
|
data = data.copy_with_batch_dim_axis(1) # (T,B,...)
|
|
8485
|
+
old_batch_dim = data.get_batch_dim_tag()
|
|
8486
|
+
new_batch_dim = Dim(
|
|
8487
|
+
kind=old_batch_dim.kind,
|
|
8488
|
+
description=f"{name}:chunked_batch",
|
|
8489
|
+
dimension=Tensor(f"{name}:chunked_batch", [], "int32"), # unknown here...
|
|
8490
|
+
)
|
|
8491
|
+
data = data.copy_template_replace_dim_tag(1, new_batch_dim)
|
|
8483
8492
|
if not out_dim:
|
|
8484
|
-
out_dim = Dim(
|
|
8493
|
+
out_dim = Dim(
|
|
8494
|
+
Tensor(f"{name}:chunk_size", [new_batch_dim], "int32"),
|
|
8495
|
+
kind=in_dim.kind,
|
|
8496
|
+
description=f"{name}:chunking",
|
|
8497
|
+
auto_generated=True,
|
|
8498
|
+
)
|
|
8485
8499
|
data = data.copy_template_replace_dim_tag(axis=0, new_dim_tag=out_dim) # (T',B',...)
|
|
8486
8500
|
data.time_dim_axis = 0
|
|
8487
8501
|
return data
|
|
@@ -302,7 +302,6 @@ class TorchBackend(Backend[torch.Tensor]):
|
|
|
302
302
|
pad_value: Union[None, int, float] = None,
|
|
303
303
|
) -> Tensor:
|
|
304
304
|
"""split dims"""
|
|
305
|
-
assert not axis.need_masking() # not implemented
|
|
306
305
|
assert pad_to_multiples in (None, False) # not implemented
|
|
307
306
|
axis_ = source.get_axis_from_description(axis)
|
|
308
307
|
out_dims = source.dims[:axis_] + tuple(dims) + source.dims[axis_ + 1 :]
|
|
@@ -1747,6 +1746,11 @@ class TorchBackend(Backend[torch.Tensor]):
|
|
|
1747
1746
|
) -> Tensor:
|
|
1748
1747
|
"""masked scatter"""
|
|
1749
1748
|
assert mask.dtype == "bool"
|
|
1749
|
+
# Note: If mask.dims != dims, then sum(mask_raw.flatten()) could have less elements than source_raw
|
|
1750
|
+
# (not counting remaining_dims), and then the out_raw.masked_scatter_ below fails silently!
|
|
1751
|
+
# That's why we assert this here.
|
|
1752
|
+
# Currently in the RF code, we have a generic fallback implementation,
|
|
1753
|
+
# very similar to masked_select.
|
|
1750
1754
|
assert set(mask.dims) == set(dims)
|
|
1751
1755
|
assert in_dim in source.dims
|
|
1752
1756
|
remaining_dims = [d for d in source.dims if d not in mask.dims and d != in_dim]
|
|
@@ -1765,6 +1769,7 @@ class TorchBackend(Backend[torch.Tensor]):
|
|
|
1765
1769
|
out_dims = backup.dims
|
|
1766
1770
|
out_raw = backup.raw_tensor.clone() # we operate inplace below
|
|
1767
1771
|
|
|
1772
|
+
mask = mask.copy_masked(mask_value=False)
|
|
1768
1773
|
mask_raw = mask.copy_compatible_to_dims_raw(out_dims)
|
|
1769
1774
|
out_raw.masked_scatter_(mask_raw, source_raw)
|
|
1770
1775
|
return Tensor(
|
|
@@ -112,6 +112,7 @@ returnn/datasets/postprocessing.py
|
|
|
112
112
|
returnn/datasets/raw_wav.py
|
|
113
113
|
returnn/datasets/sprint.py
|
|
114
114
|
returnn/datasets/stereo.py
|
|
115
|
+
returnn/datasets/text_dict.py
|
|
115
116
|
returnn/datasets/util/__init__.py
|
|
116
117
|
returnn/datasets/util/feature_extraction.py
|
|
117
118
|
returnn/datasets/util/strings.py
|